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。
解决方法
检查代码,特别是与顶层模块输出相关的部分,看顶层模块是否有有效的输出。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 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】