问题
FPGA代码写完后编译不报错,但是显示使用的逻辑单元数(Total logic elements)为0。当然程序也不工作。
我用的是Intel Altera FPGA,verilog语言,在Quartus下开发。
原因
顶层模块没有有效的输出。例如输出没有赋值,或者输出连接着子模块,但是子模块中出现问题。
如果没有正确地设置顶层模块的输出,则编译时优化,认为模块无输出,或者输出无需逻辑单元。
举例1:
module test
(
input clk,
input rst,
output out1,
output out2,
output out3
);
assign out1 = clk;
assign out2 = ~clk;
endmodule
out1直接将时钟信号输出,未做任何处理;out2将时钟信号反相输出,只需要一个非门,不需要逻辑单元;而out3没有任何处理。
因此上述代码编译得到的逻辑单元数为0。
举例2:
module test
(
input clk,
input rst,
input [3:0] data,
output out
);
reg [3:0] store [7:0];
reg [3:0] k;
always @ (posedge clk or negedge rst)
begin
if (!rst)
k <= 1'b0;
else
begin
store[k] <= data;
if (k == 4'd7)
k <= 0;
else
k <= k + 1'b1;
end
end
endmodule
看上去代码实现了某种功能,肯定要使用逻辑单元了吧?
但是实际上,顶层模块没有实际的输出,相当于你的代码做了无用的工作,有任何结果也没往外送。所以编译完后,仍然是没有使用逻辑单元。
解决方法
检查代码,特别是与顶层模块输出相关的部分,看顶层模块是否有有效的输出。