哪一个计数器才会出现9呢?

嵌入式操作系统

57人已加入

描述

摘要
一个很简单的题目,考验你的观念清不清楚…

介绍
废话不多说,直接看代码吧,哪个计数器才会数到9呢?

counter9_v1.v/Verilog

1/*
2 (c) OOMusou 2008年
3
4文件名    : counter9_v1.v
5编译器    : Quartus II 7.2 SP3
6描述: 计数到9 ?
7发行     : 07/18/2008 1.0
8 *
9模块counter9_v1 (
10输入的clk,
11输入的rst_n,
12输出的reg [3 :0] q
13);
14
15 reg [3 :0] p;
16
17 always@ (posedge clk或negedge rst_n)开始
18,如果(! rst_n)
19     p <= 0;
20
21     p <= p + 1;
22末端
23
24 always@(p)开始
25,如果(p == 9)
26     q = 0;
27
28     q = p;
29末端
30 endmodule

 计数器

 计数器

counter9_v2.v/Verilog

计数器
1/*
2 (c) OOMusou 2008年
3
4文件名    : counter9_v2.v
5编译器    : Quartus II 7.2 SP3
6描述: 计数到9 ?
7发行     : 07/18/2008 1.0
8 *
9模块counter9_v2 (
10输入的clk,
11输入的rst_n,
输出的12 [3 :0] q
13);
14
15 reg [3 :0] p;
16
17分配q = p;
18
19 always@ (posedge clk或negedge rst_n)开始
20,如果(! rst_n)
21     p <= 0;
22,如果(p == 9)
23     p <= 0;
24
25     p <= p + 1;
26末端
27
28 endmodule

计数器

结论
由模拟的波形图得知, counter_v2才会数到9,你答对了吗?

从结构图中,可以发现两者合成出来的电路是差异甚大, v1的reg q后面接了一个组合电路,经过一个比较器与多任务器后‘马上’输出结果,所以还没数到9就被‘拦胡’了, v2是个典型的循序电路,由比较器判断的p,是从D-FF所提供的p,而这个p早已经输出到q了,要拦也拦不下来,且9已经存在于D-FF中1个时钟,要让p = 0也是下一个时钟的事情,所以在下一个时钟出现q = 0。

多多观察RTL观察者所合成的电路与ModelSim仿真结果是增加Verilog功力的不二法门,共勉之。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分