Verilog RTL 代码设计新手上路

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

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交叉开关

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值