无法在VHDL中实现Shift运算符(sll)

时间:2014-06-13 09:47:12

标签: vhdl

我试图让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.

我在这里做错了什么?

1 个答案:

答案 0 :(得分:1)

你做错了,首先是尝试通过综合调试设计。

编写一个简单的测试平台,首先,练习你的设计(即给定上面的代码,将一些数据输入到X输入端口)。

稍后您可以扩展测试平台以读取Y输出端口,并将输出与您对每个输入所期望的输出进行比较,但您尚未做好准备。

模拟测试平台并将实体的内部信号添加到Wave窗口:实体是否按预期执行操作?如果是,请继续进行综合。否则,找到并解决问题。

上面的特定代码行y <= x sll 16;y <= x sll 1;正常工作,合成警告(NOT错误)正如预期的那样。将16位数字移位16位并将结果拟合为16位值,没有任何内容,因此(如警告所示)端口X完全未使用。移动1位,MSB从结果的顶部下降,再次与警告说的完全一样。

合成的本质是要警告你数以百计这样的东西(通常大多数来自供应商自己的IP,奇怪的是!):如果你在模拟中验证了设计,你可以看一眼警告并忽略其中的大多数。有时事情确实出错了,那么一两个警告可能会有用。但它们不是主要的调试技术;如上所述,大多数都是自然的和预期的。

正如David所说,你可能确实想要在一个时钟进程内循环:FOR循环是可合成的。我最近读到一条声明WHILE循环通常也是可合成的,但我发现它不太可靠。