实验报告目录
前言
本人Verilog新手上路,以下是一些基础模块,实验中肯定会出现差错,欢迎指正。
一、多路选择器
1.4选1MUX
代码如下:
//选择器(mux4-1)的代码,
module mux(
IN0 , // input 1
IN1 , // input 2
IN2 , // input 3
IN3 , // input 4
SEL , // 选择
OUT ); // 输出
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
case(SEL)
2'b00: OUT = IN0;
2'b01: OUT = IN1;
2'b10: OUT = IN2;
2'b11: OUT = IN3;
endcase
end
endmodule
// endmodule mux
2.波形仿真
其中,资源消耗是2选1MUX的两倍。(编译报告显示:4选1MUX使用逻辑总元件数为32,2选1MUX使用逻辑总元件数为16)
二、交叉开关
1.4*4路交叉开关
代码如下:
// module top, a 4x4 crossbar switch circuit
module crossbar(
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 sourse
SEL3 , // select the output3 sourse
OUT0 , // output data 0
OUT1 , // output data 1
OUT2 , // output data 2
OUT3 ); // output data 3
parameter WL = 2;
input [WL-1:0] IN0, IN1, IN2, IN3;
input [1:0]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) begin
case(SEL0)
2'b00: OUT0 = IN0;
2'b01: OUT0 = IN1;
2'b10: OUT0 = IN2;
2'b11: OUT0 = IN3;
endcase
end
// get the OUT1
always @ (IN0 or IN1 or IN2 or IN3 or SEL1) begin
case(SEL1)
2'b00: OUT1 = IN0;
2'b01: OUT1 = IN1;
2'b10: OUT1 = IN2;
2'b11: OUT1 = IN3;
endcase
end
// get the OUT2
always @ (IN0 or IN1 or IN2 or IN3 or SEL2) begin
case(SEL2)
2'b00: OUT2 = IN0;
2'b01: OUT2 = IN1;
2'b10: OUT2 = IN2;
2'b11: OUT2 = IN3;
endcase
end
// get the OUT3
always @ (IN0 or IN1 or IN2 or IN3 or SEL3) begin
case(SEL3)
2'b00: OUT3 = IN0;
2'b01: OUT3 = IN1;
2'b10: OUT3 = IN2;
2'b11: OUT3 = IN3;
endcase
end
endmodule
// endmodule top
2.RTL图
4*4交叉开