新手学习verilog的两个问题

2019-07-15 22:14发布

tica, Arial, sans-serif">大家好,刚刚学习verilog有两个问题想请教以下

1. 为什么在verilog中的进位是从9进位,但是实际是10有效呢?
比如一个秒表中的进位程序如下

always_ff @(posedge clk)
        begin
            if (reset)
              begin
                count1 <= '0;            
                count2 <= '0;           
                count3 <= '0;           
                count4 <= '0;           
              end
            else if(enable)
            begin
               if (count1 == 4'b1001)
                    begin
                    count1 <= '0;
                   if (count2 == 4'b1001)
                       begin
                       count2 <= '0;
                       if (count3 == 4'b1001)
                             begin
                             count3 <= '0;
                            if (count4 == 4'b1001)
                               begin
                               count4 <= '0;
                               end
                   else
                     count4 <= count4 + 1'b1;
                     end
               else
                  count3 <= count3 + 1'b1;
                  end
            else
               count2 <= count2 + 1'b1;
               end
         else
            count1 <= count1 + 1'b1;
            end
         end
endmodule


程序比较简单,但是为什么进位时的判定条件是 if (count1 == 4'b1001)
而不是if (count1 == 4'b1010) 呢?  从C的角度看,应该是等于10才归零才进位呀?






2.为什么这个程序会陷入死循环? pos和an一直等于0,不管我按了reset没有。。


always_ff @(posedge clk)
        if (reset)
         begin
            pos <= '0;            // set all bits to 0
            an <= '0;            // set all bits to 0
         end
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
2条回答
justbetter
1楼-- · 2019-07-15 22:29
 精彩回答 2  元偷偷看……
hawke
2楼-- · 2019-07-16 00:50
<= 非阻塞赋值,改变信号将来(上升沿之后)的值;当进入always块时,count1为9,引用处都为9,等到块结束后值才会变化。

一周热门 更多>