gpt4 book ai didi

verilog - SystemVerilog `force` 是如何工作的?

转载 作者:行者123 更新时间:2023-12-02 08:20:22 38 4
gpt4 key购买 nike

我有一个模块层次结构,我正在尝试执行 force在不同的模块接口(interface)上获得不同的值。我正在研究一个组件,其任务是将事务注入(inject)层次结构中的模块,绕过层次结构中更高模块的驱动器。我以为我可以使用 force在控制信号上,以便从更高的模块脱离驱动器并开始驱动到感兴趣的模块。所以我一直在尝试看看力量是如何起作用的。完整代码在 http://www.edaplayground.com/x/69PB .
特别是,我试图了解这两个语句在 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 u_DataReceiveTop.valid = 1'b1;即使有另一种力量,它也已向下传播。这里发生了什么?

最佳答案

一个 wire Verilog 中的驱动器和接收器网络都连接到相同的信号。该信号的值是所有驱动器和电线类型的某种分辨率功能。当您通过一个端口连接两条线时,两条线会合并为一个信号,但对于同一信号,您仍然有两个不同的名称。

当您使用 force线路上的语句,覆盖网络上的所有驱动程序,直到遇到另一个 forcerelease陈述。在您的示例中,第二个 force语句替换第一个 force .您在 force 中使用哪个层次结构引用并不重要。因为它们都指的是同一个信号。

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

关于verilog - SystemVerilog `force` 是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37774508/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com