在verilog中强制信号时,使用强制和不使用强制之间有什么区别?
在verilog中强制信号时,使用强制和不使用强制之间有什么区别 这是一个verilog示例在verilog中强制信号时,使用强制和不使用强制之间有什么区别?,verilog,Verilog,在verilog中强制信号时,使用强制和不使用强制之间有什么区别 这是一个verilog示例 top(); wire temp; reg temp2; endmodule 我想强制温度和温度2信号如下 案例1 在这种情况下,我有一些类似的错误 顶部。slwr_w=1'b1; | ncvlog:*E,WANOTL:在这种情况下,网络不是合法的左值[9.3.1(IEEE)] 如果我想用这种方式而不使用“武力” 我应该只强制“reg”而不是“wire”吗? 如果我想在没有力的情况下强行连接电线,
top();
wire temp;
reg temp2;
endmodule
我想强制温度和温度2信号如下
案例1
在这种情况下,我有一些类似的错误
顶部。slwr_w=1'b1;
|
ncvlog:*E,WANOTL:在这种情况下,网络不是合法的左值[9.3.1(IEEE)]
如果我想用这种方式而不使用“武力”
我应该只强制“reg”而不是“wire”吗?
如果我想在没有力的情况下强行连接电线,我该怎么做
案例2
在这种情况下,我使用的“force”没有错误
问题1.首先,我想知道案例1和案例2作为强制方式的区别是什么
哪种情况是好的方式?Verilog中有两种表示连接的结构:网络(通常是
导线)和变量(通常是reg
)。变量必须通过初始
或始终
块分配。网络必须由assign
语句或module
输出驱动。在案例1中,您试图从初始
块驱动网络(一条导线
);这是不允许的
force
用于将值超速驱动到网络(如wire
)或变量(如areg
)上。这仅用于测试,使您的测试台能够在您的设计中过度驱动某些内部信号(例如强制和错误条件或强制处于某些特定模式)
可以将force
作为顺序语句执行。顺序语句是初始
或始终
块内或函数
或任务
内的语句。这就是案例2编译时没有错误的原因。(事实上,force
语句可以是连续的,这是基本行为-您可能希望在某个时间force
一个值,然后可能释放它。)
因此,仅在测试台上使用force
。为了测试的目的,只能用它来驱动通常以其他方式驱动的信号请勿在设计中使用强制
。所以,
- 您应该仅为您的设计使用案例1
- 您可以在测试台上使用案例1或案例2,但只能使用
案例2:将值超速驱动(可能在某些内部连接上
在您的设计中)
top();
wire temp;
reg temp2;
initial begin
top.temp = 1'b1;
top.temp2 = 1'b1;
end
endmodule
top();
wire temp;
reg temp2;
initial begin
force top.temp = 1'b1;
force top.temp2 = 1'b1;
end
endmodule