sgdd.net
当前位置:首页 >> vErilog时钟分频 >>

vErilog时钟分频

clockout 为1的条件是buffer所有的bit都为1.buffer是一个25位计数器,因此buffer需要2^25个输入时钟周期才可以输出一次全1.所以该输出时钟是2^25分频.

module clk_div(clk_20m, clk_1k);input clk_20m;output clk_1k;reg clk_1k;reg [15:0] counter;always@(posedge clk_20m)begin if(counter >= 10000)// 如果计数到10000就翻转一次 begin counter 评论0 0 0

你照着这个思路做:20mhz,一个时钟周期是50ns,计数20 000 000下就是1s.你做个计数器计数就好,计数到10 000 000反转一次,就得到了周期1s的信号希望能帮到你!

假设你的clk就是1s周期的时钟 那么10s的应该是这么写 reg [3:0] cnt_10; reg clk_10s; always @ (posedge rst or posedge clk) begin if (rst) begin cnt_10 clk_10s end else begin if (cnt_10==4) begin cnt_10 clk_10s end else begin cnt_10 clk_10s end end60的,cnt就在29归零,同时clk_60s反向 是在半周期反向才是占空比1:1.

input clkin; output clkout; reg clkout; always @(posedge clkin) begin if(clkin) clkout=~clkout; end endmodule 差不多就是这个思路了,在输入时钟上升沿使输出时钟反向,就可以实现二分频.如果要多分频,只需要多数几个上升沿就行了.欢迎追问~

这个要设置rom的,设置好rom然后直接调用,可以在rom里面设置好你自己需要的各个分频,然后在程序里面调用,还可以实现调频和歌曲的频率调整,详细的话你可以参考别人的歌曲是如果编程的,大概也是差不多

25行:改成else if39行:改为else if44行:改为else iffork join在这个代码里面嵌套的很不合适.fpga本来就是并行的,这里用感觉多此一举.如果还有错误记得追问..

有两种方法1,直接调用锁相环2,计数分频,就这么简单

形象一点的话你可以仿真看一下,把你的计数器位数展开,你会看到越是高位,他的翻转频率越低,因为每高一位就相当于一次2分频,用计数器最高位其实就相当于进行了高次的二分频,从而得到你想要的低频率时钟.

直接新建一个时钟的IP核,设置好参数,可以自动生成你需要的代码

网站首页 | 网站地图
All rights reserved Powered by www.sgdd.net
copyright ©right 2010-2021。
内容来自网络,如有侵犯请联系客服。zhit325@qq.com