1. Slave - представляет собой память с интерфейсом:
Код
entity ram is
port
(
clk : in std_logic;
reset : in std_logic;
rd : in std_logic;
wr : in std_logic;
address : in std_logic_vector(7 downto 0);
wrdata : in std_logic_vector(31 downto 0);
rddata : out std_logic_vector(31 downto 0);
waitrequest : out std_logic
);
end entity;
port
(
clk : in std_logic;
reset : in std_logic;
rd : in std_logic;
wr : in std_logic;
address : in std_logic_vector(7 downto 0);
wrdata : in std_logic_vector(31 downto 0);
rddata : out std_logic_vector(31 downto 0);
waitrequest : out std_logic
);
end entity;
2. Master - представляет собой FSM, который будет записывать/вычитывать данные из подчиненного устройства по некоторому (неважно какому алгоритму). Интерфес Master`а:
Код
entity master is
port
(
clk : in std_logic;
reset : in std_logic;
waitrequest : in std_logic;
rddata : in std_logic_vector(31 downto 0);
rd : out std_logic;
wr : out std_logic;
address : out std_logic_vector(7 downto 0);
wrdata : out std_logic_vector(31 downto 0);
q_out : out std_logic_vector(31 downto 0) -- будет Conduit
);
end entity master;
port
(
clk : in std_logic;
reset : in std_logic;
waitrequest : in std_logic;
rddata : in std_logic_vector(31 downto 0);
rd : out std_logic;
wr : out std_logic;
address : out std_logic_vector(7 downto 0);
wrdata : out std_logic_vector(31 downto 0);
q_out : out std_logic_vector(31 downto 0) -- будет Conduit
);
end entity master;
Так вот вопрос самый первый. Почему при добавлении RAM (slave) Qsys определяет для него адресное пространство в пределах от 0x00000000 - 0x000003FF? Вроде как разрядность адреса (8 бит) не позволяет адресоваться в пределах заданного адресного пространства. Понимаю, что, возможно, ответ на вопрос лежит где-то в этом куске спецификации для сигнала address, но пока не могу понять:
Цитата
For masters, the address signal represents a byte address. The
value of the address must be aligned to the data width. To write to
specific bytes within a data word, the master must use the
byteenable signal.
For slaves, the interconnect translates the byte address into a
word address in the slave’s address space so that each slave
access is for a word of data from the perspective of the slave. For
example, address= 0 selects the first word of the slave and
address 1 selects the second word of the slave.
value of the address must be aligned to the data width. To write to
specific bytes within a data word, the master must use the
byteenable signal.
For slaves, the interconnect translates the byte address into a
word address in the slave’s address space so that each slave
access is for a word of data from the perspective of the slave. For
example, address= 0 selects the first word of the slave and
address 1 selects the second word of the slave.
Необходимо ли в моем проекте сигнал byteenable (вернее так: является ли он обязательным?).
Пока это первые вопросы. Хотелось бы получить на них ответ, а потом идти уже дальше.