[an error occurred while processing this directive]
|
Всегда описывал мультиплексор так:
wire [7:0] dout = (sel == 3'd0)? din_0 :
(sel == 3'd1)? din_1 :
(sel == 3'd2)? din_2 :
(sel == 3'd3)? din_3 :
(sel == 3'd4)? din_4 : 8'b0;
пока не столкнулся с тем, что он слимитировал быстродействие.
Переписал так:
reg [7:0] dout;
always @(*) begin
case(sel)
3'd0 : dout = din_0;
3'd1 : dout = din_1;
3'd2 : dout = din_2;
3'd3 : dout = din_3;
3'd4 : dout = din_4;
default : dout = 8'd0;
endcase
end
Стало быстрее. Никто не разбирался, почему так? Синтезатор не может не видеть что условия в скобках в первом случае взаимоисключающие.
(Quartus, Cyclone 2).