新版修改在onenote
修改后的时序图
- 指示信号flag的作用
cnt的加1条件在灰色区域中是1,也就是在灰色部分只要clk来就加1,但如果直接add_cnt==1的话,没法和使能信号来之前的白色区域区分,所以需要加一个指示信号flag,在灰色区域保持为1。这样加1条件就变成
add_cnt==flag
在仿真图中能明显看到,flag=0没在计数,flag=1的第一个clk计数0
- x和y的赋值
1)按照书上的代码
always @(*)begin
if(cnt1==0)begin
x = 1;
y = 1;
x,y并没有两头为0
2)按照计数器规则:使用某一计数值,必须同时满足加1条件
always @(*)begin
if(add_cnt_c && cnt_c==0)begin
x = 1;
y = 1;
end
错的更大,因为x,y在cnt1的某个值内是一直保持的,不是只在cnt1变化的那个时钟内
3) 加个flag,正确。
always @(*)begin
if(flag && cnt_c==0)begin
x = 1;
y = 1;
end