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对应于连续赋值,如assign
reg对应于过程赋值,如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型都可以。但一般的,整个设计的外部输出(即最顶层模块的输出),要求是寄存器输出,较稳定、扇出能力也较好。
分享到:
相关推荐
非常好用的总结,Verilog中-reg和wire-用法和区别以及always和assign的区别
主要讲述verilog编程语言中wire与reg的区别。
一個System Task,能夠接受由Verilog的reg或wire傳給C的值。
Verilog语言中wire与reg的区别以及inout使用
Verilog _ wire vs reg 区别
夏宇闻verilog视频10 Verilog中reg和wire的不同点itweng 100% 2294 夏宇闻verilog视频11 Verilog中阻塞与非阻塞itweng 100% 2205 夏宇闻verilog视频12 FPGA中数字系统的构成itweng 100% 2147 夏宇闻verilog视频13 ...
在generate语句中可以引入if-else和case语句,根据条件不同产生不同的实例化。 用法: 1. generate语法有generate for, genreate if和generate case三种 2. generate for语句必须有genvar关键字定义for的变量 3. for...
system verilog与verilog的区别,也讲了开发时的注意事项
reg类型使用保留字reg加以说明,形式如下:reg [ msb: lsb] reg1, reg2, . . . regN;msb和lsb 定义了范围,并且均为常数值表达式。范围定义是可选的;如果没有定义范围,缺省值为1位寄存器。例如:reg [3:0] Sat; //...
帮助初学者很好认识阻塞和非阻塞的问题,对养成好的编程习惯非常有益
介绍了Verilog编程里经常遇到的阻塞与非阻塞的问题,并通过生成的硬件电路来讲述其区别
介绍了在Cadence中运行Verilog 的方法,与站内已有的《简明Verilog-XL操作手册》相配合,对掌握Verilog起到辅助作用。
Verilog程序结构与数据类型 .
verilog 95和01区别(自己整理),里面介绍了两个标准的主要区别。
本文主要讲了vhdl与verilog的区别,希望对你的学习有所帮助。
FPGA设计曼彻斯特编解码Verilog源代码 module md (rst,clk16x,mdi,rdn,dout,data_ready) ; // input rst ; input clk16x ; input mdi ; input rdn ; output [7:0] dout ; output data_ready ; reg clk1x_enable ; ...
lm75A温度数字转换器 FPGA读写实验Verilog逻辑源码Quartus工程文件+文档资料,FPGA为CYCLONE4系列中的EP4CE6E22C8. 完整的工程文件,可以做为你的学习设计参考。 module LM75_SEG_LED ( //input input sys_clk , ...
VHDL和VerilogHDL的区别.doc 很详细的列举了两种语言的各种细节区别
文章主要介绍Verilog中阻塞赋值和非阻塞赋值的正确使用方法。
Verilog代码Verilog代码Verilog代码Verilog代码Verilog代码Verilog代码