实验一.做一个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译码器资源消耗:

    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才从输入端读入输入数据进行匹配。
  • 状态跳转逻辑表:
当前状态 输入 次态
ST0 IN==0 ST0
ST0 IN==1 ST1
ST1 IN==0 ST2
ST1 IN==1 ST0
ST2 IN==0 ST0
ST2 IN==1 ST3
ST3 IN==0 ST0
ST3 IN==1 ST4
ST4 DONOT CARE ST0
  • 输出逻辑表:
当前状态 输出OUT
ST0 0
ST1 0
ST2 0
ST3 0
ST4 1

代码及仿真波形图如下:


实验十一

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


Verilog RTL 代码设计示例相关推荐

  1. Verilog RTL 代码设计新手上路

    1.      做一个4选1的mux,并且进行波形仿真 和2选1的mux对比,观察资源消耗的变化: 实验分析:4选1的mux实际上就是在2选1的mux上进行拓展,选用2位的控制信号控制4位输入信号的选 ...

  2. Verilog RTL 代码设计——译码器计数器

    实验1:设计4-16译码器 方法一:行为描述方式--使用CASE语句 1.代码 module decoder4_16A(out,in); output[15:0] out;input[3:0] in; ...

  3. Verilog RTL代码设计规范简单整理总结

    目录 1宗旨 2 IP的RTL设计文件的建立 3 TOP集成的设计文件的建立 4 文件头 5 宏定义 6 端口定义 6.1 IP设计中的端口定义 6.2 TOP集成中的端口定义 7 TOP模块的集成 ...

  4. (20)System Verilog接口interface设计示例

    (20)System Verilog接口interface设计示例 1.1 目录 1)目录 2)FPGA简介 3)System Verilog简介 4)System Verilog接口interfac ...

  5. Verilog RTL 代码实战 01——半加器全加器

    目录 1.半加全加的区别 2.一位半加器代码 3.一位全加器代码 4.多位的加法器 1.半加全加的区别 半加器没有进位输入--c_in,只有两个输入 全加器有进位输入c_in,有三个输入 2.一位半加 ...

  6. Verilog RTL 代码实战 02——多路选择器MUX

    目录 1.MUX应用 2.二选一MUX 3.四选一MUX 1.MUX应用 ①多路选择器是常见的选通器件,主要用于通道的扩展.复用: ②多路选择器又叫多路选择开关,可以根据需要选通某一路或者某几路从而达 ...

  7. FPGA(五)RTL代码之一(跨时钟域设计)

    文章目录 前言 一.异步FIFO 二.异步复位同步释放 三.两级触发器同步 四.握手CDC设计 五.异步双口RAM 总结 前言 这不马上要面试了嘛,有些慌!HDLbits的题目已经刷完了,但又知道自己 ...

  8. (19)System Verilog模块设计示例

    (19)System Verilog模块设计示例 1.1 目录 1)目录 2)FPGA简介 3)System Verilog简介 4)System Verilog模块设计示例 5)结语 1.2 FPG ...

  9. html 定义列表dddt,一个微服务+DDD(领域驱动设计)的代码结构示例

    前有幸拜读过诸多大神关于DDD的实现落地等文章,学习较多,受益匪浅,在此推荐 : 下面参考了DDD官方的结构,总结了前辈们的相关经验,再根据自身对微服务和DDD学习和理解,做了一个用SpringClo ...

最新文章

  1. WMI技术介绍和应用——查询快捷方式、映射磁盘和虚拟内存信息
  2. CVPR 2018 | 使用CNN生成图像先验,实现更广泛场景的盲图像去模糊
  3. Launcher3删除开机引导页面
  4. 关于MySQL事务和存储引擎10个FAQ(Frequently asked questions
  5. 【GitLab】gitlab上配置webhook后,点击测试报错:Requests to the local network are not allowed...
  6. SpringBoot+Vue 完整的外卖系统,手机端和后台管理,可以玩一下!
  7. 【C/C++16】_public.h,_public.cpp,_cmpublic.h
  8. 学C++你绝不能错过的干货!
  9. Kafka : kafka errors.DisconnectException: null
  10. python数据字典排序_Python自动处理数据字典(Python是3.6版本)
  11. python学习笔记(五):装饰器、生成器、内置函数、json
  12. SOME/IP不等同于SOA,CommonAPI-RPC通信和vsomeip基于消息通信
  13. 全网首发:Undefined symbols for architecture x86_64: “std::__1::locale::use_facet(std::__1::locale::id)
  14. 计算机端口lpt,教你把USB、COM串口打印机映射到LPT端口
  15. 推特员工大规模辞职,马斯克被“问候”;腾讯10多万员工平均月薪超8万;雪欲“白嫖”网易百万玩家数据...
  16. 有了这个抠图滤镜,设计师再也不怕扣头发婚纱了!
  17. 按“window+E”键出现【找不到应用程序】或【explore.exe找不到】的解决方法
  18. Linux下优雅的让程序后台运行
  19. 有用的SAP系统管理事务码
  20. python pdf和图片互转

热门文章

  1. WinFormreportViewer(rdlc)报表[列表]的使用(一)(附源码示例) 之配餐系统的开发
  2. Portlet开发指南第二章
  3. 输入密码查看flag(详解)——Bugku
  4. opencv(2)- 处理像素值
  5. 如何使用fdisk与parted对不同容量硬盘分区
  6. 大数据搜索选开源还是商业软件?ElasticSearch 对比 Splunk
  7. 使用spark-sql-perf评测spark 2.0
  8. Hadoop和大数据:60款顶级开源工具
  9. 如何实现一个HTML5 RPG游戏引擎——第一章,实现地图类
  10. 设计模式-建造者模式(转自:http://www.cnblogs.com/cbf4life/archive/2010/01/14/1647710.html)...