Verilog RTL 代码设计新手上路
一、多路选择器
-
二选一
module mux(
IN0 , // input 1
IN1 , // input 2
SEL , // select
OUT ); // out data
parameter WL = 16; // 输入输出数据信号位宽
input [WL-1:0] IN0, IN1;// 选择器的两个输入数据信号
input SEL; // 通道选通的控制信号
output[WL-1:0] OUT; // 选择器的输入数据信号
reg [WL-1:0] OUT;
// 生成组合逻辑的代码
always @ (IN0 or IN1 or SEL) begin
if(SEL) // SEL为1 选择输入1
OUT = IN1;
else // SEL为0 选择输入0
OUT = IN0;
end
endmodule
// endmodule top
时序图

-
课后实验:改成四选一
代码
module mux(
IN0 , // input 1
IN1 , // input 2
IN2 , // input 3
IN3 , // input 4
SEL1 , // select
SEL2 ,
OUT ); // out data
parameter WL = 16; // 输入输出数据信号位宽
input [WL-1:0] IN0, IN1,IN2,IN3;// 选择器的两个输入数据信号
input SEL1,SEL2; // 通道选通的控制信号
output[WL-1:0] OUT; // 选择器的输入数据信号
reg [WL-1:0] OUT;
// 生成组合逻辑的代码
always @ (IN0 or IN1 or IN2 or IN3 or SEL1 or SEL2) begin
if(!SEL1)
if(!SEL2)
OUT=IN0;
else
OUT=IN1;
else
if(!SEL2)
OUT=IN2;
else
OUT=IN3;
end
endmodule
// endmodule top
时序图

-
资源消耗变化
二选一

逻辑利用率是9/56480,寄存器、内存单元、DSP、PLL等均未用到
![]()
四选一

逻辑利用率是17/56480,寄存器、内存单元、DSP、PLL等均未用到

二、交叉开关
- 电路描述
实际上是MUX的组合体
通常用在复杂一些的信号选通的场合。
每一个输出端都有对应的选通信号
用选通信号控制输出端选通到哪个输入端。
当输入和输出的端口增加时,该电路会消耗非常多的电路资源
电路在不同应用时的变化
数据信号的宽度
选通逻辑的变化,选择信号为0或1时选通哪个通道

代码
module top(
IN0 , // input 1
IN1 , // input 2
SEL0 , // select the output0 source
SEL1 , // select the output1 source
OUT0 , // output data 0
OUT1 ); // output data 1
parameter WL = 16;
input [WL-1:0] IN0, IN1;
input SEL0, SEL1;
output[WL-1:0] OUT0, OUT1;
reg [WL-1:0] OUT0, OUT1;
// get the OUT0
always @ (IN0 or IN1 or SEL0) begin
if(SEL0)
OUT0 = IN1;
else
OUT0 = IN0;
end
// get the OUT1
always @ (IN0 or IN1 or SEL1) begin
if(SEL1)
OUT1 = IN1;
else
OUT1 = IN0;
end
endmodule

资源消耗

学生实验
编写一个4X4路交叉开关的RTL,然后编译,看RTL View 比较2x2与4x4之间消耗资源的区别。通过对比资源,你有什么结论?
4x4交叉开关

这篇博客详细介绍了Verilog RTL代码设计,涵盖多路选择器、交叉开关、优先编码器、多路译码器、加法器(包括无符号、补码及流水线)、乘法器、计数器和状态机等基本数字逻辑组件的设计与实现,通过实例展示了资源消耗和时序分析。

3419

被折叠的 条评论
为什么被折叠?



