有人可以告诉我为什么我收到此错误?我对Verilog还很新,所以请原谅任何明显的缺陷。谢谢!
module func(clk,d,out);
input [3:0] d;
input clk;
reg [3:0] q[1:0];
output [3:0] out;
always @(posedge clk)
begin
q[0][3:0]=d[3:0];
q[1][3:0]=d[3:0];
end
assign out=q[0]^q[1];
endmodule
:错误:Xst:917 - 未声明的信号<>。 FATAL_ERROR:Xst:Portability / export / Port_Main.h:127:1.13 - 此应用程序发现了一个无法恢复的异常情况。流程将终止。
谢谢你的时间!
答案 0 :(得分:1)
尝试切换行reg [3:0] q[1:0];
和output [3:0] out;
的顺序。
你的代码在我的模拟器上编译,所以我猜这是你的模拟器中的一个错误。但一般建议是在所有内部值之前始终声明input
/ output
/ inout
。
我建议您将端口语法更改为IEEE Std 1364-2001样式。例如:
module func(
input clk,
input [3:0] d,
output [3:0] out );
正如其他人所建议的那样,您应该将阻止分配(=
)切换到<=
块中的非阻止分配(always
)。这个修复程序不是编译问题,但它会让你进入一个更好的编码风格,并使你免于简单的合成,将来不会与RTL头痛相匹配。
答案 1 :(得分:0)
问题多于答案:
您使用的是什么工具?该工具是否支持合成寄存器阵列?
您应该对顺序逻辑使用非阻塞分配:
always @(posedge clk) begin
q[0][3:0] <= d[3:0];
q[1][3:0] <= d[3:0];
end
记忆通常在冒号左边的0和右边的最后一个位置声明:
reg [3:0] q [0:1];