1. 程式人生 > >【 Verilog HDL 】清晰的時序邏輯描述方法之計數器的描述範例

【 Verilog HDL 】清晰的時序邏輯描述方法之計數器的描述範例

所謂清晰,就是便於閱讀與理解,如下HDL程式碼所描述的電路就是清晰的時序邏輯電路,對應計數器的功能:  

[email protected]( posedge clk )
begin
    if( rst )
    begin
        count <= 1'b0;
    end
    else
    begin
        count <= nextCount;
    end

end

assign nextCount = count + 1'b1;

雖然這個程式碼簡單,但就是這樣的程式碼能說明問題,帶給了我一些啟發。上述程式碼之所以清晰,就是把描述組合邏輯和純時序邏輯的程式碼分隔開來,尤其是當代碼所描述的功能稍微複雜一些的時候,這樣更方便閱讀和理解。

所謂的純時序邏輯,其實就是對暫存器的行為進行描述。其相對於組合邏輯最大的不同就是敏感時鐘邊沿事件,可以是敏感上升沿也可以是敏感下降沿,這個根據實際需求決定,但是絕不可能是同時敏感時鐘的兩種邊沿事件,這是由其所對應的觸發器的結構和工作原理決定的,因為觸發器這種硬體結構只有一個時鐘輸入端。

因此,類似如下的程式碼是無法綜合的:

[email protected]( posedge clk, negedge clk )
begin
    a <= din;

end

由於上述那個計數器的例子比較簡單,所以組合邏輯和時序邏輯混寫也無傷大雅。如下:

[email protected]
( posedge clk ) begin if( rst ) begin count <= 1'b0; end else begin count <= count + 1'b1; end end

這個組合邏輯就藏身於賦值操作符號的右邊。當組合邏輯比較簡單時,這樣做也無傷大雅,甚至能讓程式碼更加的簡潔。