我的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
答案 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'具有内部驱动程序