在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”吗? 如果我想在没有力的情况下强行连接电线,

在verilog中强制信号时,使用强制和不使用强制之间有什么区别

这是一个verilog示例

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
)或变量(如a
reg
)上。这仅用于测试,使您的测试台能够在您的设计中过度驱动某些内部信号(例如强制和错误条件或强制处于某些特定模式)

可以将
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