在VHDL中实现移位运算符(sll)时遇到问题

在VHDL中实现移位运算符(sll)时遇到问题,vhdl,Vhdl,我正在尝试制作一个BCD转换器来显示从0到9999的数字,我需要使用移位运算符实现双涉猎算法。但是我不能在开始编写代码时不遇到我不太了解的警告,我还是一个初学者,所以请忽略我犯的任何愚蠢的错误。我首先实现了算法。我从未使用过移位运算符,所以我可能做得不对,请帮助,这是我的代码 library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.NUMERIC_STD.ALL; entity algorithm is Port (x: in unsigned

我正在尝试制作一个BCD转换器来显示从0到9999的数字,我需要使用移位运算符实现双涉猎算法。但是我不能在开始编写代码时不遇到我不太了解的警告,我还是一个初学者,所以请忽略我犯的任何愚蠢的错误。我首先实现了算法。我从未使用过移位运算符,所以我可能做得不对,请帮助,这是我的代码

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;
IEEE库;
使用IEEE.STD_LOGIC_1164.ALL;
使用IEEE.NUMERIC_STD.ALL;
实体算法是
端口(x:in未签名(15到0);
y:输出无符号(15到0));
结束算法;
行为算法的体系结构是
开始

首先,你做错的是,试图通过合成来调试设计

编写一个简单的测试台,首先测试您的设计(即,给定上述代码,将一些数据输入X输入端口)

稍后,您可以扩展测试台来读取Y输出端口,并将输出与每个输入的预期值进行比较,但您还没有准备好

模拟测试台并将实体的内部信号添加到Wave窗口:实体是否实现了您的预期?如果是,则继续合成。否则,请查找并修复问题


上面的特定代码行,
y Double dabble表示一个bcd累加器,清除该累加器后,dabble工作。有一个二进制值一次左移到bcd累加器位。首先将bcd累加器向左移动一个位置,然后将最右边的位置设置为二进制值最左边的位置,然后将二进制值向左移动一个位置。然后对bcd累加器中的每个bcd数字位置测试该值,如果大于4(“100”),则添加3(“0011”)。对所有二进制位进行移位、测试和有条件地相加。考虑流程中的循环。@DavidKoontz我想要一个可以正确合成的代码,所以我不想使用循环,我在某个地方读到它被合成了,但当在FPGA上实现时,它被强制作为计数器,所以这是一个糟糕的做法。这就是为什么我需要一些关于sll的东西,我有太多关于sll的问题。当我甚至无法让sll操作员工作时,我该如何将其向左移动:/i我迷路了!老实说,你可以合成一个循环。循环通过合成展开,需要静态迭代方案。请参阅,了解一些实现,包括具有最小硬件的展开循环。这些都不使用SLL,而是使用切片和连接或组件连接。首先得到一个工作算法。
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.
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.