非常混乱的错误,没有提到原因

时间:2013-05-26 07:02:44

标签: verilog system-verilog synthesis

有人可以告诉我为什么我收到此错误?我对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 - 此应用程序发现了一个无法恢复的异常情况。流程将终止。

谢谢你的时间!

2 个答案:

答案 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];