删除了未使用的时序逻辑元素。不确定为什么它未被使用

Unused sequential logic element removed. Unsure why it is unused

代码运行时没有任何语法错误,但是当我尝试将代码移植到 basys 板并使用它时,它不起作用。我认为给定的 Vivado 错误是问题所在,但我不确定。我不知道距离如何显示为未使用。 Vivado error(不好意思我没有足够的声望直接放图片)

`timescale 1us/1us
module ProximitySensor(output reg trigger, input echo, input clk, output reg isCrash);
integer distance;

always @(posedge clk) //every clock pulse
    begin
        case (echo)
        0:
            begin

                if(distance <= 294117 && distance > 0)
                    begin
                        isCrash <= 1;
                        distance <=0;
                    end
                 else if(distance > 294117)
                    begin
                        isCrash <= 0;
                        distance <= 0;
                    end
                    trigger = 1;

            end       
        1:
            begin
                trigger <= 0;
                distance <= distance + 1;
            end
            endcase
    end

结束模块

打开 Synthesis->Schematic 并查找距离寄存器 (distance_reg[..])。检查是否真的删除了所有寄存器。我只是 运行 你的设计 我也收到了消息,但其中大部分仍然存在。 (至少到寄存器 27)。

如果它们真的都消失了,最可能的原因是“回声”信号始终为 0。

下一篇:使用整数作为寄存器是不好的风格。正常的编码风格是使用:

reg [31:0] distance;

(整数也是有符号的,你可能想要一个无符号的计数器)

上次:您的 "trigger = 1;" 代码:

  1. 应该是non-blocking:"trigger <= 1;"(虽然我更喜欢1'b1)
  2. 缩进错误。它表明它属于 "if(distance > 294117)" 部分,但事实并非如此。