Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SystemVerilog`force`是如何工作的?_Verilog_System Verilog - Fatal编程技术网

SystemVerilog`force`是如何工作的?

SystemVerilog`force`是如何工作的?,verilog,system-verilog,Verilog,System Verilog,我有一个模块层次结构,我试图在不同的模块接口上执行强制,以获得不同的值。我正在开发一个组件,其任务是将事务注入层次结构下的模块,绕过层次结构中较高模块的驱动器。我想我可以在控制信号上使用强制,以便将驱动器与更高的模块分离,并开始驶入感兴趣的模块。所以我一直在试着看看力是如何起作用的。完整代码位于。 特别是,我试图理解initial块中这两条语句的效果: force u_DataReceiveTop.u_DataReceiveWrap.DataReceiveIfWrp_inst.valid = 1

我有一个模块层次结构,我试图在不同的模块接口上执行
强制
,以获得不同的值。我正在开发一个组件,其任务是将事务注入层次结构下的模块,绕过层次结构中较高模块的驱动器。我想我可以在控制信号上使用
强制
,以便将驱动器与更高的模块分离,并开始驶入感兴趣的模块。所以我一直在试着看看力是如何起作用的。完整代码位于。 特别是,我试图理解
initial
块中这两条语句的效果:

force u_DataReceiveTop.u_DataReceiveWrap.DataReceiveIfWrp_inst.valid = 1'b0;
force u_DataReceiveTop.valid = 1'b1;
我所期望的值是:

u_DataReceiveTop.u_DataReceiveWrap.DataReceiveIfWrp_inst.valid == 0
u_DataReceiveTop.valid == 1
但我从海浪中看到:

u_DataReceiveTop.u_DataReceiveWrap.DataReceiveIfWrp_inst.valid == 1
u_DataReceiveTop.valid == 1

就好像第二个force语句
force u_DataReceiveTop.valid=1'b1已向下传播到层次结构,即使存在另一个力。这里发生了什么?

Verilog中的
电线是一个由驱动器和接收器组成的网络,所有驱动器和接收器都连接到同一个信号。该信号的值是所有驱动器和导线类型的某种分辨率函数。当您通过一个端口连接两根导线时,两根导线会折叠成一个信号,但同一信号仍有两个不同的名称

在导线上使用
force
语句时,会覆盖网络上的所有驱动程序,直到遇到另一个
force
release
语句。在您的示例中,第二个
force
语句将替换第一个
force
。我不在乎在
force
中使用哪个层次引用,因为它们都引用相同的信号


如果想要实现预期的行为,则需要使用变量而不是导线。将变量连接到端口时,SystemVerilog会根据端口的方向创建隐式连续赋值。SystemVerilog不允许对一个变量进行多个连续赋值,这就是为什么不能将变量与
inout
端口一起使用。因此,您需要更加小心港口方向。

谢谢您的回答。我现在明白发生了什么。现在看来我无法用
force
实现我的目标。关于如何防止更高级别的模块在感兴趣的模块上驱动信号,以便向模块中注入不同的事务集,有什么提示吗?我需要指出的是,我不允许更改设计代码。我需要知道如何在测试台上进行测试。我需要能够在需要时将事务注入到所需的模块中,在一些更高层次的模块分离之后,这样它们就不会驱动任何事情。设计和验证工程师需要作为一个团队工作。设计人员需要改变代码的结构,以便对其进行测试,或者验证工程师需要修改代码以执行所需的测试。Dave,如果我使用寄存器或电线对信号施加不同的力,“力”是否会不断为信号分配不同的值,或者强制值保持不变,等于“强制”时的值reg/wire?force是否与@always相同?
force
是一个临时连续赋值。RHS上的更改会不断更新LHS。