【问题标题】:Netlist simulation: Illegal "lvalue" in this context网表模拟:在这种情况下非法的“左值”
【发布时间】:2018-08-27 21:14:30
【问题描述】:

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

 1050 reg  [`SIZE_DATA-1:0]          test [`SIZE_RMT-1:0];
 1051 integer x, y, z;
 1052 
 1053 always @(*)
 1054     begin
 1055         for (x = 0; x < `SIZE_RMT; x++)
 1056             begin
 1057                 for (y =0; y < `SIZE_DATA; y ++)
 1058                     begin
 1059                         coreTop.registerfile.PhyRegFile.ram_reg_95__63_.D = test[x][y];
 1060                         z = y;
 1061                     end
 1062                     z = z + 1 ;
 1063             end
 1064     end

ram_reg_95__63_模块的描述如下:

 DFF_X1 ram_reg_95__63_ ( .D(n44180), .CK(clk), .Q(ram[6143]) );

其中,n44180ram[6143] 是电线。

我得到的错误:

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

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

【问题讨论】:

  • "not a legal lvalue" 意思是"你不能给它赋值"。据我所知,您只能在 always 块内分配给 regs(不过我不确定 SystemVerilog)。

标签: verilog system-verilog test-bench


【解决方案1】:

您永远不能在 Verilog 或 SystemVerilog 中按程序分配电线。您可以做的几件事:

  1. 使用force 语句分配D 输入并等待一个时钟周期让它们被捕获,然后release 它。
  2. 查看DFF_X1 内部,看看您是否可以在程序上在其中注册Q
  3. 用您自己的行为模型替换DFF_X1 模块,您可以在其中分配给Q 变量。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多