VHDL:信号、端口以及和Verilog的区别
1.信号
信号是描述硬件系统的基本数据对象,它的性质类似于连接线。信号可以作为设计实
体中并行语句模块间的信息交流通道。
信号作为一种数值容器,不但可以容纳当前值,也可以保持历史值(这决定于语句的
表达方式)。这一属性与触发器的记忆功能有很好的对应关系,只是不必注明信号上数据流
动的方向。信号定义的语句格式与变量相似,信号定义也可以设置初始值,定义格式是:
SIGNAL 信号名: 数据类型 := 初始值 ;
同样,信号初始值的设置也不是必需的,而且初始值仅在 VHDL 的行为仿真中有效。
与变量相比,信号的硬件特征更为明显,它具有全局性特征。例如,在实体中定义的信号,
在其对应的结构体中都是可见的,即在整个结构体中的任何位置,任何语句结构中都能获
得同一信号的赋值。
此外还需要注意,信号的使用和定义范围是实体、结构体和程序包,在进程和子程序
的顺序语句中不允许定义信号。此外,在进程中只能将信号列入敏感表,而不能将变量列
入敏感表。可见进程只对信号敏感,而对变量不敏感,这是因为只有信号才能把进程外的
信息带入进程内部,或将进程内的信息带出进程。
2. 信号与端口
事实上,除了没有方向说明以外,信号与实体的端口(Port)概念是一致的。对于端口来
说,其区别只是输出端口不能读入数据,输入端口不能被赋值。信号可以看成是实体内部(设
计芯片内部)的端口。反之,实体的端口只是一种隐形的信号,在实体中对端口的定义实质
上是作了隐式的信号定义,并附加了数据流动的方向,而信号本身的定义是一种显式的定
义。因此,在实体中定义的端口,在其结构体中都可以看成是一个信号,并加以使用,而
不必另作定义。
参考:http://eelab.jmu.edu.cn/_eelab2/jiangyi/EDA%E6%8A%80%E6%9C%AF%E4%B8%8EVHDL%E7%AC%AC5%E7%AB%A0.pdf
3. verilog中reg和wire类型的区别和用法
reg相当于存储单元,wire相当于物理连线
Verilog 中变量的物理数据分为线型和寄存器型。这两种类型的变量在定义时要设置位宽,缺省为1位。变量的每一位可以是0,1,X,Z。其中x代表一个未被预置初始状态的变量或者是由于由两个或多个驱动装置试图将之设定为不同的值而引起的冲突型线型变量。z代表高阻状态或浮空量。
线型数据包括wire,wand,wor等几种类型在被一个以上激励源驱动时,不同的线型数据有各自决定其最终值的分辨办法。
两者的区别是:即存器型数据保持最后一次的赋值,而线型数据需要持续的驱动
输入端口可以由net/reg驱动,但输入端口只能是net;输出端口可以使net/reg类型,输出端口只能驱动net;若输出端口在过程块中赋值则为reg型,若在过程块外赋值则为net型用关键词inout声明一个双向端口, inout端口不能声明为寄存器类型,只能是net类型。
wire表示直通,即只要输入有变化,输出马上无条件地反映;reg表示一定要有触发,输出才会反映输入。
不指定就默认为1位wire类型。专门指定出wire类型,可能是多位或为使程序易读。wire只能被assign连续赋值,reg只能在initial和always中赋值。wire使用在连续赋值语句中,而reg使用在过程赋值语句中。
在连续赋值语句中,表达式右侧的计算结果可以立即更新表达式的左侧。在理解上,相当于一个逻辑之后直接连了一条线,这个逻辑对应于表达式的右侧,而这条线就对应于wire。在过程赋值语句中,表达式右侧的计算结果在某种条件的触发下放到一个变量当中,而这个变量可以声明成reg类型的。根据触发条件的不同,过程赋值语句可以建模不同的硬件结构:如果这个条件是时钟的上升沿或下降沿,那么这个硬件模型就是一个触发器;如果这个条件是某一信号的高电平或低电平,那么这个硬件模型就是一个锁存器;如果这个条件是赋值语句右侧任意操作数的变化,那么这个硬件模型就是一个组合逻辑。
输入端口可以由wire/reg驱动,但输入端口只能是wire;输出端口可以使wire/reg类型,输出端口只能驱动wire;若输出端口在过程块中赋值则为reg型,若在过程块外赋值则为net型。用关键词inout声明一个双向端口, inout端口不能声明为reg类型,只能是wire类型;输入和双向端口不能声明为寄存器类型。
简单来说硬件描述语言有两种用途:1、仿真,2、综合。
对于wire和reg,也要从这两个角度来考虑。
从仿真的角度来说,HDL语言面对的是编译器(如Modelsim等),相当于软件思路。这时:wire对应于连续赋值,如assignreg对应于过程赋值,如always,initial
从综合的角度来说,HDL语言面对的是综合器(如DC等),要从电路的角度来考虑。这时:1、wire型的变量综合出来一般是一根导线;2、reg变量在always块中有两种情况:(1)、always后的敏感表中是(a or b or c)形式的,也就是不带时钟边沿的,综合出来还是组合逻辑(2)、always后的敏感表中是(posedge clk)形式的,也就是带边沿的,综合出来一般是时序逻辑,会包含触发器(Flip-Flop)
在设计中,输入信号一般来说你是不知道上一级是寄存器输出还是组合逻辑输出,那么对于本级来说就是一根导线,也就是wire型。而输出信号则由你自己来决定是寄存器输出还是组合逻辑输出,wire型、reg型都可以。但一般的,整个设计的外部输出(即最顶层模块的输出),要求是寄存器输出,较稳定、扇出能力也较好。
参考:http://m.oschina.net/blog/96149
也就是说VHDL综合出来输出端口一定带寄存器,Verilog不一定?
VHDL:信号、端口以及和Verilog的区别的更多相关文章
- IO端口和IO内存的区别 转
目录(?)[-] Linux系统对IO端口和IO内存的管理 一.I/O端口 二.IO内存 三.IO端口和IO内存的区分及联系 四.外设IO端口物理地址的编址方式 统一编址 独立编址 优缺点 五.L ...
- 【linux开发】IO端口和IO内存的区别及分别使用的函数接口
IO端口和IO内存的区别及分别使用的函数接口 每个外设都是通过读写其寄存器来控制的.外设寄存器也称为I/O端口,通常包括:控制寄存器.状态寄存器和数据寄存器三大类.根据访问外设寄存器的不同方式,可以把 ...
- IO端口和IO内存的区别及分别使用的函数接口
每个外设都是通过读写其寄存器来控制的.外设寄存器也称为I/O端口,通常包括:控制寄存器.状态寄存器和数据寄存器三大类.根据访问外设寄存器的不同方式,可以把CPU分成两大类.一类CPU(如M68K,Po ...
- QT+信号有参数与无参数的实现+QT4和QT5在信号和槽使用上的区别
在QT5中,信号有参数和无参数 #ifndef SUBWIDGET_H #define SUBWIDGET_H #include <QWidget> #include <QPushB ...
- activeMQ的两个默认端口8161和61616的区别
activeMQ默认配置下启动会启动8161和61616两个端口,其中8161是mq自带的管理后台的端口,61616是mq服务默认端口 . 8161是后台管理系统,61616是给java用的tcp端口 ...
- VHDL和verilog应该先学哪个?
网上有太多的VHDL和verilog比较的文章,基本上说的都是VHDL和verilog之间可以实现同一级别的描述,包括仿真级.寄存器传输级.电路级,所以可以认为两者是等同级别的语言.很多时候会了其中一 ...
- 对Verilog 初学者比较有用的整理(转自它处)
*作者: Ian11122840 时间: 2010-9-27 09:04 ...
- Verilog 编写规范
在学习Python时,作者有一句话对我影响很大.作者希望我们在学习编写程序的时候注意一些业内约定的规范.在内行人眼中,你的编写格式,就已经暴露了你的程度.学习verilog也是一样的道理,一段好的ve ...
- Verilog HDL常用综合语法
前面已经记录了一些组成Verilog的基本组成,可以用这些基本组成来构成表达式.这一节,就来记录一下把这些表达式构成一个文件的各种行为描述语句. ①这里用Verilog基本要素进行的行为描述主要是针对 ...
随机推荐
- Adding List Item Element At Runtime In Oracle Forms
Add combo list / drop down list item element at runtime in Oracle forms.SyntaxPROCEDURE ADD_LIST_ELE ...
- ElasticSearch学习问题记录——nested查询不到数据
通过代码创建了索引名称为demoindex,索引类型为school,以下是索引类型的数据映射结构: { "state": "open", "setti ...
- js高级程序设计(七)函数表达式
定义函数的方式有两种:一种是函数声明,另一种就是函数表达式.函数声明的语法是这样的. function functionName(arg0, arg1, arg2) { //函数体 } Firefox ...
- oracle job create table insert into
create or replace procedure proc_tzyj is begin insert into t_trade_activity@dw3_link.regress.rdbms.d ...
- vuex是啥
vuex是一个状态管理工具. vuex store与一个简单的全局变量的区别是: 1.vuex stores 是响应式的,当组件改变state时,它能响应并高效地更新state. 2.state不能被 ...
- WCF初探-19:WCF消息协定
WCF消息协定概述 在生成 WCF应用程序时,开发人员通常会密切关注数据结构和序列化问题,而不必关心携带数据的消息结构. 对于这些应用程序,为参数或返回值创建数据协定的过程很简单.但是,有时完全控制 ...
- 1900. Brainwashing Device
http://acm.timus.ru/problem.aspx?space=1&num=1900 题目大意: 有N个车站,相邻车站之间形成一个段,这样就有N-1个段,每个段最多可以放一个洗脑 ...
- Rhel6-cacti+nagios+ganglia(apache)配置文档
(lamp平台) 系统环境: rhel6 x86_64 iptables and selinux disabled 主机: 192.168.122.119 server19.example.com 1 ...
- 简单使用SQLite 的增删改查
1.插入 第一种方式 INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) VALUES (1, 'Paul', 32, 'California', 200 ...
- 结构体类型定义(C语言)
结构体的定义形式如下: struct 结构体名 { 结构体成员 }: 结构体变量的定义方式有三种:1.先定义结构体,再定义变量: eg. struct student{ char name[10]; ...