zoukankan      html  css  js  c++  java
  • 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。

    解决方法

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

  • 相关阅读:
    C和指针学习笔记--第五章
    C和指针学习笔记--第四章
    C和指针学习笔记--第三章
    ipables常用命令
    linux网络设计与实现-----第一章
    iptables
    cJSON学习
    Makefile-更新函数库文件
    Makefile隐晦规则
    【Spark学习笔记】01-Spark简介
  • 原文地址:https://www.cnblogs.com/xia-weiwen/p/11363200.html
Copyright © 2011-2022 走看看