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 实现响应的数据绑定和组合的视图组件.它不仅易于上手 ...
随机推荐
- pandas 初识(五)
1. 如何实现把一个属性(列)拆分成多列,产生pivot,形成向量信息,计算相关性? 例: class_ timestamp count 0 10 2019-01-20 13:23:00 1 1 10 ...
- Mybatis的小技巧
一.使用resultMap字段关联对象属性太麻烦 eg:过于复杂,类似这种结果集转换的,只需要在配置文件中开启自动转换进行了,无需再手动写了很麻烦 替换办法:开启骆驼命名法进行匹配就ok了,实体类字段 ...
- js执行机制
js是单线程的,为什么可以执行异步操作呢? 这归结与浏览器(js的宿主环境)通过某种方式使得js具备了异步的属性. 区分进程和线程: 进程:正在运行中的应用程序.每个进程都自己独立的内存空间.例如:打 ...
- redis cluster集群动态伸缩--删除主从节点
目标:从集群中剔除一组主从(5007,5008) 经过上一节增加5007,5008主从服务节点后,目前集群的情况是这样的: b3363a81c3c59d57143cd3323481259c044e66 ...
- Self Service Password 密码策略
1.在活动目录中新建一个用户,并赋予域管理员权限:2.拷贝conf目录下的config.inc.php为config.inc.local.php:3.按自己的实际情况及要求修改config.inc.l ...
- django重点url,视图函数,模板语言
django重点url,视图函数,模板语言url 1.django重点url无命名分组:re_path() 2.url第一个参:url未命别名分组就不需要views中参数一定,若命别名(?P<y ...
- Jenkins学习安装配置和使用
为了能够频繁地将软件的最新版本,及时.持续地交付给测试团队及质量控制团队,以供评审,所以引入持续集成工具Jenkins,从而实现公司新产品持续集成,自动化部署. 环境准备 ●操作系统:Windows1 ...
- 如何完成述职报告或年终总结PPT
对于我们 打工仔 职场人士来说,年有年度总结,月有月度报告,指不定有些小伙伴还会有周报和日报,不仅枯燥,而且浪费时间,头都要炸了 ,简直太有趣了呢. 所以,如何准确快速的写完述职报告呢? 这是个好问题 ...
- Git实用指南
个人整理的一些Git概念和命令,可以速查或者快速解决某些方面的问题 一.精简入门 1.克隆仓库 克隆仓库会下载仓库完整的文件.分支和历史记录 git clone [<options>] [ ...
- swoole比php好在哪里
直接套用Swoole官网的介绍: PHP的异步.并行.高性能网络通信引擎,使用纯C语言编写,提供了PHP语言的异步多线程服务器,异步TCP/UDP网络客户端,异步MySQL,异步Redis,数据库连接 ...