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

2024-03-09 02:48

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

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

    • 行为建模
    • 基于布尔方程的组合逻辑行为级模型
    • Verilog中的锁存器和电平敏感电路
    • 触发器和锁存器的周期性行为模型
    • 行为建模方式的比较
    • 线性反馈移位寄存器的数据流模型

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



由于第五章内容较多,所以分为两部分来记录

行为建模

行为级模型描述的是逻辑电路的输入-输出模型,忽略了电路的低层次内部结构和物理实现的细节。(传播延时不包含在电路的行为级模型中,但对逻辑的物理实现施加了时序约束后,综合工具将考虑目标工艺库单元的传播延时)

  • 行为级建模的数据类型的简要介绍
  • Verilog的所有变量都是具有预先定义的类型,且只有两种数据类型:线网型寄存器型。线网变量起到物理电路导线的作用,建立对象的连接;寄存器变量用来存储信息。通常数据类型使用线网型的wire和寄存器型的reg和integer;wire和reg默认为1bit,integer大小取决与主机支持的字长,最小32bit(所以integer不用预先设置大小

基于布尔方程的组合逻辑行为级模型

连续赋值语句是用来描述隐式组合逻辑的,因此连续赋值语句等效于布尔函数的实现的门电路,但是连续赋值语句要更为紧凑容易理解

例如用连续赋值语句可以很容易的写出三态门输出。
在这里插入图片描述
用带条件运算符的连续赋值语句为多路复用器提供了一种简捷的方法,这种语句综合出来将是多路复用器的电路。
在这里插入图片描述
在这里插入图片描述

Verilog中的锁存器和电平敏感电路

如果右边表达式中的一个变量也是赋值的目标变量,那么这组连续赋值语句就具有隐式反馈

例如:
在这里插入图片描述
当一条带条件操作符的连续赋值语句出现反馈时,综合工具将判断出它具有一个锁存器的功能。

  • 连续赋值语句对于模拟较简单的布尔表达式三态行为特性以及D锁存器是很方便的。

触发器和锁存器的周期性行为模型

  • 在模拟电平敏感行为(如组合逻辑和透明锁存器)时,连续赋值语句受到了限制。它们不能模拟具有边沿敏感行为的元件,如触发器。
  • 寄存器变量在仿真期间将暂存信息,但这不一定代表已综合电路中会包括硬件寄存器
  • Verilog语言允许在事件控制表达式中由电平敏感和边沿敏感混合应用的情况,但是综合工具不支持这样的行为模型
Module tr_latch(q_out,enable,data);Output	q_out;
Input	enable,data;
Reg		q_out;
always@(enable or data)	beginif(enable)q_out = data;
endendmodule

行为建模方式的比较

行为建模方式主要分为三种。

  • 1)连续赋值
  • 2)寄存器传输级逻辑
  • 3)行为算法的建模方式

连续赋值的建模方式用来描述电平敏感行为,连续赋值在语句之间、基本门之间以及描述中的所有行为模块之间都是并行执行的。(assign是不会阻塞的)

RTL模型(同步机的数据流模型):计算的初始化是在时钟的有效沿时刻进行的在下一个有效沿时刻寄存器的存储前完成的。在每个有效沿时读取和存储前一个时钟所形成的数据输入。(通常always块就是这个模型)

在这里插入图片描述

  • 如果将这个2bit比较器写成RTL模型,那么在always内部其执行就是按照排列顺序执行的,并非assign的并行了。这就是阻塞赋值
    所以如果输入输出有依赖关系的话,排列顺序就尤为重要

例如:
在这里插入图片描述

  • 这是一个5bit的移位寄存器,其RTL图如下
    在这里插入图片描述
  • 但是如果不注意顺序的话,就导致输入直接等于输出了。(A=E)

阻塞赋值(=):通常在组合逻辑中用,在下一条语句执行之前,完成执行过程。紧跟其后的过程赋值语句被阻塞执行,直到正在执行的过程赋值语句完成执行任务。

非阻塞赋值(<=):通常在周期性行为中,可以并发赋值,对语句的顺序没有影响,计算完右边的值后,并行地更新左值

  • 如果正在模拟的是包含边沿驱动寄存器传输的逻辑,那么强烈建议边沿敏感操作由非阻塞描述,组合逻辑用阻塞描述,以防止组合逻辑和寄存器操作之间发生竞争。

  • RTL模型中的赋值语句是并行执行的,而且是在指定结构描述的上下文中显式定义的寄存器上进行操作,而算法模型的语句是按次序执行的,没有明显的结构形式。

在这里插入图片描述在这里插入图片描述

  • 就像同样是2bit的比较器,用组合逻辑或RTL模型,会显得更靠近电路描述。而用算法模型会更容易理解。

线性反馈移位寄存器的数据流模型

线性反馈移位寄存器(LSFR)通常用于实现数据压缩电路中的基于循环冗余码校验的特征分析。

  • 自主LFSR可能是一个为电路提供激励模式的随机模式发射器。
  • 通过一个多项式,可以不断移位构成一个周期为2n-1的序列,并且周期内序列不重复。其电路和代码也很简单。(和M序列的原理应该很像)


搜索关注我的公众号【IC墨鱼仔】,获取我的更多IC干货分享!

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



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

相关文章

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

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

不懂推荐算法也能设计推荐系统

本文以商业化应用推荐为例,告诉我们不懂推荐算法的产品,也能从产品侧出发, 设计出一款不错的推荐系统。 相信很多新手产品,看到算法二字,多是懵圈的。 什么排序算法、最短路径等都是相对传统的算法(注:传统是指科班出身的产品都会接触过)。但对于推荐算法,多数产品对着网上搜到的资源,都会无从下手。特别当某些推荐算法 和 “AI”扯上关系后,更是加大了理解的难度。 但,不了解推荐算法,就无法做推荐系

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

从去中心化到智能化:Web3如何与AI共同塑造数字生态

在数字时代的演进中,Web3和人工智能(AI)正成为塑造未来互联网的两大核心力量。Web3的去中心化理念与AI的智能化技术,正相互交织,共同推动数字生态的变革。本文将探讨Web3与AI的融合如何改变数字世界,并展望这一新兴组合如何重塑我们的在线体验。 Web3的去中心化愿景 Web3代表了互联网的第三代发展,它基于去中心化的区块链技术,旨在创建一个开放、透明且用户主导的数字生态。不同于传统

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

usaco 1.2 Name That Number(数字字母转化)

巧妙的利用code[b[0]-'A'] 将字符ABC...Z转换为数字 需要注意的是重新开一个数组 c [ ] 存储字符串 应人为的在末尾附上 ‘ \ 0 ’ 详见代码: /*ID: who jayLANG: C++TASK: namenum*/#include<stdio.h>#include<string.h>int main(){FILE *fin = fopen (

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]