是关键字'wire'& 'reg'使用正确吗?

时间:2013-12-07 13:41:06

标签: verilog

这是我遇到问题的程序。我认为它的电线和reg声明。 这是在我的一本书中给出的,但代码中似乎存在一些问题

Module dff (q, d, clk);
Input d, clk ; 
Output q ;
always @ (posedge clk) 
q = d ; 
endmodule
module shift4 (d_out, din, clk) ;
input din, clk ;
output d_out ; 
wire wO, wl, w2 ; 
reg wO, wl, w2, d_out ; 
dff go (wO, d in, clk) ; 
dff g1 (wl, wO, clk) ; 
dff g2 (w2, w1, clk) ; 
dff g3 (d out, w2, clk) ;
endmodule 

3 个答案:

答案 0 :(得分:0)

您不应将wO,wl,w2​​声明为wirereg。只需使用wire

此外,您应该对顺序逻辑使用非阻塞分配:

q <= d;

答案 1 :(得分:0)

q应该是一个reg,因为你在一个始终的块中更改它。

答案 2 :(得分:0)

如果您使用Verilog 1364-2001中更现代的语法。这样会更加清楚,因为您只声明每个信号一次,最多声明3次。

module shift4 (output reg  d_out, 
               input  wire din, clk);
  // internal signals
  wire wO, wl, w2 ; 
  dff go (wO, d in, clk) ; 
  dff g1 (wl, wO, clk) ; 
  dff g2 (w2, w1, clk) ; 
  dff g3 (d out, w2, clk) ;
endmodule