VHDL ALU Умножение - PullRequest
       97

VHDL ALU Умножение

0 голосов
/ 04 мая 2020

ALU DESIGN

Итак, я пытаюсь разработать VHDL-код ALU, который выполняет много арифметических c операций, одной из которых является умножение A на B, у меня есть следующий код, но это дает мне ошибку при моделировании. Мне интересно, в чем проблема

USE ieee.std_logic_1164.all;
USE ieee.std_logic_unsigned.all;  --- LIBRARY DECLARATION
----------------------------------------
Entity ALU_PROJECT IS 
PORT (
A : IN STD_LOGIC_VECTOR (7 DOWNTO 0);
B : IN STD_LOGIC_VECTOR (7 DOWNTO 0);
sel: IN STD_LOGIC_VECTOR (3 DOWNTO 0); ------ENTITY
----CIN: IN STD_LOGIC;
Y: OUT STD_LOGIC_VECTOR (7 DOWNTO 0)
);
END ALU_PROJECT;
---------------------------------------------
ARCHITECTURE dataflow OF ALU_PROJECT IS
SIGNAL arith,logic: STD_LOGIC_VECTOR (7 DOWNTO 0);
BEGIN
-----------------------------ARITHMATIC SECTION---------------------
WITH sel(2 DOWNTO 0) SELECT
arith <= A+1 WHEN "000",
A-1 WHEN "001",
A*B WHEN "010",
B+1 WHEN "011",
B-1 WHEN "100",
B WHEN "101",
A+B WHEN "110",
A-B WHEN OTHERS;
-----------------------------LOGICAL SECTION---------------------
WITH sel(2 DOWNTO 0) SELECT
logic <= NOT A WHEN "000",
NOT B WHEN "001",
A AND B WHEN "010",
A OR B WHEN "011",
A XOR B WHEN "100",
NOT (A XOR B ) WHEN "101",
A NAND B WHEN "110",
A NOR B WHEN OTHERS;
-----------------------------MUX SECTION---------------------
WITH sel(3) SELECT
Y<= arith WHEN '0',
logic WHEN OTHERS;
END dataflow;

Отображаемая ошибка:

# ** Fatal: (vsim-3420) Array lengths do not match. Left is 8 (7 downto 0). Right is 16 (15 downto 0).
#    Time: 10 ns  Iteration: 0  Process: /alu_project/line__20 File: D:/Modeltech_pe_edu_10.4a/examples/inv.vhd
# Fatal error in Architecture dataflow at D:/Modeltech_pe_edu_10.4a/examples/inv.vhd line 27
# 
# HDL call sequence:
# Stopped at D:/Modeltech_pe_edu_10.4a/examples/inv.vhd 27 Architecture dataflow
# 
...