在verilog中强制信号时使用力与无力之间有什么区别?

时间:2016-12-01 14:43:13

标签: verilog

在verilog中强制信号时使用力与无力之间有什么区别?

这是一个示例verilog

top();

wire temp;
reg temp2;

endmodule

我想强制temp和temp2信号如下。

案例1

top();

wire temp;
reg temp2;

initial begin
 top.temp = 1'b1;    
 top.temp2 = 1'b1;
end

endmodule

在这种情况下,我有这样的错误。

top.slwr_w = 1' b1;          | ncvlog:* E,WANOTL:在此上下文中,网络不是合法左值[9.3.1(IEEE)]。

如果我想以这样的方式使用,而不是强迫' 我是否应该只强制注册'没有电线'? 如果我想在没有力的情况下强行接线,我该怎么办呢?

案例2

top();

wire temp;
reg temp2;

initial begin
 force     top.temp = 1'b1;    
 force     top.temp2 = 1'b1;
end

endmodule

在这种情况下,我使用' force'。

没有错误

问:首先,我想知道case1和case2之间有什么区别作为强制方式?

问题2.哪种情况好?

1 个答案:

答案 0 :(得分:2)

Verilog中有两种构造用来表示连接:net(通常是wire)和变量(通常是reg)。变量必须由initialalways块分配。网络必须由assign语句或module输出驱动。在案例1中,您尝试从wire块中驱动网络(initial);这是不允许的。

force用于将值过载到网络(例如wire)或变量(例如reg)。这仅用于测试,使您的测试平台能够过度驱动设计中的某些内部信号(例如,强制和错误条件或强制它处于某种特定模式)。

您可以执行force作为顺序语句。顺序语句是initialalways块内或functiontask内的语句。这就是案例2编译没有错误的原因。 (force语句可以是连续的这一事实是必不可少的行为 - 您可能希望在某个时间force获得一个值,之后可能release。)

因此,在您的测试平台中使用force。仅出于测试目的,仅使用它来过度驱动通常以其他方式驱动的某些信号。 在您的设计中使用force。因此,

  • 您应该仅将案例1用于您的设计;

  • 您可以将案例1或案例2用于测试平台,但仅限使用 案例2过度驱动一个值(可能是某些内部连接 在你的设计中)。