Verilog HDL高级数字设计 从零学习(二)

2024-03-09 02:48

本文主要是介绍Verilog HDL高级数字设计 从零学习(二),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Verilog HDL高级数字设计 从零学习(二)

    • 4.1 Verilog原语和设计封装
    • 4.2.1 Verilog中的四值逻辑
    • 4.2.2 测试方法
    • 4.3 传播延时

🔈声明:
🔑未经作者允许,禁止转载
🚩推荐一个IC、FPGA新手入门的好网站:👉快 点 击 进 入 学 习 吧👈



刚看完了第四章的内容,在此记录一下。

整个第四章主要是介绍了一些RTL级的设计思想和设计流程,没有过多的技巧性的内容。

通常设计需要先完成HDL模型的设计,并综合成物理电路,然后进行功能时序故障覆盖的验证。

  • 设计流程:
  • 1) 编写文本形式的的电路或模型描述 (Verilog代码编写)
  • 2) 编译这些描述,以验证它的语法正确性。
  • 3) 对模型及其设计功能进行仿真验证。(RTL级功能验证)

电路的Verilog模型将每个模块描述封装成输入——输出关系的结构或行为描述形式。

结构描述形式可以是门级网表,也可能是主要功能模块描述如ALU。
行为描述形式可能是一个简单的布尔方程模型寄存器传输模型,或者某种算法

4.1 Verilog原语和设计封装

原语:Verilog包括常见组合逻辑门的26个预定义功能模型,是构成设计的最基本功能单元。(没有预定义时序原语

  • 以一个基本的五输入的门电路来对原语的用法进行举例
    原语用法举例

自顶而下设计思想(Top-down):就是将一个大的工程或模块拆分成更为细小的模块,这样只要完成每个小模块的编写和测试,再进行拼接就能实现复杂的工程,是现在的主流思想。

  • 以一个16位行波进位加法器为例来ji(个人认为就是串行的加法,来完成一个多位数据加法)
  • 这是一个16位的行波加法器,完成16位的加法。输入A,B,C_in,输出C_out。
    在这里插入图片描述
  • 把16位的行波加法器可以拆分为4个4位的行波加法器。
    在这里插入图片描述
  • 又可以将一个4位的行波加法器拆分成4个串行的全加器的组合。
    在这里插入图片描述
  • 每个全加器可由两个半加器构成,一个半加器的门电路如下。用Verilog可以直接用原语来完成。
    在这里插入图片描述

4.2.1 Verilog中的四值逻辑

0值和1值对应于信号的有效或无效状态。X表示不定状态,例如当一个线网被两个具有相反输出值的基本门驱动时,就会出现这种情况。
Z表示三态情形,表示连接线不与驱动相连接

  • 从下图可知当输入出现x或z时输出都为x。

在这里插入图片描述

4.2.2 测试方法

关键词initial定义了开始运行的简单行为,与这种行为有关的语句列在begin……end之间,称为过程语句。begin……end之内的程序赋值语句执行的时序,取决于它在语句列表中的顺序和执行该语句的延时时间。

在Verilog中,所有线网在仿真开始时都被赋值为z,并在之后被激励单元赋值,没有驱动的线网型继续保持Z。同样,reg型一开始为x。

4.3 传播延时

  • 从输入信号通过逻辑门到输出信号,会有传播延时,而Verilog中的基本门原语被默认时零延时。

惯性延时:信号变化的物理行为是有惯性的,因为每个传导路径都具有一定的电容性和电阻性,电荷无法在一瞬间积累或消散。
传输延时: 信号流经电路导线所用的时间

例如:一个NAND的所有输入都长时间地保持为1,这时突然有一个输入端变为0,那么输出不会马上变成1,除非输入端保持0输入足够长时间。(这个可能就是hold-time的原因?)

  • 在t=3时输入一个持续1个单位的脉冲。由于反向器传播延时为2,在t=4时脉冲就消失了,仿真器没有检测到后沿的事件,所以将事件直接撤销了。
    在这里插入图片描述




这篇关于Verilog HDL高级数字设计 从零学习(二)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

使用PyTorch实现手写数字识别功能

《使用PyTorch实现手写数字识别功能》在人工智能的世界里,计算机视觉是最具魅力的领域之一,通过PyTorch这一强大的深度学习框架,我们将在经典的MNIST数据集上,见证一个神经网络从零开始学会识... 目录当计算机学会“看”数字搭建开发环境MNIST数据集解析1. 认识手写数字数据库2. 数据预处理的

java字符串数字补齐位数详解

《java字符串数字补齐位数详解》:本文主要介绍java字符串数字补齐位数,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Java字符串数字补齐位数一、使用String.format()方法二、Apache Commons Lang库方法三、Java 11+的St

Java进阶学习之如何开启远程调式

《Java进阶学习之如何开启远程调式》Java开发中的远程调试是一项至关重要的技能,特别是在处理生产环境的问题或者协作开发时,:本文主要介绍Java进阶学习之如何开启远程调式的相关资料,需要的朋友... 目录概述Java远程调试的开启与底层原理开启Java远程调试底层原理JVM参数总结&nbsMbKKXJx

kotlin中的行为组件及高级用法

《kotlin中的行为组件及高级用法》Jetpack中的四大行为组件:WorkManager、DataBinding、Coroutines和Lifecycle,分别解决了后台任务调度、数据驱动UI、异... 目录WorkManager工作原理最佳实践Data Binding工作原理进阶技巧Coroutine

Java深度学习库DJL实现Python的NumPy方式

《Java深度学习库DJL实现Python的NumPy方式》本文介绍了DJL库的背景和基本功能,包括NDArray的创建、数学运算、数据获取和设置等,同时,还展示了如何使用NDArray进行数据预处理... 目录1 NDArray 的背景介绍1.1 架构2 JavaDJL使用2.1 安装DJL2.2 基本操

Java数字转换工具类NumberUtil的使用

《Java数字转换工具类NumberUtil的使用》NumberUtil是一个功能强大的Java工具类,用于处理数字的各种操作,包括数值运算、格式化、随机数生成和数值判断,下面就来介绍一下Number... 目录一、NumberUtil类概述二、主要功能介绍1. 数值运算2. 格式化3. 数值判断4. 随机

深入解析Spring TransactionTemplate 高级用法(示例代码)

《深入解析SpringTransactionTemplate高级用法(示例代码)》TransactionTemplate是Spring框架中一个强大的工具,它允许开发者以编程方式控制事务,通过... 目录1. TransactionTemplate 的核心概念2. 核心接口和类3. TransactionT

Python中的可视化设计与UI界面实现

《Python中的可视化设计与UI界面实现》本文介绍了如何使用Python创建用户界面(UI),包括使用Tkinter、PyQt、Kivy等库进行基本窗口、动态图表和动画效果的实现,通过示例代码,展示... 目录从像素到界面:python带你玩转UI设计示例:使用Tkinter创建一个简单的窗口绘图魔法:用

Python中列表的高级索引技巧分享

《Python中列表的高级索引技巧分享》列表是Python中最常用的数据结构之一,它允许你存储多个元素,并且可以通过索引来访问这些元素,本文将带你深入了解Python列表的高级索引技巧,希望对... 目录1.基本索引2.切片3.负数索引切片4.步长5.多维列表6.列表解析7.切片赋值8.删除元素9.反转列表

正则表达式高级应用与性能优化记录

《正则表达式高级应用与性能优化记录》本文介绍了正则表达式的高级应用和性能优化技巧,包括文本拆分、合并、XML/HTML解析、数据分析、以及性能优化方法,通过这些技巧,可以更高效地利用正则表达式进行复杂... 目录第6章:正则表达式的高级应用6.1 模式匹配与文本处理6.1.1 文本拆分6.1.2 文本合并6