禁止将Synth 8-2576过程分配给非寄存器trig_i_a

时间:2019-05-03 14:50:27

标签: verilog xilinx vivado

我的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 :(得分:0)

这里有两个问题。 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'具有内部驱动程序