0

我正在使用 D-Flip Flops 编写波纹计数器。然而,下面的代码给了我变量的Illegal reference error内部initial块。q2,q3,q4这是为什么?

module RCounter;

reg d,d2,d3,d4,clk;
wire q,q2,q3,q4;


DFlipFlop a(d,q,clk);
DFlipFlop a1(d2,q2,q);
DFlipFlop a2(d3,q3,q2);
DFlipFlop a3(d4,q4,q3);

initial

begin

clk =1;


d=0;d2=0;d3=0;d4=0;q2=0;q3=0;q4=0;

#2 d=1;d2=~q2; d3=~q3; d4=~q4;
#2 d=0;d2=~q2; d3=~q3; d4=~q4;
#2 d=1;d2=~q2; d3=~q3; d4=~q4;
#2 d=0;d2=~q2; d3=~q3; d4=~q4;
#2 d=1;d2=~q2; d3=~q3; d4=~q4;
#2 d=0;d2=~q2; d3=~q3; d4=~q4;
#2 d=1;d2=~q2; d3=~q3; d4=~q4;

end

always 
begin

#2 assign clk = ~ clk;

end

endmodule

D 触发器模块:

module DFlipFlop(d,q,clk);

input d,clk;
output q;

assign q = clk?( (d==1)? 1:0) : q;

endmodule

我怎么解决这个问题?

问候

4

2 回答 2

2

正如 Vlad Lazarenko 指出的那样,您不能为内部initialalways@块的电线分配值。

解决此问题的方法是简单地将类型从 更改wirereg

logic或者像使用 SystemVerilog一样声明所有内容(三态总线除外) 。

reg 或 wire 的定义仅适用于该层次结构级别。reg 可以驱动一个端口,该端口在该模块内被视为电线。

Reg 并不暗示触发器或将其注册为模拟器优化。

还值得注意的是,触发器通常通过以下方式实例化:

reg x;
always @(posedge clk or negedge rst_n) begin
  if(~rst_n) begin
    //reset condition
    x <= 1'b0;
  end
  else begin
    x <= next_value;
  end
end
于 2013-02-20T15:52:50.547 回答
0

您正在尝试为电线分配初始值,此处:

q2=0;q3=0;q4=0;

那是非法的。

于 2013-02-20T15:02:51.140 回答