VHDL TG68 core data_in и data_out в datainout

#vhdl

#vhdl

Вопрос:

Я хочу использовать tg68 core, но есть проблема. Когда я компилирую свой дизайн в Altera Quartus, он выдает мне 16 data_in и 16 data_out сигналов, и мне нужно объединить их в inout выводы.

Вот некоторый код, который я написал на VHDL, и мне нужен кто-то, кто может проверить мой код, потому что я думаю, что код в порядке. Это код для файла дизайна верхнего уровня, который должен генерировать inout выводы из data_in и data_out сигналы из файла tg68.vhd. Также необходимо, чтобы все сигналы из tg68.vhd можно было использовать в окончательном проекте. (сигналы типа as , uds , lds …)

Вот код:

 library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;

entity datainout is
    port(
    clk          : in std_logic;
    reset        : in std_logic;
        clkena_in    : in std_logic:='1';

        IPL          : in std_logic_vector(2 downto 0):="111";
        dtack        : in std_logic;
        addr          : out std_logic_vector(31 downto 0);

        as            : buffer std_logic;
        uds          : buffer std_logic;
        lds          : buffer std_logic;
        rw            : buffer std_logic;
        drive_data    : out std_logic;
        datainout : inout std_logic_vector(15 downto 0)         
        );
end datainout;

ARCHITECTURE logic OF datainout IS

    COMPONENT TG68
    PORT (
      clk          : in std_logic;
    reset        : in std_logic;
        clkena_in    : in std_logic;
        data_in      : in std_logic_vector(15 downto 0);
        IPL          : in std_logic_vector(2 downto 0);
        dtack        : in std_logic;
        addr          : out std_logic_vector(31 downto 0);
        data_out      : out std_logic_vector(15 downto 0);
        as            : out std_logic;
        uds          : out std_logic;
        lds          : out std_logic;
        rw            : out std_logic;
        drive_data    : out std_logic
        );
    END COMPONENT;

signal data_in : STD_LOGIC_VECTOR (15 downto 0);
signal data_out : STD_LOGIC_VECTOR (15 downto 0);

BEGIN

data_in <= datainout;
TG68_inst: TG68
    PORT MAP (
        data_in => data_in,
    data_out => data_out,
    clk => clk,
    reset => reset,
    clkena_in => clkena_in,
    IPL => IPL,
    dtack => dtack,
    addr => addr,
    as => as,
    rw => rw,
    uds => uds,
    lds => lds,
        drive_data => drive_data   
        );

datainout(15 downto 8) <= data_out(15 downto 8) when as = '0' and rw = '0' and uds='0' else "ZZZZZZZZ";
datainout(7 downto 0) <= data_out(7 downto 0) when as = '0' and rw = '0' and lds='0' else "ZZZZZZZZ";
END;   
  

Комментарии:

1. Вы импортируете устаревшую std_logic_unsigned библиотеку, но ни одна из них не используется в вашем коде. Лучше вообще удалить std_logic_unsigned из вашего заголовка. Прочитайте, почему: parallelpoints.com/node/3

Ответ №1:

Основной способ передачи inout сигналов заключается в:

 data_in   <= data_pins;
data_pins <= data_out when enable = '1' else (others => 'Z');
  

Насколько я могу видеть, это именно то, что вы сделали, но с разделением шины данных на две половины. Предполагая, что это то, что вы задумали, все в порядке!