【问题标题】:What is the difference between the using force and without force in the forcing the signal in verilog?在verilog中强制信号使用强制和不强制有什么区别?
【发布时间】:2016-12-01 14:43:13
【问题描述】:

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)]。

如果我想在没有“强制”的情况下这样使用 我应该只强制“reg”而不是“wire”吗? 如果我想强行连线,我该怎么做?

案例2

top();

wire temp;
reg temp2;

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

endmodule

在这种情况下,我使用 'force' 没有错误。

Q1.首先,我想知道case1和case2作为强制方式有什么区别?

Q2.哪种情况好?

【问题讨论】:

    标签: verilog


    【解决方案1】:

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

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2012-02-10
      • 2021-05-28
      • 2010-12-08
      • 2016-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-20
      相关资源
      最近更新 更多