Witam!
Mam straszny problem z VHDL'em. Potrzebuje połączyć pewne klocki. Już na samym początku nie wiem o co chodzi z tym:
-- ***************************************************8
PACKAGE eight_bit_int IS SUBTYPE BYTE IS INTEGER RANGE -128 TO 127; TYPE ARRAY_BYTE IS ARRAY (0 TO 3) OF BYTE; END eight_bit_int;
LIBRARY work; USE work.eight_bit_int.ALL;
LIBRARY ieee; USE ieee.std_logic_1164.ALL; USE ieee.std_logic_arith.ALL;
ENTITY CORDIC IS PORT (Clk_50MHz : IN STD_LOGIC; x_in, y_in : IN BYTE; r, phi, eps : OUT BYTE); END CORDIC;
-- **************************************************
Niby rozumiem, ale dlaczego jak zamieniam to na schemat to wejście i wyjście to np: x_in(0:6). Dlaczego skoro jest od -128 do 127 to ma tylko
7 bitów, a nie 8???! Przecież to jest 255 wartości...Czy mógłby mi ktoś podpowiedzieć jak to zrobić by połączyć to z układem, który ma na wyjściu STD_LOGIC_VECTOR(7 DOWNTO 0).? Mogę zmienić wyjście ewentualnie w tamtym układzie.
Jednak ten układ łączy się z układem który na wejściu ma IN(7:0). Mam problem z tym typem BYTE. Najchętniej bym go zamienił na STD_LOGIC_VECTOR. Gdy próbuje zamienić i zamiast BYTE dać STD_VECTOR_LOGIC(0 TO 7) dla wejść i wyjść. Następnie sygnały dać STD_VECTOR_LOGIC (0 TO 3). To mam masę błędów np. r <= x(3) jest zle.
Proszę o jakas podpowiedź, bo jestem początkujący. Nie idę na łatwiznę. Już trochę zrobiłem, najgorzej, że muszę to co sam napisałem połączyć z tym kodem.
Prosze o pomoc.
Wklejam cały kod tego układu, jeśli ma to znaczenie:
PACKAGE eight_bit_int IS SUBTYPE BYTE IS INTEGER RANGE -128 TO 127; TYPE ARRAY_BYTE IS ARRAY (0 TO 3) OF BYTE; END eight_bit_int;
LIBRARY work; USE work.eight_bit_int.ALL;
LIBRARY ieee; USE ieee.std_logic_1164.ALL; USE ieee.std_logic_arith.ALL;
ENTITY CORDIC IS PORT (Clk_50MHz : IN STD_LOGIC; x_in, y_in : IN BYTE; r, phi, eps : OUT BYTE); END CORDIC;
ARCHITECTURE Behavioral OF CORDIC IS SIGNAL x, y, z : ARRAY_BYTE; BEGIN
PROCESS BEGIN WAIT UNTIL Clk_50MHz = '1'; r <= x(3); phi <= z(3); eps <= y(3); IF y(2) > 0 THEN x(3) <= x(2) + y(2) /4; y(3) <= y(2) - x(2) /4; z(3) <= z(2) + 14; ELSE x(3) <= x(2) - y(2) /4; y(3) <= y(2) + x(2) /4; z(3) <= z(2) - 14; END IF; IF y(1) > 0 THEN x(2) <= x(1) + y(1) /2; y(2) <= y(1) - x(1) /2; z(2) <= z(1) + 26; ELSE x(2) <= x(1) - y(1) /2; y(2) <= y(1) + x(1) /2; z(2) <= z(1) - 26; END IF; IF y(0) > 0 THEN x(1) <= x(0) + y(0); y(1) <= y(0) - x(0); z(1) <= z(0) + 45; ELSE x(1) <= x(0) - y(0); y(1) <= y(0) + x(0); z(1) <= z(0) - 45; END IF; IF x_in > 0 THEN x(0) <= x_in; y(0) <= y_in; z(0) <= 0; ELSIF y_in > 0 THEN x(0) <= y_in; y(0) <= - x_in; z(0) <= 90; ELSE x(0) <= - y_in; y(0) <= x_in; z(0) <= - 90; END IF; END PROCESS;
END Behavioral;