我正在使用生成塊來創建流水線多路複用器: 有沒有辦法在case語句中參數化個案?在參數中定義的verilog RTL'case'寬度?
module muxNto1byW(
input clk,
input reset,
input wire[(SELECT_WIDTH-1):0] select,
input wire[(DATA_WIDTH*NUM_INPUTS-1):0] din,
output reg[(DATA_WIDTH-1):0] y
);
/* 4 LUT_WIDTH = 6, SEL DATA_INPUTS = 2 */
parameter SELECT_WIDTH = LUT_WIDTH - DATA_INPUTS;
...
generate
/* some for loops */
// register this stage's muxes
reg[(DATA_WIDTH-1):0] pipelineStage;
// assign values to each mux in this stage
[email protected](posedge reset or posedge clk)
if(reset)
pipelineStage <= {DATA_WIDTH{1'b0}};
else
begin
if(i == 0) // Stage 0 evaluates the inputs
case (select[(SELECT_BITS_PER_STAGE-1):0])
2'b00 : /* do something */
2'b01 : /* do something different */
2'b10 : /* you get the picture */
2'b11 : /* the last case */
endcase
endgenerate
SELECT_BITS_PER_STAGE我的目標技術是2, 所以情況是2個位寬00,01,10,11
怎麼能寫這樣的代碼,這樣,如果一個不同的技術只能實現2 1個多路複用器,(SELECT_BITS_PER_STAGE == 1),case語句會自動更改爲:
case ( )
1'b0: /* do something */
1'b1: /* do something different
endcase
請顯示更多代碼。目前還不清楚'pipelineStage'是如何在生成for循環中使用的。什麼是'i'的數據類型? – Greg
答案是肯定的。此外,有多種方法可以做到這一點。然而,正如摩根在他的回答中聲明的那樣,RTL模型應該獨立於您的技術庫 - 它是綜合工具的功能,可將您的抽象RTL描述映射到lib單元中。要麼不這樣做,要麼更詳細地解釋爲什麼你需要這個功能。此外,您提供的代碼(如現在看起來)是沒有意義的。 – Vasiliy