我试图让BCD转换器显示从0到9999的数字,我需要使用移位运算符实现Double Dabble算法。但我只是无法开始编码而没有遇到警告,我真的不知道,我仍然是一个初学者,所以请忽略我做的任何愚蠢的错误。我开始时首先实现算法。我从来没有使用过移操作符,所以我可能做得不对,请帮忙,这是我的代码
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.NUMERIC_STD.ALL;
entity algorithm is
Port (x: in unsigned (15 downto 0);
y: out unsigned (15 downto 0));
end algorithm;
architecture Behavioral of algorithm is
begin
y <= x sll 16;
end Behavioral;
错误
Xst:647 - Input <x> is never used. This port will be preserved and left unconnected
if it belongs to a top-level block or it belongs to a sub-block and the hierarchy of
this sub-block is preserved.
即使我实现了这个
y&lt; = x sll 1;
我收到此错误
Xst:647 - Input <x<15>> is never used. This port will be preserved and left
unconnected if it belongs to a top-level block or it belongs to a sub-block
and the hierarchy of this sub-block is preserved.
我在这里做错了什么?
答案 0 :(得分:1)
你做错了,首先是尝试通过综合调试设计。
编写一个简单的测试平台,首先,练习你的设计(即给定上面的代码,将一些数据输入到X输入端口)。
稍后您可以扩展测试平台以读取Y输出端口,并将输出与您对每个输入所期望的输出进行比较,但您尚未做好准备。
模拟测试平台并将实体的内部信号添加到Wave窗口:实体是否按预期执行操作?如果是,请继续进行综合。否则,找到并解决问题。
上面的特定代码行y <= x sll 16;
和y <= x sll 1;
正常工作,合成警告(NOT错误)正如预期的那样。将16位数字移位16位并将结果拟合为16位值,没有任何内容,因此(如警告所示)端口X完全未使用。移动1位,MSB从结果的顶部下降,再次与警告说的完全一样。
合成的本质是要警告你数以百计这样的东西(通常大多数来自供应商自己的IP,奇怪的是!):如果你在模拟中验证了设计,你可以看一眼警告并忽略其中的大多数。有时事情确实出错了,那么一两个警告可能会有用。但它们不是主要的调试技术;如上所述,大多数都是自然的和预期的。
正如David所说,你可能确实想要在一个时钟进程内循环:FOR
循环是可合成的。我最近读到一条声明WHILE
循环通常也是可合成的,但我发现它不太可靠。