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

时间:2018-04-03 15:04:16

标签: verilog vivado

代码运行时没有任何语法错误但是当我尝试将代码移植到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

endmodule

1 个答案:

答案 0 :(得分:0)

打开Synthesis-&gt;原理图并查找距离寄存器(distance_reg [..])。检查是否真的删除了所有寄存器。我只是运行你的设计我也得到了消息,但大多数仍然存在。 (至少uptil登记册27)。

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

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

reg [31:0] distance;

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

最后:你的&#34;触发器= 1;&#34;代码:

  1. 它应该是非阻塞的:&#34;触发器&lt; = 1;&#34; (虽然我更喜欢1&#39; b1)
  2. 缩进是错误的。它表明它属于&#34; if(距离&gt; 294117)&#34;部分,但它没有。