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
实验四.
- 编写一个4-16的译码器,编译
- 和3-8译码器对比资源开销
- 看RTL View
4-16译码器实验代码如下:
资源消耗变化如下:
3-8译码器资源消耗:
4-16译码器资源消耗:
输入多了一位、输出多了八位的情况下资源消耗几乎多了一倍,可见资源消耗主要与输出位数正相关。
实验五.
- 把加法器的输出信号改成4比特位宽,编译,波形仿真。观察输出结果,说出输出和输入的对应关系。
- 把加法器的输入信号改成8比特位宽,编译,波形仿真。观察加法器的输出延迟,和4比特输入位宽的情况对比,你有什么结论,为什么?
1.把加法器的输出信号改成4比特位宽,程序如下:
波形仿真如下:
可见当输出信号位宽下降时,不能完整的实现其功能,当输出值大于15之后就会出错。
2.把加法器的输入信号改成8比特位宽,程序如下:
仿真波形图如下:
可见其输出时延稍大于4输入的无符号加法器。
实验六.
- 把加法器的输出信号改成4比特位宽,编译,波形仿真。观察输出结果,观察输出结果在什么时候是正确的?。
- 把加法器的输入信号改成8比特位宽,编译,波形仿真。观察加法器的输出延迟,和4比特输入位宽的情况对比,你有什么结论,为什么?
1.把加法器的输出信号改成4比特位宽:
2.把加法器的输入信号改成8比特位宽:
实验七.
不改变流水线的级数,把加法器的输入信号改成8比特位宽,编译,波形仿真,和不带流水线的情况对比一下,你有什么结论?
在8比特输入位宽的情况下,在输入上再添加一级流水线,观察编译和仿真的结果,你有什么结论?
分析:
纯粹的加法器是一堆组合逻辑门构成的,这些组合逻辑的计算延迟较大,如果加法器电路的前极或后级电路也是一个规模较大的组合逻辑,那么它们会和加法器电路合并成为一个更大的组合逻辑,从而带来更大的组合逻辑计算延迟。
每一个D触发器都有其所容许的最小的建立与保持时间,当两个D触发器之间的组合电路逻辑延迟变得更大的时候,会导致电路只能工作在更低的时钟频率,为了让电路能够工作在更高的时钟频率,需要用D触发器来把大块的组合逻辑分割为小块,这就是流水线技术。(建议自行Google 关键字 D触发器 建立与保持时间)
与不加流水线的加法器相比,带流水线的加法器即在加法器的输入与输出都连接了D触发器,有效的减少了组合逻辑的竞争与冒险,从而明显减少了“毛刺”的长度。而流水线的级数越高,毛刺也随之越短,但输出的时延也会相应的多一个时钟周期。
1.不改变流水线的级数,把加法器的输入信号改成8比特位宽,代码:
与不加流水线的加法器相比,带流水线的加法器即在加法器的输入与输出都连接了D触发器,有效的减少了组合逻辑的竞争与冒险,从而明显减少了“毛刺”的长度。
2.在8比特输入位宽的情况下,在输入上再添加一级流水线:
可以发现流水线的级数越高,毛刺也随之越短,但输出的时延也会相应的多一个时钟周期。
实验八.
- 改变乘法器的输入位宽为8比特,编译,波形仿真,观察信号毛刺的时间长度。
- 选一款没有硬件乘法器的FPGA芯片(例如Cyclone EP1C6)对比8比特的乘法器和加法器两者编译之后的资源开销(LogicCell的数目)
- 编写一个输入和输出都有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 代码设计示例相关推荐
- Verilog RTL 代码设计新手上路
1. 做一个4选1的mux,并且进行波形仿真 和2选1的mux对比,观察资源消耗的变化: 实验分析:4选1的mux实际上就是在2选1的mux上进行拓展,选用2位的控制信号控制4位输入信号的选 ...
- Verilog RTL 代码设计——译码器计数器
实验1:设计4-16译码器 方法一:行为描述方式--使用CASE语句 1.代码 module decoder4_16A(out,in); output[15:0] out;input[3:0] in; ...
- Verilog RTL代码设计规范简单整理总结
目录 1宗旨 2 IP的RTL设计文件的建立 3 TOP集成的设计文件的建立 4 文件头 5 宏定义 6 端口定义 6.1 IP设计中的端口定义 6.2 TOP集成中的端口定义 7 TOP模块的集成 ...
- (20)System Verilog接口interface设计示例
(20)System Verilog接口interface设计示例 1.1 目录 1)目录 2)FPGA简介 3)System Verilog简介 4)System Verilog接口interfac ...
- Verilog RTL 代码实战 01——半加器全加器
目录 1.半加全加的区别 2.一位半加器代码 3.一位全加器代码 4.多位的加法器 1.半加全加的区别 半加器没有进位输入--c_in,只有两个输入 全加器有进位输入c_in,有三个输入 2.一位半加 ...
- Verilog RTL 代码实战 02——多路选择器MUX
目录 1.MUX应用 2.二选一MUX 3.四选一MUX 1.MUX应用 ①多路选择器是常见的选通器件,主要用于通道的扩展.复用: ②多路选择器又叫多路选择开关,可以根据需要选通某一路或者某几路从而达 ...
- FPGA(五)RTL代码之一(跨时钟域设计)
文章目录 前言 一.异步FIFO 二.异步复位同步释放 三.两级触发器同步 四.握手CDC设计 五.异步双口RAM 总结 前言 这不马上要面试了嘛,有些慌!HDLbits的题目已经刷完了,但又知道自己 ...
- (19)System Verilog模块设计示例
(19)System Verilog模块设计示例 1.1 目录 1)目录 2)FPGA简介 3)System Verilog简介 4)System Verilog模块设计示例 5)结语 1.2 FPG ...
- html 定义列表dddt,一个微服务+DDD(领域驱动设计)的代码结构示例
前有幸拜读过诸多大神关于DDD的实现落地等文章,学习较多,受益匪浅,在此推荐 : 下面参考了DDD官方的结构,总结了前辈们的相关经验,再根据自身对微服务和DDD学习和理解,做了一个用SpringClo ...
最新文章
- WMI技术介绍和应用——查询快捷方式、映射磁盘和虚拟内存信息
- CVPR 2018 | 使用CNN生成图像先验,实现更广泛场景的盲图像去模糊
- Launcher3删除开机引导页面
- 关于MySQL事务和存储引擎10个FAQ(Frequently asked questions
- 【GitLab】gitlab上配置webhook后,点击测试报错:Requests to the local network are not allowed...
- SpringBoot+Vue 完整的外卖系统,手机端和后台管理,可以玩一下!
- 【C/C++16】_public.h,_public.cpp,_cmpublic.h
- 学C++你绝不能错过的干货!
- Kafka : kafka errors.DisconnectException: null
- python数据字典排序_Python自动处理数据字典(Python是3.6版本)
- python学习笔记(五):装饰器、生成器、内置函数、json
- SOME/IP不等同于SOA,CommonAPI-RPC通信和vsomeip基于消息通信
- 全网首发:Undefined symbols for architecture x86_64: “std::__1::locale::use_facet(std::__1::locale::id)
- 计算机端口lpt,教你把USB、COM串口打印机映射到LPT端口
- 推特员工大规模辞职,马斯克被“问候”;腾讯10多万员工平均月薪超8万;雪欲“白嫖”网易百万玩家数据...
- 有了这个抠图滤镜,设计师再也不怕扣头发婚纱了!
- 按“window+E”键出现【找不到应用程序】或【explore.exe找不到】的解决方法
- Linux下优雅的让程序后台运行
- 有用的SAP系统管理事务码
- python pdf和图片互转
热门文章
- WinFormreportViewer(rdlc)报表[列表]的使用(一)(附源码示例) 之配餐系统的开发
- Portlet开发指南第二章
- 输入密码查看flag(详解)——Bugku
- opencv(2)- 处理像素值
- 如何使用fdisk与parted对不同容量硬盘分区
- 大数据搜索选开源还是商业软件?ElasticSearch 对比 Splunk
- 使用spark-sql-perf评测spark 2.0
- Hadoop和大数据:60款顶级开源工具
- 如何实现一个HTML5 RPG游戏引擎——第一章,实现地图类
- 设计模式-建造者模式(转自:http://www.cnblogs.com/cbf4life/archive/2010/01/14/1647710.html)...