Имитация списка соединений: незаконное «lvalue» в этом контексте - PullRequest
0 голосов
/ 28 августа 2018

Я пытаюсь смоделировать синтезированный (в 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]) );

где, 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)].

Я не уверен, что / где мне не хватает.

1 Ответ

0 голосов
/ 28 августа 2018

Вам никогда не разрешается процедурно назначать провода в Verilog или SystemVerilog. Несколько вещей, которые вы можете сделать:

  1. Используйте оператор force, чтобы назначить входы D и подождать один такт, чтобы они были захвачены, затем release.
  2. Загляните внутрь DFF_X1 и посмотрите, сможете ли вы процедурно зарегистрировать Q внутри него.
  3. Замените модуль DFF_X1 собственной поведенческой моделью, которую можно назначить переменной Q.
...