0
我正在尋找一種方式來連接多個define statements into a single
定義語句,這樣我就可以在case語句中使用它。的Verilog - 連接多個定義爲一個定義
作爲一個例子,有在頭文件中定義的存儲器地址。我有一個case語句,用於決定是否將值寫入LUTRAM或根據地址阻塞RAM。
我有以下定義:
`define PWM_REPEAT_REG (6'h10) // Number of times to repeat a PWM Pulse
`define PWM_WIDTH_REG (6'h14) // Pulse width in timebase counts
`define PWM_PULSE_PERIOD (6'h1c) // PWM pulse period in timebase counts.
裏面我的代碼,我有一個case語句看起來像這樣:
case(sys_mgr_address)
`PWM_REPEAT_REG, `PWM_WIDTH_REG, `PWM_PULSE_PERIOD : begin // Values for block RAM
ram_a_din <= sys_mgr_write_data;
ram_a_addr <= sys_mgr_address;
ram_a_wr_enable <= 1'b1;
sys_mgr_write_ok <= 1'b1;
update_available <= 1'b1;
end
endcase
實際的設計有幾個地址,這種類型的案件陳述重複幾次。而不是每一個遍地鍵入了所有的定義,我想創建另一個定義是這樣的:
`define PWM_MODULE_BLOCK_RAM_ADDRESSES ({`PWM_REPEAT_REG, `PWM_WIDTH_REG, `PWM_PULSE_PERIOD})
case(sys_mgr_address)
PWM_MODULE_BLOCK_RAM_ADDRESSES : begin // Values for block RAM
ram_a_din <= sys_mgr_write_data;
ram_a_addr <= sys_mgr_address;
ram_a_wr_enable <= 1'b1;
sys_mgr_write_ok <= 1'b1;
update_available <= 1'b1;
end
endcase
^^因爲它是串聯的數字成爲一個漂亮的上面的代碼不起作用大矢量。我嘗試了一些變體,比如沒有連接大括號{},將其定義爲文本,幾個不同的變體(但我不確定它到底是什麼)。
有什麼辦法,才能查看擴展宏之前編譯?現在,它只是給我一個錯誤,我嘗試過的大多數錯誤都不會讓故障排除變得容易。
謝謝!
我曾經嘗試過,但是在定義的周圍使用括號,所以它是'PWM_MODULE_BLOCK_RAM_ADDRESSES('PWM_REPEAT_REG,'PWM_WIDTH_REG,'PWM_PULSE_PERIOD)'。沒有括號的方法有效,爲什麼會這樣呢? –
因爲括號對於case語句項目不是合法語法。宏必須擴展成合法的語法。 –
謝謝,這清除了一切!現在完美工作。 –