Verilog RTL 代码设计示例

实验一.做一个4选1的mux,并且进行波形仿真和2选1的mux对比,观察资源消耗的变化

四选一mux代码如下:
在这里插入图片描述
RTL视图如下:
在这里插入图片描述
波形仿真如下:
在这里插入图片描述
2选1的mux资源消耗情况:
在这里插入图片描述
4选1的mux资源消耗情况:
在这里插入图片描述
4选1比2选1消耗资源更多。

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

4X4路交叉开关实验代码设计如下:
在这里插入图片描述
4X4路交叉开关RTL视图如下:
在这里插入图片描述
2X2路交叉开关RTL视图如下:
在这里插入图片描述
2X2路交叉开关资源消耗情况:
在这里插入图片描述
4X4路交叉开关资源消耗情况:
在这里插入图片描述
可见4X4的交叉开关消耗资源成倍的增长了。

实验三.编写一个8输入的优先编码器,然后编译,看RTL View

在这里插入图片描述
在这里插入图片描述

实验四.

  1. 编写一个4-16的译码器,编译
  2. 和3-8译码器对比资源开销
  3. 看RTL View
    4-16译码器实验代码如下:
    在这里插入图片描述
    在这里插入图片描述
    资源消耗变化如下:
    3-8译码器资源消耗:
    3-8译码器资源消耗
    4-16译码器资源消耗:
    4-16译码器资源消耗
    输入多了一位、输出多了八位的情况下资源消耗几乎多了一倍,可见资源消耗主要与输出位数正相关。

实验五.

  1. 把加法器的输出信号改成4比特位宽,编译,波形仿真。观察输出结果,说出输出和输入的对应关系。
  2. 把加法器的输入信号改成8比特位宽,编译,波形仿真。观察加法器的输出延迟,和4比特输入位宽的情况对比,你有什么结论,为什么?
    1.把加法器的输出信号改成4比特位宽,程序如下:
    在这里插入图片描述
    波形仿真如下:
    在这里插入图片描述
    可见当输出信号位宽下降时,不能完整的实现其功能,当输出值大于15之后就会出错。
    2.把加法器的输入信号改成8比特位宽,程序如下:
    在这里插入图片描述
    仿真波形图如下:
    在这里插入图片描述
    可见其输出时延稍大于4输入的无符号加法器。

实验六.

  1. 把加法器的输出信号改成4比特位宽,编译,波形仿真。观察输出结果,观察输出结果在什么时候是正确的?。
  2. 把加法器的输入信号改成8比特位宽,编译,波形仿真。观察加法器的输出延迟,和4比特输入位宽的情况对比,你有什么结论,为什么?
    1.把加法器的输出信号改成4比特位宽:
    在这里插入图片描述
    在这里插入图片描述
    2.把加法器的输入信号改成8比特位宽:
    在这里插入图片描述
    在这里插入图片描述

实验七.

  1. 不改变流水线的级数,把加法器的输入信号改成8比特位宽,编译,波形仿真,和不带流水线的情况对比一下,你有什么结论?

  2. 在8比特输入位宽的情况下,在输入上再添加一级流水线,观察编译和仿真的结果,你有什么结论?

分析:
纯粹的加法器是一堆组合逻辑门构成的,这些组合逻辑的计算延迟较大,如果加法器电路的前极或后级电路也是一个规模较大的组合逻辑,那么它们会和加法器电路合并成为一个更大的组合逻辑,从而带来更大的组合逻辑计算延迟。
每一个D触发器都有其所容许的最小的建立与保持时间,当两个D触发器之间的组合电路逻辑延迟变得更大的时候,会导致电路只能工作在更低的时钟频率,为了让电路能够工作在更高的时钟频率,需要用D触发器来把大块的组合逻辑分割为小块,这就是流水线技术。(建议自行Google 关键字 D触发器 建立与保持时间)
与不加流水线的加法器相比,带流水线的加法器即在加法器的输入与输出都连接了D触发器,有效的减少了组合逻辑的竞争与冒险,从而明显减少了“毛刺”的长度。而流水线的级数越高,毛刺也随之越短,但输出的时延也会相应的多一个时钟周期。
1.不改变流水线的级数,把加法器的输入信号改成8比特位宽,代码:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
与不加流水线的加法器相比,带流水线的加法器即在加法器的输入与输出都连接了D触发器,有效的减少了组合逻辑的竞争与冒险,从而明显减少了“毛刺”的长度。
2.在8比特输入位宽的情况下,在输入上再添加一级流水线:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
可以发现流水线的级数越高,毛刺也随之越短,但输出的时延也会相应的多一个时钟周期。

实验八.

  1. 改变乘法器的输入位宽为8比特,编译,波形仿真,观察信号毛刺的时间长度。
  2. 选一款没有硬件乘法器的FPGA芯片(例如Cyclone EP1C6)对比8比特的乘法器和加法器两者编译之后的资源开销(LogicCell的数目)
  3. 编写一个输入和输出都有D触发器的流水线乘法器代码,编译后波形仿真,观察组合逻辑延迟和毛刺的时间,和不带流水线的情况下对比。
    1.改变乘法器的输入位宽为8比特,编译,波形仿真,观察信号毛刺的时间长度。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    2.选一款没有硬件乘法器的FPGA芯片(例如Cyclone EP1C6)对比8比特的乘法器和加法器两者编译之后的资源开销(LogicCell的数目)
    在这里插入图片描述
    乘法器资源消耗
    在这里插入图片描述
    加法器资源消耗
    3.编写一个输入和输出都有D触发器的流水线乘法器代码,编译后波形仿真,观察组合逻辑延迟和毛刺的时间,和不带流水线的情况下对比。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

实验九

  • 设计一个最简单的计数器,只有一个CLK输入和一个OVerflow输出,当计数到最大值的时钟周期CLK输出1
  • 设计复杂的计数器,和本例相似,带有多种信号,其中同步清零CLR的优先级最高,使能EN次之,LOAD最低。
    1.设计一个最简单的计数器,只有一个CLK输入和一个OVerflow输出,当计数到最大值的时钟周期CLK输出1
    在这里插入图片描述
    在这里插入图片描述
    2.设计复杂的计数器,和本例相似,带有多种信号,其中同步清零CLR的优先级最高,使能EN次之,LOAD最低。
    在这里插入图片描述
    在这里插入图片描述

实验十

设计一个用于识别2进制序列“1011”的状态机

  • 基本要求: 电路每个时钟周期输入1比特数据,当捕获到1011的时钟周期,电路输出1,否则输出0
    使用序列101011010作为输出的测试序列
  • 扩展要求:给你的电路添加输入使能端口,只有输入使能EN为1的时钟周期,才从输入的数据端口向内部获取1比特序列数据。
    实验分析:因为要捕获的是“1011”序列,从最低位开始进行匹配,匹配成功跳转到下一状态匹配更高一位,只要有一位匹配错误就应该跳转至状态0重新开始。而加上使能信号后,只有EN为1才从输入端读入输入数据进行匹配。
  • 状态跳转逻辑表:
当前状态输入次态
ST0IN==0ST0
ST0IN==1ST1
ST1IN==0ST2
ST1IN==1ST0
ST2IN==0ST0
ST2IN==1ST3
ST3IN==0ST0
ST3IN==1ST4
ST4DONOT CAREST0
  • 输出逻辑表:
当前状态输出OUT
ST00
ST10
ST20
ST30
ST41

代码及仿真波形图如下:
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

实验十一

设计一个如本节“电路描述”部分的“带加载使能和移位使能的并入串出”的移位寄存器,电路的RTL结构图如“电路描述”部分的RTL结构图所示。
实验分析:所谓“串入并出”的移位寄存器,及输入一个1位输入信号,移位寄存器将这个一位数据存入第0位,并将原本的后3位一同前移1位,最后从高到低并行输出四位数据。而“并入串出”的移位寄存器是指,输入一个4位输入信号,存入移位寄存器,若移位使能有效,则将最高位输出,移位寄存器后三3同时前移1位,最低位存入0;若加载时能有效,则从输入端重新读入4位数据。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值