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

问题

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 [15:0] out
);

reg [3:0] store [3:0];
reg [1:0] k; // 0~3

// 把连续4次收到的数据组合成一个数据发送出去
always @ (posedge clk or negedge rst)
begin
    if (!rst)
        k <= 1'b0;
    else
    begin
        store[k] <= data;
        if (k == 2'd4) // 这里写错了,应该是 2'b3
            begin
            k <= 0;
            out <= {data[0], data[1], data[2], data[3]};
            end
        else
            k <= k + 1'b1;
    end
end

endmodule

这个模块是有输出的。但是由于条件语句写错了,导致永远无法执行。也就使得output始终是恒定的初始的值。编译时会被优化为接GND或VCC,同样逻辑单元数为0。

解决方法

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

posted @   星夜之夏  阅读(1358)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示