Verilog RTL 代码设计新手上路 所有实验

2023-12-15 13:48

本文主要是介绍Verilog RTL 代码设计新手上路 所有实验,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

实验分析:4选1的mux实际上就是在2选1的mux上进行拓展,选用2位的控制信号控制4位输入信号的选择输出。
实验代码设计如下:
在这里插入图片描述
RTL视图如下:
在这里插入图片描述
波形仿真结果如下:
在这里插入图片描述
资源消耗变化如下:
在这里插入图片描述
2选1选择器
在这里插入图片描述
4选1选择器

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

实验分析: 2X2路的交叉开关核心思想就是使用2个输出分别对应1个1位的控制信号,选择该输出哪一个输入信号。根据该思想设计4X4路的交叉开关,则每个输出对应一个2位的控制信号,从四个输入信号中选择一个进行输出,然后并联输出。

实验代码设计如下:
在这里插入图片描述
RTL视图如下:
在这里插入图片描述
波形仿真结果如下:
在这里插入图片描述
资源消耗如下:
在这里插入图片描述
22交叉开关
在这里插入图片描述
4
4交叉开关
如上图所见,4X4的交叉开关消耗资源成倍的增长了。

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

实验分析:4输入的优先编码器本质就是一个4位输入的信号对输出进行控制,当对应为输入1时,输出与位数对应的数值,且高位输入控制优先。编写8输入的优先编码器实际上就是对4输入的位数进行一个简单拓展。

实验代码设计如下:
在这里插入图片描述
RTL视图如下:
在这里插入图片描述
波形仿真结果如下:
在这里插入图片描述

  1.  编写一个4-16的译码器,编译;和3-8译码器对比资源开销;看RTL View:
    

实验分析:3-8译码器即3位输入的2进制值对应相应位置的输出位输出1。编写4-16译码器本质上是对3-8译码器输入、输出位数的一个拓展。

实验代码设计如下:
在这里插入图片描述
RTL视图如下:
在这里插入图片描述
波形仿真结果如下:在这里插入图片描述
资源消耗变化如下:
在这里插入图片描述
3-8译码器
在这里插入图片描述
4-16译码器
如上图所示,在输入多了一位、输出多了八位的情况下,资源消耗几乎多了一倍,与输出位数成正相关。

  1.  (1)把加法器的输出信号改成4比特位宽,编译,波形仿真。观察输出结果,说出输出和输入的对应关系。
    

(2)把加法器的输入信号改成8比特位宽,编译,波形仿真。观察加法器的输出延迟,和4比特输入位宽的情况对比,你有什么结论,为什么?

实验代码设计如下:
在这里插入图片描述
输出改为4比特
在这里插入图片描述
输入改为8比特
RTL视图如下:
在这里插入图片描述
输出改为4比特
在这里插入图片描述
输入改为8比特
波形仿真如下:
在这里插入图片描述
输出改为4比特
在这里插入图片描述
输入改为8比特

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

实验代码设计如下:
在这里插入图片描述
在这里插入图片描述
RTL视图如下:
在这里插入图片描述
在这里插入图片描述
波形仿真如下:
在这里插入图片描述
在这里插入图片描述

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

带流水线的加法器即在加法器的输入与输出都连接了D触发器,有效的减少了组合逻辑的竞争与冒险,从而明显减少了“毛刺”的长度。而流水线的级数越高,毛刺也随之越短,但输出的时延也会相应的对一个时钟周期。

实验代码设计如下:
在这里插入图片描述
在这里插入图片描述
RTL视图如下:
在这里插入图片描述
在这里插入图片描述
波形仿真如下:
在这里插入图片描述
在这里插入图片描述

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

实验代码设计如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
RTL视图如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
波形仿真如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
8输入相较4输入的无符号乘法器“毛刺”时间变短;无硬件乘法器的无符号乘法器“毛刺”时间大大变长;较4输入-8输出无流水线乘法器,带流水线的毛刺时间相较更短,但输出延时更长(多了一个时间周期)。
资源消耗如下:
在这里插入图片描述
在这里插入图片描述
如图所示,无硬件乘法器芯片的无符号乘法器硬件资源消耗非常巨大。

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

实验代码设计:
在这里插入图片描述
在这里插入图片描述
RTL视图如下:
在这里插入图片描述
在这里插入图片描述
波形仿真如下:
在这里插入图片描述
在这里插入图片描述

  1. 设计一个用于识别2进制序列“1011”的状态机 设计一个用于识别2进制序列“1011”的状态机
    (1) 基本要求:电路每个时钟周期输入1比特数据,当捕获到1011的时钟周期,电路输出1,否则输出0;使用序列101011010作为输出的测试序列;(2) 扩展要求:给你的电路添加输入使能端口,只有输入使能EN为1的时钟周期,才从输入的数据端口向内部获取1比特序列数据。

实验代码设计如下:
在这里插入图片描述
基本要求状态机
在这里插入图片描述
带使能信号状态机
状态转移图及表达式如下:
在这里插入图片描述
波形仿真结果如下:
在这里插入图片描述
基本要求状态机
在这里插入图片描述
带使能信号状态机

  1. 设计一个如本节“电路描述”部分的“带加载使能和移位使能的并入串出”的移位寄存器,电路的RTL结构图如“电路描述”部分的RTL结构图所示。

实验代码设计如下:
在这里插入图片描述
RTL视图如下:
在这里插入图片描述
波形仿真如下:
在这里插入图片描述

实验小结:
本次实验通过Verilog代码模拟了各种逻辑组合电路的基本原理。通过例子实验和自主进行的实验可以发现,任何一个复杂的组合电路都可以拆分成许多简单的基本电路,通过熟练这些基本电路的Verilog代码编写,就可以实现各类大型项目的编写,此次实验中共有11个类型的实验。

这篇关于Verilog RTL 代码设计新手上路 所有实验的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/496663

相关文章

C#实现千万数据秒级导入的代码

《C#实现千万数据秒级导入的代码》在实际开发中excel导入很常见,现代社会中很容易遇到大数据处理业务,所以本文我就给大家分享一下千万数据秒级导入怎么实现,文中有详细的代码示例供大家参考,需要的朋友可... 目录前言一、数据存储二、处理逻辑优化前代码处理逻辑优化后的代码总结前言在实际开发中excel导入很

Python一次性将指定版本所有包上传PyPI镜像解决方案

《Python一次性将指定版本所有包上传PyPI镜像解决方案》本文主要介绍了一个安全、完整、可离线部署的解决方案,用于一次性准备指定Python版本的所有包,然后导出到内网环境,感兴趣的小伙伴可以跟随... 目录为什么需要这个方案完整解决方案1. 项目目录结构2. 创建智能下载脚本3. 创建包清单生成脚本4

SpringBoot+RustFS 实现文件切片极速上传的实例代码

《SpringBoot+RustFS实现文件切片极速上传的实例代码》本文介绍利用SpringBoot和RustFS构建高性能文件切片上传系统,实现大文件秒传、断点续传和分片上传等功能,具有一定的参考... 目录一、为什么选择 RustFS + SpringBoot?二、环境准备与部署2.1 安装 RustF

Python实现Excel批量样式修改器(附完整代码)

《Python实现Excel批量样式修改器(附完整代码)》这篇文章主要为大家详细介绍了如何使用Python实现一个Excel批量样式修改器,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一... 目录前言功能特性核心功能界面特性系统要求安装说明使用指南基本操作流程高级功能技术实现核心技术栈关键函

Redis实现高效内存管理的示例代码

《Redis实现高效内存管理的示例代码》Redis内存管理是其核心功能之一,为了高效地利用内存,Redis采用了多种技术和策略,如优化的数据结构、内存分配策略、内存回收、数据压缩等,下面就来详细的介绍... 目录1. 内存分配策略jemalloc 的使用2. 数据压缩和编码ziplist示例代码3. 优化的

Python 基于http.server模块实现简单http服务的代码举例

《Python基于http.server模块实现简单http服务的代码举例》Pythonhttp.server模块通过继承BaseHTTPRequestHandler处理HTTP请求,使用Threa... 目录测试环境代码实现相关介绍模块简介类及相关函数简介参考链接测试环境win11专业版python

Python从Word文档中提取图片并生成PPT的操作代码

《Python从Word文档中提取图片并生成PPT的操作代码》在日常办公场景中,我们经常需要从Word文档中提取图片,并将这些图片整理到PowerPoint幻灯片中,手动完成这一任务既耗时又容易出错,... 目录引言背景与需求解决方案概述代码解析代码核心逻辑说明总结引言在日常办公场景中,我们经常需要从 W

使用Spring Cache本地缓存示例代码

《使用SpringCache本地缓存示例代码》缓存是提高应用程序性能的重要手段,通过将频繁访问的数据存储在内存中,可以减少数据库访问次数,从而加速数据读取,:本文主要介绍使用SpringCac... 目录一、Spring Cache简介核心特点:二、基础配置1. 添加依赖2. 启用缓存3. 缓存配置方案方案

MySQL的配置文件详解及实例代码

《MySQL的配置文件详解及实例代码》MySQL的配置文件是服务器运行的重要组成部分,用于设置服务器操作的各种参数,下面:本文主要介绍MySQL配置文件的相关资料,文中通过代码介绍的非常详细,需要... 目录前言一、配置文件结构1.[mysqld]2.[client]3.[mysql]4.[mysqldum

Python多线程实现大文件快速下载的代码实现

《Python多线程实现大文件快速下载的代码实现》在互联网时代,文件下载是日常操作之一,尤其是大文件,然而,网络条件不稳定或带宽有限时,下载速度会变得很慢,本文将介绍如何使用Python实现多线程下载... 目录引言一、多线程下载原理二、python实现多线程下载代码说明:三、实战案例四、注意事项五、总结引