Vhdl 如何将163位数字映射为1位数字?

Vhdl 如何将163位数字映射为1位数字?,vhdl,Vhdl,我有两个163位的数字,我想用乘法器映射。但对于乘法器,a(162向下至0)和b仅为一位。那我该怎么做呢?请帮忙 entity demo_pointadd is Port ( x : in STD_LOGIC_VECTOR (162 downto 0); y : in STD_LOGIC_VECTOR(162 downto 0); p : out STD_LOGIC_VECTOR (162 downto 0); q

我有两个163位的数字,我想用乘法器映射。但对于乘法器,a(162向下至0)和b仅为一位。那我该怎么做呢?请帮忙

entity demo_pointadd is
    Port ( x : in  STD_LOGIC_VECTOR (162 downto 0);
           y : in  STD_LOGIC_VECTOR(162 downto 0);
           p : out  STD_LOGIC_VECTOR (162 downto 0);
           q : out  STD_LOGIC_VECTOR (162 downto 0);
          clk : in  STD_LOGIC;
           reset : in  STD_LOGIC);
end demo_pointadd;

-- component declaration
component full_163bitmul
    Port ( a : in  STD_LOGIC_VECTOR (162 downto 0);
           b : in  STD_LOGIC;
           clk : in  STD_LOGIC;
           reset : in  STD_LOGIC;
           c : out  STD_LOGIC_VECTOR (162 downto 0));
end component;
begin
mul_1 :full_163bitmul 
                       port map (a => x,
                                 b => y, --- PROBLEM??
                                 clk => clk,
                                 reset => reset,
                                  c => p);

这本身似乎不是乘数。当我猜测full_163bitmul的代码时,输出'c'将是'a'(如果b='1')或全零(如果b='0')或未定义(如果b是'Z'|'X'|……)

如果你想用它来构建一个完整的乘法器,你必须循环通过“y”向量,把单个位带到“b”输入,并对结果进行加法和移位

sig_b<=y(i);

mul_1 :full_163bitmul 
port map 
    (a => s_x,
    b => sig_b, 
    clk => clk,
    reset => reset,
    c => temp);

...
sig_b s_x,
b=>sig_b,
时钟=>clk,
重置=>重置,
c=>temp);
...

您是否实现了
full\u 163bitmul
?如果是,请把它放在问题中。不过,从你在这里展示的内容来看,这似乎不太可能。163位数字乘以1位数字有什么意义呢?约翰:与其把这个问题编辑成一个不同的问题,不如发布一个新问题。是的,如果需要的话,请问一个新问题。如果您再次还原此问题,我将锁定此问题。或者,
full\u 163bitmul
中可能有一个状态机,并接受端口
a
上的两个输入。否则它只是一个多路复用器。