- 做一个4选1的mux,并且进行波形仿真和2选1的mux对比,观察资源消耗的变化
// module 41, 选择器(mux)的代码,
module mux41(
IN0 , // input 1
IN1 , // input 2
IN2 , // input 3
IN3 , // input 4
SEL , // select
OUT ); // out data
parameter WL = 16; // 输入输出数据信号位宽
input [WL-1:0] IN0,IN1,IN2,IN3;// 选择器的四个输入数据信号
input [1:0] SEL; // 通道选通的控制信号
output[WL-1:0] OUT; // 选择器的输入数据信号
reg [WL-1:0] OUT;
// 生成组合逻辑的代码
always @ (IN0 or IN1 or IN2 or IN3 or SEL) begin
if(SEL ==2'b00) // SEL为00 选择输0
OUT = IN0;
else if(SEL ==2'b01) // SEL为01 选择输入1
OUT = IN1;
else if(SEL ==2'b10) // SEL为10 选择输入2
OUT = IN2;
else // SEL为11 选择输入3
OUT = IN3;
end
endmodule
// endmodule top
波形仿真:
资源消耗对比:
mux4_1:
mux2_1:
mux4_1比mux2_1的logic_cell多一倍,即资源消耗多了将近一倍。
- 编写一个4X4路交叉开关的RTL,然后编译,看RTL View 比较2x2与4x4之间消耗资源的区别。通过对比资源,你有什么结论?
// module top, a 4x4 crossbar switch circuit
module mux44(
IN0 , // input 1
IN1 , // input 2
IN2 , // input 3
IN3 , // input 4
SEL0 , // select the output0 source
SEL1 , // select the output1 source
SEL2 , // select the output2 source
SEL3 , // select the output3 source
OUT0 , // output data 0
OUT1 , // output data 1
OUT2 , // output data 2
OUT3 ); // output data 3
parameter WL = 16;
input [WL-1:0] IN0, IN1, IN2,IN3;
input SEL0, SEL1, SEL2, SEL3;
output[WL-1:0] OUT0, OUT1, OUT2, OUT3;
reg [WL-1:0] OUT0, OUT1, OUT2, OUT3;
// get the OUT0
always @ (IN0 or IN1 or IN2 or IN3 or SEL0 or SEL1) begin
if((SEL0)&&(SEL1))
OUT0 = IN3;
else if((!SEL0)&&(SEL1))
OUT0 = IN2;
else if((SEL0)&&(!SEL1))
OUT0 = IN1;
else
OUT0 = IN0;
end
// get the OUT1
always @ (IN0 or IN1 or IN2 or IN3 or SEL1 or SEL2) begin
if((SEL1)&&(SEL2))
OUT1 = IN3;
else if((!SEL1)&&(SEL2))
OUT1 = IN2;
else if((SEL1)&&(!SEL2))
OUT1 = IN1;
else
OUT1 = IN0;
end
// get the OUT2
always @ (IN0 or IN1 or IN2 or IN3 or SEL2 or SEL3) begin
if((SEL2)&&(SEL3))
OUT2 = IN3;
else if((!SEL2)&&(SEL3))
OUT2 = IN2;
else if((SEL2)&&(!SEL3))
OUT2 = IN1;
else
OUT2 = IN0;
end
// get the OUT3
always @ (IN0 or IN1 or IN2 or IN3 or SEL0 or SEL3) begin
if((SEL0)&&(SEL3))
OUT3 = IN3;
else if((!SEL0)&&(SEL3))
OUT3 = IN2;
else if((SEL0)&&(!SEL3))
OUT3 = IN1;
else
OUT3 = IN0;
end
endmodule
// endmodule top
RTL View:
消耗资源对比:
4x4:
2x2:
2x2的交叉开关是2个输出分别对应1个1位的控制信号