Я использую блок генерации для создания конвейерного мультиплексора: есть ли способ параметризовать случаи в операторе 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
always@(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
? - person Greg   schedule 27.07.2013