在verilog中强制信号时使用力与无力之间有什么区别?
这是一个示例verilog
top();
wire temp;
reg temp2;
endmodule
我想强制temp和temp2信号如下。
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)]。
如果我想以这样的方式使用,而不是强迫' 我是否应该只强制注册'没有电线'? 如果我想在没有力的情况下强行接线,我该怎么办呢?
top();
wire temp;
reg temp2;
initial begin
force top.temp = 1'b1;
force top.temp2 = 1'b1;
end
endmodule
在这种情况下,我使用' force'。
没有错误问:首先,我想知道case1和case2之间有什么区别作为强制方式?
问题2.哪种情况好?
答案 0 :(得分:2)
Verilog中有两种构造用来表示连接:net(通常是wire
)和变量(通常是reg
)。变量必须由initial
或always
块分配。网络必须由assign
语句或module
输出驱动。在案例1中,您尝试从wire
块中驱动网络(initial
);这是不允许的。
force
用于将值过载到网络(例如wire
)或变量(例如reg
)。这仅用于测试,使您的测试平台能够过度驱动设计中的某些内部信号(例如,强制和错误条件或强制它处于某种特定模式)。
您可以执行force
作为顺序语句。顺序语句是initial
或always
块内或function
或task
内的语句。这就是案例2编译没有错误的原因。 (force
语句可以是连续的这一事实是必不可少的行为 - 您可能希望在某个时间force
获得一个值,之后可能release
。)
因此,仅在您的测试平台中使用force
。仅出于测试目的,仅使用它来过度驱动通常以其他方式驱动的某些信号。 不在您的设计中使用force
。因此,
您应该仅将案例1用于您的设计;
您可以将案例1或案例2用于测试平台,但仅限使用 案例2过度驱动一个值(可能是某些内部连接 在你的设计中)。