verilog编程语言中wire与reg的区别.pdfVIP

  • 3
  • 0
  • 约2.3千字
  • 约 3页
  • 2022-07-26 发布于福建
  • 举报
在使用 verilog 语言进行编程的时候,对于初学者, wire 和 reg 总是会分辨不清 wire 与 reg 的区别 ?什么时候用 wire? 什么时候用 reg? 简单来说硬件描述语言有两种用途: 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 中要定义 wire? 有几种情况变量需要定义成 wire 。 第一。 assign 语句 例如: reg a,b; wire and_result; ... assign and_result =ab; 你可以试试把 wire 定义成 reg 。综合器会报错。 第二。元件例化时候的输出必须用 wire 例如: wire dout; ram u_ram ( ... .out(dout) ... ); wire 按照国外的教材上面的定义: wire 为无逻辑连线。只做连线, wire 本身是不带逻辑性的,所以输入什么输出 就是什么。所以你尝试着用 always 语句对 wire 变量赋值。综合器就会报错。 那么你可能会问。 assign c =ab 不是就是对 wire 的赋值吗? 其实并非如此。 综合器综合时将 ab 综合成 ab 经过一个与门。 而 c 只是连接 到与门输出的线。正真综合出与门的是 。而不是 c 。 Abstract Verilog 初學者最常見的問題:『什麼時候該用 wire? 什麼時候又該用 reg? 』 Introduction 大體上來說,wire 和 reg 都類似於 C/C++ 的變數,但若此變數要放在 begin... end 內,該變數就須使用 reg ,在 begin...end 之外,則使用 wire 。 另外使用 wire 時,須搭配 assign ;reg 則不必。 i

文档评论(0)

1亿VIP精品文档

相关文档