当我们使用HDL代码描述硬件功能的时候,主要有三种基本描述方式,即结构化描述方式、数据流描述方式和行为级描述方式。通过本次总结,我们将明白到底我们描述的电路是什么方式描述的。


结构化描述方式

结构化描述方式是最原始的描述方式,是抽象级别最低的描述方式,但同时也是最接近于实际的硬件结构的描述方式。结构化的描述方式,思路就像在面包板上搭建数字电路一样,唯一的不同点就是我们通过HDL的形式来描述数字电路都需要哪些元器件以及它们之间的连接关系是怎么样的罢了。所以,随机FPGA芯片的集成度越来越高,项目的复杂性越来越大,要想纯粹使用这种描述方式完成FPGA设计,已经不是人类所能做到的。

因此,我们一般不采用结构化的描述方式直接描述电路的逻辑功能,原因有二:首先,使用结构化的描述方式不易描述功能稍微复杂的电路;其次,不同FPGA厂商提供的软件集成开发环境中的原语名称是不同的,因此,使用结构化描述方式编写的代码是非常不通用的。

不过结构化描述方式也有它的优势,这也使得我们平时的HDL代码编写中几乎无法离开它。这是因为层次化的模块划分是FPGA设计思想的主流,尤其对于复杂一些的设计,这种思想甚至是必须的,那么,父模块调用子模块的过程只能通过结构化的描述方式来实现。当然,必须用到结构化描述方式的地方不仅局限于此,IP核的调用等等也需要用到。

通过上面结构,我们应该知道什么样的HDL代码叫做结构化描述方式了吧?没错,那就是实例化语句。只要HDL代码中有实例化语句出现,那么它就采用了结构化的描述方式,如果一个模块中除了实例化语句外不再有其他功能语句,那么它就是一个纯结构化的HDL代码,一般来说,较高层次的父模块都采用这些纯粹的结构化描述方式。

给出一个小例子,我们会分别使用三种不同的方式来描述这个电路:我们要描述的是这样一个功能——这是一个四输入、一输出的逻辑,输入信号分别为1bit的 a 、b、 c、 d,输出为1bit的 o,当且仅当 a、b 不相等且 c、d不相等时,o 为逻辑1,否则 o 为逻辑0。

如果要用结构化的描述方式编写HDL代码,必须先要抽象出数字电路结构才行。针对本例,抽象出的数字电路结构图如下:

采用Verilog HDL描述代码为:

module test(
input a,b,c,d;
output o;
);wire temp0,temp1;XOR2 m0( .O(temp0), .I0(a), .I1(b) );
XOR2 m1( .O(temp1), .I0(c), .I1(d) );AND2 m2( .O(o), .I0(temp0), .I1(temp1) );endmodule

数据流描述方式

数据流描述方式要比结构化描述方式抽象级别要高一些,因为它不在需要清晰地刻画出具体的数字电路架构,而是可以比较直观地表达底层的逻辑行为。

数据流描述方式又可称为RTL级描述方式,即寄存器传输级描述,因为它主要从数据的变换和传送的角度来描述设计模块,并且使用的语句多为和硬件行为一致的并行语句,因此它的抽象级别远没有后面要介绍的行为级描述方式高,所以纯数据流的描述方式也只适用于小规模的电路设计。

不过也正因为数据流描述方式这种折中的抽象级别,使得它既显式地表达了模块的行为,又隐式地刻画了模块的电路结构。因此对于功能较为简单的模块,我们可以轻松地使用数据流描述方式来实现,这样对设计者和编译器都方便;而对于复杂的模块,一般都是行为级描述为主,数据流描述方式为辅;更一般的,我们可能会在同一个模块中同时使用这三种描述方式,来实现数字电路更灵活地描述。

为了方便对比,我们仍使用上述那个要设计的数字逻辑,这次使用数据流描述方式来描述:

module test(
input a,b,c,d;
output o;
);wire temp0, temp1;assign temp0 = a^b;
assign temp1 = c^d;assign o = temp0 & temp1;endmodule

行为级描述方式

和前面两种方式比起来,行为级描述方式的抽象级别更高,概括力更强,因此规模稍微大些的设计,往往都以行为级描述方式为主。注意,虽然FPGA的设计思路都是并行的,但是HDL中还是支持大量的串行语句元素。由此可见,行为级描述方式的主要载体就是串行语句,同时辅以并行语句用于描述各个算法之间的连接关系。

这里我们仍沿用上述例子,使用行为级描述方式来描述这个简单的电路:

module test(
input a,b,c,d;
output o;
);always@(a,b,c,d)
beginif(a != b && c != d)o = 1'b1;elseo = 1'b0;endendmodule

这种代码简直就是对自然语句所描述的题目赤裸裸的HDL直译呀!这从侧面说明了使用行为级描述方式会让HDL代码的开发过程更为迅速便捷。


最后要说的是,结构化描述方式直接给出底层电路结构,数据流描述方式间接给出底层电路结构,而行为级描述方式几乎就不给出底层电路结构。从题目描述到FPGA实现,无论采用何种描述方式,这中间的工作量是一致的,只不过不同的描述方式分配给人脑和电脑的工作量不同而已。

【 Verilog HDL 】HDL的三种描述方式相关推荐

  1. Verilog写状态机的三种描述方式之三段式

    Verilog写状态机的三段式描述方式1 1,RTL代码 2,门级网表 3,测试前仿真代码 4,前仿真波形+验证 状态机的设计思路: 一是从状态机变量入手,分析各个状态的输入.状态转移和输出: 二是先 ...

  2. FPGA之道(41)HDL的三种描述方式

    文章目录 前言 三种描述方式 结构化描述方式 数据流描述方式 行为级描述方式 前言 常编写Verilog代码的就会知道,我们对于某一功能的描述,可以通过门电路来描述,也可以直接描述其功能等,这就牵扯到 ...

  3. HDL语言三种描述方式--结构化描述方式、数据流描述方式、行为级描述方式

    当我们使用HDL代码在描述硬件功能时,主要有三种描述方式,即结构化描述方式.数据流描述方式.行为级描述方式.在平时编程时,可根据实际情况及个人喜好选择其中一种或者几种混合在一起进行自己的HDL代码编写 ...

  4. Verilog HDL三种描述方式

    一.数据流建模方式 在组合逻辑电路中,数据不会存储,因此输入信号经过电路变为输出信号类似于数据流动.可以通过连续赋值语句这种特性进行建模,这种建模方式通常被称为数据流建模. 连续赋值语句只能用来对连线 ...

  5. verilog中状态机的三种编码方式的比较(二进制码、独热码、格雷码)

    最近做了一个小项目,是关于状态机中三种编码方式的比较,总结了一下三种编码方式的不同,可以会在以后IC笔试面试过程中用到,简单记录一下三种编码方式的优缺点. 三种编码方式如下图所示:其中独热码只有一位为 ...

  6. 姿态的三种描述方式——欧拉角、轴角、四元数

    欧拉角   旋转矩阵对于坐标系的描述是冗余的.旋转矩阵用了9个元素来描述姿态,而事实上,由正交性条件带来6个约束,这9个元素之间不是独立的,而是相关的.这就意味着,只要三个参数就能描述一个刚体在空间中 ...

  7. Spring Boot项目(Maven\Gradle)三种启动方式及后台运行详解

    Spring Boot项目三种启动方式及后台运行详解 1 Spring Boot项目三种启动方法 运行Application.java类中的Main方法 项目管理工具启动 Maven项目:mvn sp ...

  8. Web框架之Django_07 进阶操作(MTV与MVC、多对多表三种创建方式、前后端传输数据编码格式contentType、ajax、自定义分页器)

    阅读目录 一.MVC与MTV 二.多对多表的创建 三.ajax,前后端传输编码格式contentType 四.批量插入数据与自定义分页器 摘要 MTV与MVC 多对多表三种创建方式 ajax ,前后端 ...

  9. java如何实现定时任务_Java定时任务的三种实现方式

    前言 现代的应用程序早已不是以前的那些由简单的增删改查拼凑而成的程序了,高复杂性早已是标配,而任务的定时调度与执行也是对程序的基本要求了. 很多业务需求的实现都离不开定时任务,例如,每月一号,移动将清 ...

最新文章

  1. 关于ProGuard的学习了解(从别处转来)
  2. Intel主动管理技术用例-远程诊断、远程修复
  3. js中Window跟window的区别
  4. ibm 小型计算机8408,IBM小型机 Power8 E850配置好不好
  5. matlab调用mstg,实验五 双线性变换法设计IIR数字滤波器
  6. 敲代码括号技巧_理解代码块概念,养成良好编程习惯 | 亲子课堂 第 3 课
  7. 哥德巴赫猜想用计算机证明,用计算机证明有限数哥德巴赫猜想成立:运行结果...
  8. Tensorflow.Keras 时序回归模型的建立
  9. java核心技术 下载 网盘_【资源分享】某宝买的40000GB游戏,有你想要的游戏哦,可单独保存或下载...
  10. matlab gui设置参数,基于Matlab/GUI界面设计的参数在线整定与优化(三)
  11. 投影机拼接融合技术--UE4拼接
  12. c语言 函数-斐波那契数列,c语言斐波那契数列递归法(示例代码)
  13. Pano2VR生成的HTML文件打开为黑屏
  14. 儿童近视率攀升,什么原因容易导致近视呢?
  15. ERP系统BOM详细解析
  16. 我的Security+601备考经验分享
  17. 数据集成解决方案探讨
  18. 教你快递查询单号查询物流
  19. 【填坑日记】list集合的remove方法移除不了?!
  20. 大连理工大学计算机科学与技术考研科目,2020年大连理工大学计算机科学与技术考研都考哪些科目,尤其-培训家...

热门文章

  1. ccform 表单的单据打印
  2. asp.net 取得上一页的url
  3. 语言全局变量跨文件_C 语言课上不会讲的一些问题
  4. java int 0.5_java int转float精度缺失原因?
  5. hibernate mysql 设置时区_Hibernate连接MYSQL失败提示时区错误该怎么解决?
  6. r语言绘制精美pcoa图_如何绘制精美的PCoA图形?
  7. idea 文件流读取web-inf下的文件_C#初学者教程系列20:Stream流读写
  8. Redis序列化配置类
  9. 第十五届全国大学生智能汽车竞赛全国总决赛提交技术报告通知
  10. 第十五届全国大学生智能汽车竞赛ROS组车模线上比赛