Vhdl 右移数字

Vhdl 右移数字,vhdl,Vhdl,我想把一个数字除以512,这意味着我需要将它移位9。例如,在我的代码中,我想用二进制形式的数字26乘以100,然后除以512。但我需要做的不是除以512,而是右移数字26*100的9倍。但是,当我执行shift\u right命令时,会出现以下错误: 错误(10511):乘法器处的VHDL限定表达式错误\u VHDL。vhd(34):限定表达式中指定的SHIFT\u RIGHT类型必须与上下文为表达式暗示的std\u逻辑\u向量类型匹配 IEEE库; 使用IEEE.STD_LOGIC_1164.

我想把一个数字除以512,这意味着我需要将它移位9。例如,在我的代码中,我想用二进制形式的数字26乘以100,然后除以512。但我需要做的不是除以512,而是右移数字26*100的9倍。但是,当我执行
shift\u right
命令时,会出现以下错误:

错误(10511):乘法器处的VHDL限定表达式错误\u VHDL。vhd(34):限定表达式中指定的SHIFT\u RIGHT类型必须与上下文为表达式暗示的std\u逻辑\u向量类型匹配

IEEE库;
使用IEEE.STD_LOGIC_1164.ALL;
使用IEEE.NUMERIC_STD.ALL;
实体乘法器的VHDL是
一般的(
显示分辨率:整数:=23;--计数器以获得最低频率
显示_计数器:整数:=8);--计数器达到97KHz频率
港口(
半字节1:在标准逻辑向量中(显示计数器降到0):=“000011010”--26二进制形式
半字节2:在标准逻辑向量中(显示计数器降到0);
结果:输出std_逻辑_向量(17到0);
终端实体乘法器(VHDL);
行为乘法器的体系结构是VHDL
信号编号:无符号(显示计数器向下至0):=“001100100”——100二进制形式
开始

结果shift_right返回无符号或有符号,具体取决于您给它的值。所以,您正试图将一个无符号函数写入一个std_logic_向量(结果是std_logic_向量的类型)

另外,
number
已经是类型
unsigned
,因此无需再次将其强制转换为
unsigned


但是我给你+1分,因为你使用的是数字而不是标准逻辑

您的代码有许多问题。1.Nibble1具有通用长度,但默认值始终为9位,因此显示计数器通用值必须为8。“数字”信号也有同样的问题。2.“结果”有多个驱动因素3。数字信号未分配。3.Nibble1*nibble2给出显示计数器*2+2位宽的结果。但是没有与此宽度匹配的信号。。4.没有除以512,只有除以2**(显示计数器+1)。请修复代码示例好的,我修复了问题,谢谢
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.NUMERIC_STD.ALL;

entity Multiplier_VHDL is
    GENERIC (
        display_resolution : INTEGER := 23; -- counter to get to the lowest frequency
        display_counter: INTEGER := 8);     -- counter to get to 97KHz frequency

    port (
        Nibble1 : in std_logic_vector(display_counter downto 0) := "000011010"; -- 26 in binary form
        Nibble2 : in std_logic_vector(display_counter downto 0);
        Result: out std_logic_vector(17 downto 0));
end entity Multiplier_VHDL;

architecture Behavioral of Multiplier_VHDL is
    signal number : unsigned(display_counter downto 0) := "001100100"; -- 100 in binary form

begin
    Result <= std_logic_vector(unsigned(Nibble1) * unsigned(number));
    Result <= (shift_right(unsigned(number), display_counter + 1));

end architecture Behavioral;