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代码,必须先要抽象出数字电路结构才行。
module test(
input a,b,c,d;
output o;
);
wire temp0,temp1;
XOR (temp0, a, b);
XOR (temp1, c, d);
AND2 (out, temp0, temp1);
endmodule
数据流描述
数据流描述方式要比结构化描述方式抽象级别要高一些,因为它不在需要清晰地刻画出具体的数字电路架构,而是可以比较直观地表达底层的逻辑行为。
数据流描述方式又可称为RTL级描述方式,即寄存器传输级描述,因为它主要从数据的变换和传送的角度来描述设计模块,并且使用的语句多为和硬件行为一致的并行语句,因此它的抽象级别远没有后面要介绍的行为级描述方式高,所以纯数据流的描述方式也只适用于小规模的电路设计。
不过也正因为数据流描述方式这种折中的抽象级别,使得它既显式地表达了模块的行为,又隐式地刻画了模块的电路结构。因此对于功能较为简单的模块,我们可以轻松地使用数据流描述方式来实现,这样对设计者和编译器都方便;而对于复杂的模块,一般都是行为级描述为主,数据流描述方式为辅;更一般的,我们可能会在同一个模块中同时使用这三种描述方式,来实现数字电路更灵活地描述。
module test(
input a,b,c,d;
output out;
);
wire temp0, temp1;
assign temp0 = a^b;
assign temp1 = c^d;
assign out = temp0 & temp1; endmodule
行为级描述
和前面两种方式比起来,行为级描述方式的抽象级别更高,概括力更强,因此规模稍微大些的设计,往往都以行为级描述方式为主。
注意,虽然FPGA的设计思路都是并行的,但是HDL中还是支持大量的串行语句元素。由此可见,行为级描述方式的主要载体就是串行语句,同时辅以并行语句用于描述各个算法之间的连接关系。
module test(
input a,b,c,d;
output out;
);
always@(a,b,c,d)
begin
if(a != b && c != d)
out = 'b1;
else
out = 'b0;
end
endmodule
HDL的三种描述方式的更多相关文章
- JSON的三种解析方式
一.什么是JSON? JSON是一种取代XML的数据结构,和xml相比,它更小巧但描述能力却不差,由于它的小巧所以网络传输数据将减少更多流量从而加快速度. JSON就是一串字符串 只不过元素会使用特定 ...
- Linq to Sql : 三种事务处理方式
原文:Linq to Sql : 三种事务处理方式 Linq to SQL支持三种事务处理模型:显式本地事务.显式可分发事务.隐式事务.(from MSDN: 事务 (LINQ to SQL)).M ...
- spring-boot的三种启动方式[z]
https://blog.csdn.net/u011425751/article/details/79507386 有段时间没有写博客了,也在努力的从传统单机开发向分布式系统过度,所以再次做一些笔记, ...
- python全栈开发day38-css三种引入方式、基础选择器、高级选择器、补充选择器
一.昨日内容回顾 div:分割整个网站,很多块 (1)排版标签 (2)块级标签 独占一行 可以设置高和宽,如果不设置宽高,默认是父盒子的宽 span: (1) 小区域 (2)文本标签 (3)在一行内显 ...
- Entity Framework 5.0系列之EF概览-三种编程方式
概述 在开发面向数据的软件时我们常常为了解决业务问题实体.关系和逻辑构建模型而费尽心机,ORM的产生为我们提供了一种优雅的解决方案.ADO.NET Entity Framework是.NET开发中一种 ...
- SQL Server中的三种Join方式
1.测试数据准备 参考:Sql Server中的表访问方式Table Scan, Index Scan, Index Seek 这篇博客中的实验数据准备.这两篇博客使用了相同的实验数据. 2.SQ ...
- C++三种继承方式
一.三种继承方式 继承方式不同,第一个不同是的是派生类继承基类后,各成员属性发生变化.第二个不同是派生类的对象能访问基类中哪些成员发生变化.表格中红色标注.
- 2019年6月14日 Web框架之Django_07 进阶操作(MTV与MVC、多对多表三种创建方式、前后端传输数据编码格式contentType、ajax、自定义分页器)
摘要 MTV与MVC 多对多表三种创建方式 ajax ,前后端传输数据编码格式contentType 批量插入数据和自定义分页器 一.MVC与MTV MVC(Model View Controller ...
- 【转】vue.js三种安装方式
Vue.js(读音 /vjuː/, 类似于 view)是一个构建数据驱动的 web 界面的渐进式框架.Vue.js 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件.它不仅易于上手 ...
随机推荐
- Unity容器<1>
参考地址: https://docs.microsoft.com/en-us/previous-versions/msp-n-p/dn170416(v=pandp.10) 总览 Unity是一个轻量级 ...
- Delphi CreateProcess 创建一个新的进程和它的主线程
Delphi CreateProcess WIN32API函数CreateProcess用来创建一个新的进程和它的主线程,这个新进程运行指定的可执行文件 CreateProcess百科名片 WIN32 ...
- 【Cocos谁学谁会】定制属于自己的脚本模板
版权申明: 本文原创首发于以下网站,您可以自由转载,但必须加入完整的版权声明 博客园:https://www.cnblogs.com/MogooStudio/ csdn博客:https://blog. ...
- DSP程序中的布尔类型使用
在DSP程序中,布尔类型不能直接拿来用,要定义一下,可以通过定义为枚举类型来定义: typedef enum{FALSE=0,TRUE} BOOL; 一般枚举类型的定义是这样的:enum [枚举名] ...
- TypeScript初体验
第一次运行TypeScript 1.创建文件夹并初始化项目 mkdir ts-demo cd ts-demo npm init -y 2.安装typescript与ts-node # 局部安装 npm ...
- io流追加到一个文件中信息比如日志
package com.yh.day02.arrays; import java.io.File;import java.io.FileInputStream;import java.io.FileN ...
- faster-rcnn训练自己数据+测试
准备使用faster-rcnn进行检测实验.同时笔者也做了mask-rcnn,yolo-v3,ssd的实验,并进行对比. window下使用faster-rcnn https://blog.csdn ...
- 【洛谷5369】[PKUSC2018] 最大前缀和(状压DP)
点此看题面 大致题意: 对于一个序列,求全排列下最大前缀和之和. 状压\(DP\) 考虑如果单纯按照题目中对于最大前缀和的定义,则一个序列它的最大前缀和是不唯一的. 为了方便统计,我们姑且规定,如果一 ...
- oracle 中 insert select 和 select insert 配合使用
Insert Into select 与 Select Into 哪个更快? 在平常数据库操作的时候,我们有时候会遇到表之间数据复制的情况,可能会用到INSERT INTO SELECT 或者 SEL ...
- IT兄弟连 HTML5教程 HTML5表单 新增的表单属性2
5 height和width属性 height和width属性规定用于image类型和input标签的图像高度和宽度.图像通常会同时指定高度和宽度属性.如果图像设置高度和宽度,图像所需的空间在加载页 ...