Синтез 8-2576 процедурного присвоения незарегистрированному trig_i_a не разрешен - PullRequest
0 голосов
/ 03 мая 2019

У меня есть некоторые проблемы с моими кодами verilog.Ошибка, как описано в заголовке.Я не знаю источник этой ошибки.Я жду ваших талантов, чтобы решить эту проблему.Заранее спасибо.

Вот мой код verilog:


module red_pitaya_trigger_manager(
   input       dac_clk_i,
   input       trig_a_i,
   input       trig_b_i,
   input       master_trig,
   output      trig_out_ch0,
   output      trig_out_ch1
   );

reg trig_out_ch0;
reg trig_out_ch1;

always @(posedge dac_clk_i) begin
   if (master_trig == 1'b1) begin
       trig_a_i <= 1'b0;
       trig_b_i <= 1'b0;
       trig_out_ch0 <= master_trig;
       trig_out_ch1 <= master_trig;
       end
   else if (master_trig == 1'b0) begin
       //master_trig <= 1'b0;
       trig_out_ch0 <= trig_a_i;
       trig_out_ch1  <= trig_b_i;
       end
   end      
endmodule

Фактический вывод этого кода:[Synth 8-2576] процедурное присвоение незарегистрированному trig_i_a не разрешено[Synth 8-2576] процедурное присвоение незарегистрированному trig_i_b не разрешено

1 Ответ

0 голосов
/ 04 мая 2019

Здесь есть две проблемы. Toolic прав, что одна из проблем заключается в том, что вы пытаетесь назначить значение для ввода, а сообщение об ошибке не очень полезно. Но вы получаете это сообщение об ошибке из-за другой проблемы, которую инструмент замечает первым.

Когда вы объявляете входы и выходы без типа, они по умолчанию считаются wire. И вы присваиваете провода в блоке always с назначением <=, что вы можете делать только для типов reg. Таким образом, вы присваиваете проводам способ, которым вам разрешено присваивать регистры, поэтому:

[Synth 8-2576] процедурное присвоение незарегистрированному trig_i_b не разрешено

Если вы исправили это, введя типы ввода reg

module red_pitaya_trigger_manager(
   input       dac_clk_i,
   input       trig_a_i,
   input       trig_b_i,
   input       master_trig,
   output      trig_out_ch0,
   output      trig_out_ch1
   );

reg trig_a_i; // note
reg trig_b_i;

reg trig_out_ch0;
reg trig_out_ch1;

always @(posedge dac_clk_i) begin
   if (master_trig == 1'b1) begin
       trig_a_i <= 1'b0;
       trig_b_i <= 1'b0;
       trig_out_ch0 <= master_trig;
       trig_out_ch1 <= master_trig;
       end
   else if (master_trig == 1'b0) begin
       //master_trig <= 1'b0;
       trig_out_ch0 <= trig_a_i;
       trig_out_ch1  <= trig_b_i;
       end
   end
endmodule

Тогда вы увидите более полезное сообщение при сборке:

[Synth 8-6104] Входной порт 'trig_a_i' имеет внутренний драйвер

[Synth 8-6104] Входной порт 'trig_b_i' имеет внутренний драйвер

...