问题
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
看上去代码实现了某种功能,肯定要使用逻辑单元了吧?
但是实际上,顶层模块没有实际的输出,相当于你的代码做了无用的工作,有任何结果也没往外送。所以编译完后,仍然是没有使用逻辑单元。
解决方法
检查代码,特别是与顶层模块输出相关的部分,看顶层模块是否有有效的输出。