我想編寫其中某些輸入不存在的代碼。我想創建一個包含這些參數的結構(除其他外)。我該怎麼做?我試圖使用生成,定義一個空結構(typedef struct {} empty_t
)和0大小的數組(logic foo[0]
),但我所有的嘗試失敗作爲語法錯誤。如何在SystemVerilog中創建一個空數據類型或條件字段
編輯:我想這樣做(簡體):
module foo(clk, data_in, opt_data_in);
parameter USE_OPT_IN = 1;
input logic clk;
input logic data_in;
input logic opt_data_in;
typedef struct packed {
logic data_in;
// Since it's stored in on-chip RAM I'd like it
// to be as small as possible
if (USE_OPT_IN != 0)
logic opt_data_in;
} ram_entry_t;
ram_entry_t my_ram[4096];
always_ff @(posedge clk) begin
ram_entry_t new_entry;
new_entry.data_in = data_in;
if (USE_OPT_IN != 0)
new_entry.opt_data_in = opt_data_in;
my_ram[$random() % 4096] = new_entry;
end
endmodule
當然這並不編譯。
編輯2:上面是簡化的例子。有超過7個可選字段,編碼128個結構似乎不合理 - 與僅使用非結構化位字段相比。
當你說'輸入'你能解釋什麼輸入? –
到模塊。從外面看,他們不會連接任何東西(''Z'),因爲我不認爲我可以進行可選輸入,但是當我想要將它們實際存儲在某個地方時遇到問題。現在我正在考慮只使用一個位域並手動打包數據,但如果我可以做更多的HL,那將會很好。 –
你有代碼示例嗎? – Serge