Verilog 网表模拟:非法;“左值”;关于这点

Verilog 网表模拟:非法;“左值”;关于这点,verilog,system-verilog,uvm,test-bench,Verilog,System Verilog,Uvm,Test Bench,我试图模拟合成(到D触发器)物理寄存器文件(PRF)。行为形式的测试台工作正常。但是在综合之后,一些内部构件已经被工具重命名,基本上,我正在尝试将功能模拟器生成的值分配到PRF中。这是在初始块中完成的。下面是测试台代码的一部分。(这是一个示例代码,在将所有位加载到所有寄存器文件方面并不完全完整): 其中,n44180和ram[6143]为导线 我得到的错误是: ncelab: *E,WANOTL (simulate_gate.sv,1059|72): A net is not a legal l

我试图模拟合成(到D触发器)物理寄存器文件(PRF)。行为形式的测试台工作正常。但是在综合之后,一些内部构件已经被工具重命名,基本上,我正在尝试将功能模拟器生成的值分配到PRF中。这是在初始块中完成的。下面是测试台代码的一部分。(这是一个示例代码,在将所有位加载到所有寄存器文件方面并不完全完整):

其中,
n44180
ram[6143]
为导线

我得到的错误是:

ncelab: *E,WANOTL (simulate_gate.sv,1059|72): A net is not a legal lvalue in this context [9.3.1(IEEE)].

我不确定我错过了什么/哪里

永远不允许在Verilog或SystemVerilog中按程序分配导线。您可以做以下几件事:

  • 使用
    force
    语句分配
    D
    输入并等待一个时钟周期以捕获它们,然后
    release
    it
  • 查看
    DFF_X1
    内部,看看是否可以按程序将
    Q
    寄存器放入其中
  • DFF_X1
    模块替换为您自己的行为模型,您可以在其中为
    Q
    变量赋值
  • “非法定左值”是指“不允许您分配给它”。据我所知,您只能将
    始终
    块中的
    reg
    s分配给
    always
    块(不过,我对SystemVerilog不太确定)。
     DFF_X1 ram_reg_95__63_ ( .D(n44180), .CK(clk), .Q(ram[6143]) );
    
    ncelab: *E,WANOTL (simulate_gate.sv,1059|72): A net is not a legal lvalue in this context [9.3.1(IEEE)].