8分频verilog线_Verilog分频器的设计

更新时间:2023-07-13 12:59:52 阅读: 评论:0

8分频verilog线_Verilog分频器的设计
⼤三都要结束了,才发现⾃⼰太多东西没深⼊学习。
对于偶分频:(计数到分频数的⼀半就翻转)
注:
图中只⽤了⼀个计数器,当然也可以⽤多个;
图中只计数到需要分频的⼀半,当然也可计数到更多;
图中从第⼀个上升沿有效,当然也可延迟多个周期开始。
例如:
1 //任意偶分频设计
2 modulefrequency_divider_6 (clk, rst, data_out);
3 inputclk, rst;
4 outputdata_out;
5 reg [1:0] counter;
6 regdata_out;
7 parameter N = 6; //改变N的值变成任意偶分频,同时counter的范围需要相应修改
8
9 always @ (podge clk or negedgerst)10 begin
11 if (!rst) //复位置零
12 begin呆若木鸡翻译
13 counter <= 0;14 data_out <= 0;15 end
16 el //分频
17 begin
18 if (counter == N/2 - 1) //偶分频数⼀半时反相
19 begin
20 data_out <= ~data_out;21 counter <= 0; //置0,从0计数
22 end
23 el
pullover24 counter <= counter + 1;25 end
26 end
27 endmodule
View Code
从仿真波形看出复位后并没有⽴刻达到分频效果,复位结束后的2.5个周期⽆效,之后才达到分频效果。
如果想从第⼀个上升沿就开始分频,那么就可以像我画的图中那样计数。如下所⽰:
1 /任意偶分频设计
2 modulefrequency_divider_6 (clk, rst, data_out);
3 inputclk, rst;
4 outputdata_out;
5 reg [1:0] counter;
evermore6 regdata_out;
7 parameter N = 6; //改变N的值变成任意偶分频,同时counter的范围需要相应修改
8
9 always @ (podge clk or negedgerst)10 begin
11 if (!rst) //复位置零
12 begin
13 data_out <= 0;14 end
15 el //分频,也可⽤底下注释部分
16 begin
17 if (counter == 0) //偶分频数⼀半时反相
18 begin
19 data_out <= ~data_out;20 end
21 el
22 data_out <=data_out;23 end
24 end
25 always @ (podge clk or negedgerst)26 begin
27 if (!rst)28 begin
anklet
29 counter <= 0;30 end
31 el
32 begin
33 if (counter == (N / 2 - 1))34 begin
35 counter <= 0;36 end
37 el
38 counter <= counter + 1;39 end
40 end
41 endmodule
View Code
注意到此代码和上⼀个同样是6分频的,此处把计数部分和分频部分分离开来,可读性强⼀些吧。此处只计数到 2 就把计数器清零,计数到0 输出的分频信号就翻转。
从仿真波形可看出从第⼀个上升沿就计数了。
计数到 N - 1 (注意计数器位宽)例如:
初会成绩查询1 //任意偶分频设计
2 modulefrequency_divider_6 (clk, rst, data_out);
3 inputclk, rst;
4 outputdata_out;
5 reg [2:0] counter;
6 regdata_out;
7 parameter N = 6; //改变N的值变成任意偶分频,同时counter的范围需要相应修改
8兴奋的读音
9 always @ (podge clk or negedgerst)10 begin
11 if (!rst) //复位置零
12 begin
13 data_out <= 0;//此处为1也可,看需求
14 end
15 el //分频,也可⽤底下注释部分
16 begin
17 if (counter < (N >> 1)) //偶分频数⼀半时反相
18 begin
19 data_out <= 1;20 end
21 el
22 data_out <= 0;23 end
24 end
25 always @ (podge clk or negedgerst)26 begin
27 if (!rst)28 begin
29 counter <= 0;30 end
31 el
32 begin
33 if (counter == (N - 1))34 begin
35 counter <= 0;36 end
37 el
38 counter <= counter + 1;39 end
40 end
41 endmodule
View Code
写法多种多样,差别都不太⼤,不再⼀⼀举例,根据需求设计即可。
对于奇分频:(⽤两个计数器分别计到上升沿和下降沿达到分频数 (N - 1) / 2 和 (N + 1) / 2 时翻转)注:
图中⽤了两个计数器,当然也可以⽤多个(两个就够了);
图中只计数到需要分频数的(N - 1) / 2 和 (N + 1) / 2,时翻转,得到的波形需要相或;
图中从第⼀个上升沿有效,当然也可延迟多个周期开始。
例如:
1 //任意奇分频设计
2 modulefrequency_divider_5 (clk, rst, clk_p, clk_n, data_out);
历年奥斯卡最佳影片3 inputclk, rst;
4 outputclk_p, clk_n, data_out;
5 regclk_p, clk_n;
6 reg [2:0] counter_p, counter_n;
7 parameter N = 5; //改变N的值实现任意奇分频,注意counter_p和counter_n的范围
8 //分频
9 always @ (podge clk or negedge rst) //上升沿计数与反相
10 begin
11 if (!rst) //复位置0,从0计数
12 begin
13 counter_p <= 0;14 clk_p <= 0;15 end
16 el
17 begin
18 if (counter_p == N - 1)19 counter_p <= 0;20 el
21 counter_p <= counter_p + 1;22 if ((counter_p == (N - 1) / 2) || (counter_p == N - 1))23 clk_p <= ~clk_p;24 end
2012安徽高考英语25 end
26 always @ (negedge clk or negedge rst) //下降沿计数与反相
27 begin
28 if (!rst)29 begin
30 counter_n <= 0;31 clk_n <= 0;32 end
33 el
34 begin
35 if (counter_n == N - 1)36 counter_n <= 0;37 el
38 counter_n <= counter_n + 1;39 if ((counter_n == (N - 1) / 2) || (counter_n == N - 1))40 clk_n <= ~clk_n;41 end
42 end
43 assign data_out = clk_p | clk_n; //相或运算,得到50%占空⽐的分频输出信号
44 endmodule
45
View Code
和偶分频同样的情况,复位后有多个⽆效周期。
如果想从第⼀个上升沿就开始分频,那么就可以像我画的图中那样计数。如下所⽰:
从仿真波形可看出从第⼀个上升沿就计数了。
除此之外,还可以计数到这些就翻转:
1 和 (N - 1) / 2
(N - 1) / 2 和 N - 1
等等,根据需求即可
⽐如:
1 //任意奇分频设计
2 modulefrequency_divider_5 (clk, rst, clk_p, clk_n, data_out);
3 inputclk, rst;
4 outputclk_p, clk_n, data_out;
5 regclk_p, clk_n;
6 reg [2:0] counter_p, counter_n;
7 parameter N = 5; //改变N的值实现任意奇分频,注意counter_p和counter_n的范围
8
9 always @ (podge clk or negedge rst) //上升沿计数器
10 begin
11 if (!rst)12 counter_p <= 0;13 el
14 if (counter_p == N - 1)15 counter_p <= 0;16 el
17 counter_p <= counter_p + 1;18 end
19 always @ (podge clk or negedge rst) //上升沿反相
20 begin
21 if (!rst)22 clk_p <= 0;23 el
24 if (counter_p < (N >> 1)) //N整体向右移动⼀位,最⾼位补零,其实就是N/2,不过在计算奇数的时候有很明显的优越性
25 clk_p <= 1;26 el
27 clk_p <= 0;28 end
29
30 always @ (negedge clk or negedge rst) //下降沿计数器
31 begin
32 if (!rst)33 counter_n <= 0;34 el
35 if (counter_n == N - 1)36 counter_n <= 0;37 el
38 counter_n <= counter_n + 1;39 end
40 always @ (negedge clk or negedge rst) //下降沿反相
41 begin
42 if (!rst)43 clk_n <= 0;44 el
45 if ((counter_n < (N >> 1))46 clk_n <= 1;47 el
48 clk_n <= 0;49 end
50 assign data_out = clk_p | clk_n; //相或运算,得到50%占空⽐的分频输出信号
51 endmodule
View Code
任意分频设计:
毫升的英文1 //下⾯是任意正整数的分频/ 此时举例是6倍频 /
2 modulefrequency_divider_all (clk, rst, data_out, clk_p, clk_n);3
4 inputclk, rst;
go to sleep
5 outputdata_out, clk_p, clk_n;6
7 parameter WIDTH = 3; //计数器⼆进制位宽

本文发布于:2023-07-13 12:59:52,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/78/1094336.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

下一篇:Unit2课文翻译
标签:任意   计数   设计   部分   需要   计数器   复位   上升
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图