잠시 동안이 기능을 검색 했으므로 온라인에 게시 된 솔루션을 복제 할 수 없기 때문에 멋진 사람들이 나를 도울 수 있기를 바랍니다. ALU를 만들고 있습니다. 나는 2 개의 32 비트 입력과 1 개의 32 비트 출력을 5 비트 shamt와 4 비트 제어 신호와 함께 가지고있다. 내 코드는 다음과 같이 오류 위치가 주석 처리되어 있습니다.VHDL shift_left 작업에 오류가 발생했습니다.
library ieee;
use ieee.std_logic_1164.all;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
use ieee.numeric_std.all;
Entity mips_alu IS
PORT(ALUControl : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
inputA, inputB : IN STD_LOGIC_VECTOR(31 DOWNTO 0);
shamt : IN STD_LOGIC_VECTOR(4 DOWNTO 0);
Zero : OUT STD_LOGIC;
ALU_Result : OUT STD_LOGIC_VECTOR(31 DOWNTO 0)
);
END mips_alu;
ARCHITECTURE behavior of mips_alu IS
BEGIN
PROCESS(ALUControl)
BEGIN
CASE ALUControl is
WHEN "0000" =>
ALU_Result <= inputA AND inputB;
WHEN "0001" =>
ALU_Result <= inputA OR inputB;
WHEN "0010" =>
ALU_Result <= inputA + inputB;
WHEN "0110" =>
ALU_Result <= inputA - inputB;
WHEN "0111" =>
IF (inputA < inputB) THEN
ALU_Result <= inputA;
END IF;
WHEN "1000" =>
ALU_Result <= shift_left(inputB, to_integer(unsigned(shamt)));
-- The line above is where i get my first error, The following lines will have the same issue
WHEN "1001" =>
ALU_Result <= shift_right(inputB, shamt);
WHEN "1010" =>
ALU_Result <= shift_left(inputB, inputA);
WHEN "1011" =>
ALU_Result <= shift_right(inputB, inputA);
WHEN "1100" =>
ALU_Result <= inputA NOR inputB;
WHEN "1101" =>
ALU_Result <= inputB(31 DOWNTO 16);
WHEN OTHERS =>
ALU_Result <= inputA;
END CASE;
END PROCESS;
END behavior;
내가 점점 오전 오류는 말한다 : 문맥에 의해 표현 암시 std_logic_vector 유형과 일치해야 자격을 갖춘 표현에 지정된 shift_left 유형 : mips_alu.vhd (33)에
10,511 VHDL 자격을 갖춘 표현 오류
는 내가 초보자의 비트 VHDL에 나는 모든 도움은 감사, 내가 뭔가를 놓친 거지 그래서 만약 알려 주시기 바랍니다이 여러 가지 변화를 시도
user1155120 @ 사과, 난 오류 코드의 첫 번째 부분을 놓쳤다. 나는 그것을 추가하기 위해 편집 중이다. 또한 Synopsys 믹싱에 대해 어떤 의미인지 확신 할 수 없습니다. ieee.numeric_std_unsigned.all이 인식되지 않습니다. –
std_logic_arith (conv_integer)를 사용하거나 numeric_std를 사용하고 crazy와 같은 유형 변환을 사용하거나 mips_alu 포트 유형을 부호가 없거나 프로세스에서 unsigned unsigned 변수를 사용합니다. – user1155120
Quartus II/Prime은 2016 년 3 월부터 STD_LOGIC_UNSIGNED를 대체 할 수있는 IEEE 패키지 numeric_std_unsigned를 지원하지 않았습니다. (서명되지 않은 선언으로 만든 numeric_std의 함수로 std_logic_unsigned에서 참조하는 std_logic_arith에서 서명되지 않은 선언을 사용할 수 없다는 문제가 있습니다. VHDL의 각 선언은 고유하지 않으므로 두 서명되지 않은 선언이 동일한 유형/부속 유형을 참조하지 않습니다. – user1155120