【 Verilog HDL 】清晰的時序邏輯描述方法之計數器的描述範例
阿新 • • 發佈:2018-12-11
所謂清晰,就是便於閱讀與理解,如下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
這個組合邏輯就藏身於賦值操作符號的右邊。當組合邏輯比較簡單時,這樣做也無傷大雅,甚至能讓程式碼更加的簡潔。