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的信号希望能帮到你!

//任意奇数分频器,只需要将n改为你想要的奇数即可.module any_odd_div (clkdiv,clk); output clkdiv; //输出分频信号 input clk; //时钟信号 reg[2:0]cnt1,cnt2;//计数器1,计数器2 reg clk_temp1,clk_temp2; parameter n = 7; //7分频 always @(posedge clk) begin if(cnt1 == n-1) begin cnt1 评论0 0 0

以4分频作为一个例子两比特计数器计数,在每个输入时钟的上升沿计数器加1这样计数器会计数 0 -》1 -》2-》3-》0表达为二进制为:00011011可以看到计数器的高位每四个输入时钟的变化是 0,0,1,1.因此如果把计数器的高位作为一个输出时钟,它每四个输入时钟的周期完成一次0011的周期.因此相对于输入时钟实现了4分频

module divider(clk_in,rst,mode,clk_out);input clk_in;input rst;input mode;output clk_out;reg [3:0] cnt1;reg [3:0] cnt2;wire level_gen;reg level_chg;wire [1:0] mode;reg clk_out;always@(posedge clk_in or negedge rst)begin if(rst == 1'b0)begin cnt1 = 4'h5)begin cnt1 评论0 0 0

代码如下,供参考 reg [24:0] cnt; reg clk_1hz; parameter c_25m = 25'd24_999_999; always@(posedge clk_50m or negedge rst) if (!rst) cnt <= 25'b0; else if (cnt >= c_25m ) // cnt <= 25'b0; else cnt <= cnt + 1'b1; always@(posedge clk_50m or negedge rst) if (!rst) clk_1hz <= 1'b0; else if (cnt == c_25m ) clk_1hz <= !clk_1hz;

module freq(out,clk,reset);input clk,reset;output out;reg out;reg[2:0] count;always @(posedge clk or negedge reset)if(!reset) begin out 评论0 0 0

分频呗,先50分频,从0~24时clkdiv=1,25~49时clkdiv=0;之后再10^6分频

假设你的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.

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