sv_brothers 0 26 сентября, 2011 Опубликовано 26 сентября, 2011 · Жалоба Добрый день всем. Вот решил немного "поковырять" Qsys, чтобы посмотреть что за зверь такой. Решил идти от простого - создание своих простеньких пользовательских компонентов (Master и Slave), дабы разобраться в спецификации интерфейса Avalon. Так вот создал я два компонента: 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; 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; Так вот вопрос самый первый. Почему при добавлении 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. Необходимо ли в моем проекте сигнал byteenable (вернее так: является ли он обязательным?). Пока это первые вопросы. Хотелось бы получить на них ответ, а потом идти уже дальше. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vadimuzzz 0 27 сентября, 2011 Опубликовано 27 сентября, 2011 · Жалоба Так вот вопрос самый первый. Почему при добавлении RAM (slave) Qsys определяет для него адресное пространство в пределах от 0x00000000 - 0x000003FF? Вроде как разрядность адреса (8 бит) не позволяет адресоваться в пределах заданного адресного пространства. у вас 256 32-битных слов, как раз 1024 байта Необходимо ли в моем проекте сигнал byteenable (вернее так: является ли он обязательным?). нет, не обязательно. а изучение шины лучше начинать со спецификаций, там про все сигналы и их (не)нужность сказано Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sv_brothers 0 28 сентября, 2011 Опубликовано 28 сентября, 2011 · Жалоба у вас 256 32-битных слов, как раз 1024 байта Да, спасибо, тут я немножко сам "протупил", запутался в разрядности шины адреса и забыл про разрядность хранимых данных. нет, не обязательно. а изучение шины лучше начинать со спецификаций, там про все сигналы и их (не)нужность сказано Вроде как со спецификации и начал. Столкнулся еще с одной проблемой - при задании разрядности шины данных и шины адреса (writedata, readdata, address) через параметры (в секции GENERIC) для пользовательского компонента. Например так: entity ram is generic ( DATA_WIDTH : natural := 32; ADDR_WIDTH : natural := 8 ); port ( ................................................................ address : in std_logic_vector(ADDR_WIDTH-1 downto 0); wrdata : in std_logic_vector(DATA_WIDTH-1 downto 0); rddata : out std_logic_vector(DATA_WIDTH-1 downto 0); ................................................................. ); end entity; Получаю в QSys ошибку: Error: avalon_slave_0: Signal rddata[-1] must be a multiple of the symbol width 8 Error: avalon_slave_0: Signal wrdata[-1] must be a multiple of the symbol width 8 Хотя на вкладке HDL-parametres параметры отображаются корректно... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться