微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 新手学习verilog的两个问题

新手学习verilog的两个问题

时间:10-02 整理:3721RD 点击:
大家好,刚刚学习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

手机端只能看到第一个问题。
这是一个边沿敏感的always块,你根据数电里面时序电路的知识,把波形图画出来就一目了然了。

<= 非阻塞赋值,改变信号将来(上升沿之后)的值;当进入always块时,count1为9,引用处都为9,等到块结束后值才会变化。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top