哪一个计数器才会出现9呢?
扫描二维码
随时随地手机看文章
摘要
一个很简单的题目,考验你的观念清不清楚…
介绍
废话不多说,直接看代码吧,哪个计数器才会数到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
[!--empirenews.page--]
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功力的不二法门,共勉之。