每次写verilog代码时都会考虑把一个变量是设置为wire类型还是reg类型,因此把网上找到的一些关于这方面的资料整理了一下,方便以后查找。

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型都可以。但一般的,整个设计的外部输出(即最顶层模块的输出),要求是寄存器输出,较稳定、扇出能力也较好。

最新文章

  1. Sublime Text3 BracketHighlighter高亮色彩配置
  2. Linux-磁盘管理小结
  3. pclint vc6/linux 工程,测试正常
  4. tp_link路由器 重新设置
  5. C++ 四种强制类型转换
  6. CodeForces 604D 【离散数学 置换群】
  7. 关于 RTMP RTMPT RTMPS RTMPE RTMPTE RTMFP AMF 简介
  8. codevs 1170 双栈排序
  9. 【转】Apache配置中ProxyPassReverse指令的含义
  10. 经典 SQL
  11. POJ 1325 ZOJ 1364 最小覆盖点集
  12. 简单地总结几种常见web攻击手段及其防御方式
  13. 模板 manacher算法
  14. STM32的PA15、PB3、 PB4管脚作普通管脚的解决办法
  15. Spring-----入门
  16. 使用C# HttpWebRequest进行多线程网页提交。Async httpclient/HttpWebRequest实现批量任务的发布及异步提交和超时取消
  17. vs2012中如何显示代码行号
  18. PKUWC2018 5/6
  19. vim ctrl+v垂直选取产生 e353错误
  20. springboot 文件上传和下载

热门文章

  1. BZOJ2186 SDOI2008沙拉公主的困惑(数论)
  2. js模块化的总结
  3. Windows平台下在服务中添加MySQL
  4. 利用Eric+Qt Designer编写倒计时时钟
  5. vs2013 查找进行的过程中被停止
  6. linq 获取实体列表中的某个字段返回ilist<string>
  7. 【bzoj1087】互不侵犯King
  8. USACO Section 2.1 Ordered Fractions 解题报告
  9. 单点登录(六)-----遇到问题-----cas server 源码部署导入gradle后有感叹号---错误信息A cycle was detected in the build path of pr
  10. Java List /ArrayList 三种遍历方法