FPGA程序编译后逻辑单元数为0

烈酒焚心 提交于 2019-11-27 12:33:02

问题

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

看上去代码实现了某种功能,肯定要使用逻辑单元了吧?
但是实际上,顶层模块没有实际的输出,相当于你的代码做了无用的工作,有任何结果也没往外送。所以编译完后,仍然是没有使用逻辑单元。

解决方法

检查代码,特别是与顶层模块输出相关的部分,看顶层模块是否有有效的输出。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!