發表文章

目前顯示的是 3月 22, 2020的文章

[Verilog] `define 和 parameter 的差別與使用時機

在一段程式碼中,容易變動或者可調的數字,可以設為參數,讓程式在未來修改規格變得靈活。 Verilog 提供 parameter 關鍵字來定義參數。下列的程式碼提供一個例子: parameter counter_end = 99 ; parameter counter_step = 3 ; parameter counter_width = 8 ; reg [counter_width- 1 : 0 ] counter; wire [counter_width- 1 : 0 ] counter_zero = {(counter_width){ 1'b0 }}; always @( posedge clk or negedge rst_n) begin if (!rst_n) counter <= counter_zero; else if (counter == counter_end) counter <= counter_zero; else counter <= counter + counter_step; end 我們可以看出,counter 的行為,已受 parameter 的約束,因此未來 counter 如果需要更動,可以很快透過 parameter 來調整規格,這是我認為 parameter 比較好的用法。 如果一個電路包含三個子 IP,這三個子 IP 都吃同樣的 parameter,如果這些 IP 都有上述 parameter 的宣告在 code 內,我們就可以在宣告三個 IP 的 instance 時,將共同參數傳遞進去: func #( .counter_end( 99 ), .counter_step( 3 ), .counter_width( 8 ) ) 接下來討論 `define 語法。 `define 也可以用來定義參數,但以我的觀點,我認為 `define 比較像是從頂層往...