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

相关文章

Android协程高级用法大全

《Android协程高级用法大全》这篇文章给大家介绍Android协程高级用法大全,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友跟随小编一起学习吧... 目录1️⃣ 协程作用域(CoroutineScope)与生命周期绑定Activity/Fragment 中手

Unity新手入门学习殿堂级知识详细讲解(图文)

《Unity新手入门学习殿堂级知识详细讲解(图文)》Unity是一款跨平台游戏引擎,支持2D/3D及VR/AR开发,核心功能模块包括图形、音频、物理等,通过可视化编辑器与脚本扩展实现开发,项目结构含A... 目录入门概述什么是 UnityUnity引擎基础认知编辑器核心操作Unity 编辑器项目模式分类工程

深度解析Python yfinance的核心功能和高级用法

《深度解析Pythonyfinance的核心功能和高级用法》yfinance是一个功能强大且易于使用的Python库,用于从YahooFinance获取金融数据,本教程将深入探讨yfinance的核... 目录yfinance 深度解析教程 (python)1. 简介与安装1.1 什么是 yfinance?

Python学习笔记之getattr和hasattr用法示例详解

《Python学习笔记之getattr和hasattr用法示例详解》在Python中,hasattr()、getattr()和setattr()是一组内置函数,用于对对象的属性进行操作和查询,这篇文章... 目录1.getattr用法详解1.1 基本作用1.2 示例1.3 原理2.hasattr用法详解2.

基于Python实现数字限制在指定范围内的五种方式

《基于Python实现数字限制在指定范围内的五种方式》在编程中,数字范围限制是常见需求,无论是游戏开发中的角色属性值、金融计算中的利率调整,还是传感器数据处理中的异常值过滤,都需要将数字控制在合理范围... 目录引言一、基础条件判断法二、数学运算巧解法三、装饰器模式法四、自定义类封装法五、NumPy数组处理

MySQL数据类型与表操作全指南( 从基础到高级实践)

《MySQL数据类型与表操作全指南(从基础到高级实践)》本文详解MySQL数据类型分类(数值、日期/时间、字符串)及表操作(创建、修改、维护),涵盖优化技巧如数据类型选择、备份、分区,强调规范设计与... 目录mysql数据类型详解数值类型日期时间类型字符串类型表操作全解析创建表修改表结构添加列修改列删除列

Python 函数详解:从基础语法到高级使用技巧

《Python函数详解:从基础语法到高级使用技巧》本文基于实例代码,全面讲解Python函数的定义、参数传递、变量作用域及类型标注等知识点,帮助初学者快速掌握函数的使用技巧,感兴趣的朋友跟随小编一起... 目录一、函数的基本概念与作用二、函数的定义与调用1. 无参函数2. 带参函数3. 带返回值的函数4.

Java Stream 的 Collectors.toMap高级应用与最佳实践

《JavaStream的Collectors.toMap高级应用与最佳实践》文章讲解JavaStreamAPI中Collectors.toMap的使用,涵盖基础语法、键冲突处理、自定义Map... 目录一、基础用法回顾二、处理键冲突三、自定义 Map 实现类型四、处理 null 值五、复杂值类型转换六、处理

python panda库从基础到高级操作分析

《pythonpanda库从基础到高级操作分析》本文介绍了Pandas库的核心功能,包括处理结构化数据的Series和DataFrame数据结构,数据读取、清洗、分组聚合、合并、时间序列分析及大数据... 目录1. Pandas 概述2. 基本操作:数据读取与查看3. 索引操作:精准定位数据4. Group

Mysql中设计数据表的过程解析

《Mysql中设计数据表的过程解析》数据库约束通过NOTNULL、UNIQUE、DEFAULT、主键和外键等规则保障数据完整性,自动校验数据,减少人工错误,提升数据一致性和业务逻辑严谨性,本文介绍My... 目录1.引言2.NOT NULL——制定某列不可以存储NULL值2.UNIQUE——保证某一列的每一