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

相关文章

Java中的for循环高级用法

《Java中的for循环高级用法》本文系统解析Java中传统、增强型for循环、StreamAPI及并行流的实现原理与性能差异,并通过大量代码示例展示实际开发中的最佳实践,感兴趣的朋友一起看看吧... 目录前言一、基础篇:传统for循环1.1 标准语法结构1.2 典型应用场景二、进阶篇:增强型for循环2.

使用Python进行GRPC和Dubbo协议的高级测试

《使用Python进行GRPC和Dubbo协议的高级测试》GRPC(GoogleRemoteProcedureCall)是一种高性能、开源的远程过程调用(RPC)框架,Dubbo是一种高性能的分布式服... 目录01 GRPC测试安装gRPC编写.proto文件实现服务02 Dubbo测试1. 安装Dubb

Go学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和

MyBatis设计SQL返回布尔值(Boolean)的常见方法

《MyBatis设计SQL返回布尔值(Boolean)的常见方法》这篇文章主要为大家详细介绍了MyBatis设计SQL返回布尔值(Boolean)的几种常见方法,文中的示例代码讲解详细,感兴趣的小伙伴... 目录方案一:使用COUNT查询存在性(推荐)方案二:条件表达式直接返回布尔方案三:存在性检查(EXI

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

Apache 高级配置实战之从连接保持到日志分析的完整指南

《Apache高级配置实战之从连接保持到日志分析的完整指南》本文带你从连接保持优化开始,一路走到访问控制和日志管理,最后用AWStats来分析网站数据,对Apache配置日志分析相关知识感兴趣的朋友... 目录Apache 高级配置实战:从连接保持到日志分析的完整指南前言 一、Apache 连接保持 - 性

mysql中的group by高级用法详解

《mysql中的groupby高级用法详解》MySQL中的GROUPBY是数据聚合分析的核心功能,主要用于将结果集按指定列分组,并结合聚合函数进行统计计算,本文给大家介绍mysql中的groupby... 目录一、基本语法与核心功能二、基础用法示例1. 单列分组统计2. 多列组合分组3. 与WHERE结合使

PyTorch高级特性与性能优化方式

《PyTorch高级特性与性能优化方式》:本文主要介绍PyTorch高级特性与性能优化方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、自动化机制1.自动微分机制2.动态计算图二、性能优化1.内存管理2.GPU加速3.多GPU训练三、分布式训练1.分布式数据

Spring Boot集成SLF4j从基础到高级实践(最新推荐)

《SpringBoot集成SLF4j从基础到高级实践(最新推荐)》SLF4j(SimpleLoggingFacadeforJava)是一个日志门面(Facade),不是具体的日志实现,这篇文章主要介... 目录一、日志框架概述与SLF4j简介1.1 为什么需要日志框架1.2 主流日志框架对比1.3 SLF4

Spring Boot集成Logback终极指南之从基础到高级配置实战指南

《SpringBoot集成Logback终极指南之从基础到高级配置实战指南》Logback是一个可靠、通用且快速的Java日志框架,作为Log4j的继承者,由Log4j创始人设计,:本文主要介绍... 目录一、Logback简介与Spring Boot集成基础1.1 Logback是什么?1.2 Sprin