Vadim_nsk 0 5 августа, 2022 Опубликовано 5 августа, 2022 · Жалоба 1. При создании пользовательского IP с различными AXI-шинами, автоматически к каждой шине создается свой клок. Внутри потом для каждой шины создается отдельный компонент обработки сигналов данной шины со своим клоком. Я еще понимаю, что есть AXI-Interconnect, который увязывает несколько клоков, но для чего это в обычной жизни? AXI-Stream имеет ширину данных 32 или 64 разряда. А если мне надо 256 бит и все эти данные поступают от одного источника с одним клоком, как это правильно описать? Т.е. мне защелкивать каждые 32 бита от своего клока, надеясь, что снаружи на эти несколько входов не подали разные клоки? Но если я указываю один клок для всех шин, среда ругается, что нет клока ассоциируемого с шиной. Как это правильно разрулить? Видимо, сказываются повадки программиста, где хочется строгой типизации, исключающей внешние ошибки... 2. Во всех автоматически сгенерированных корках, асинхронный сброс обрабатывается как синхронный. Это намеренно так делается? Даже название сигнала "aresetn", но во всех процессах в списке чувствительности только клок. Где можно прочитать про причину и рекомендации в своем коде использовать именно такое описание сброса? 3. При попытке описать AXI-шину с шириной отличной от 32/64 среда выдает ошибку. Но при этом, я могу настроить арифметические корки с AXI-шиной, где ширина входных параметров и результата будет отличаться от 32/64. На самом деле нет такого строгого ограничения? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dxp 32 5 августа, 2022 Опубликовано 5 августа, 2022 · Жалоба 1 час назад, Vadim_nsk сказал: 3. При попытке описать AXI-шину с шириной отличной от 32/64 среда выдает ошибку. Но при этом, я могу настроить арифметические корки с AXI-шиной, где ширина входных параметров и результата будет отличаться от 32/64. На самом деле нет такого строгого ограничения? По спеке AXI (не AXI-Stream) ширина может быть задана только в кратном 2 количестве байт (задаётся сигналом xSIZE, где x -- A, R). Блоки могут быть любыми, но шина только такой. 1 час назад, Vadim_nsk сказал: 2. Во всех автоматически сгенерированных корках, асинхронный сброс обрабатывается как синхронный. Это намеренно так делается? Даже название сигнала "aresetn", но во всех процессах в списке чувствительности только клок. Где можно прочитать про причину и рекомендации в своем коде использовать именно такое описание сброса? Вы подразумеваете aresetn как асинхронный? Он не асинхронный, он самый что ни на есть синхронный. А буква a в начале пусть не смущает -- она обозначает, видимо, AXI, а не асинхронность. У них и клок называется aclk. Первый вопрос не понял. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
stealthisname 7 6 августа, 2022 Опубликовано 6 августа, 2022 · Жалоба мне для понимания работы с AXI(memory mapped) и AXIS (stream) очень помогло ознакомление с AMBA AXI Protocol Specification и AMBA AXI stream Protocol Specification 15 часов назад, Vadim_nsk сказал: AXI-Stream имеет ширину данных 32 или 64 разряда. А если мне надо 256 бит и все эти данные поступают от одного источника с одним клоком, как это правильно описать? по спецификациям и в AXI и в AXIS данные могут иметь отличную ширину данных от 32 или 64 разрядов: "TDATA_WIDTH must be an integer number of bytes and is recommended to be 8, 16, 32, 64, 128, 256, 512 or 1024-bits." если передаётся 256 бит с одного источника и если источник позволяет не дробить общую шину на отдельные, то нужно указать ширину данных 256 бит например вот так 15 часов назад, Vadim_nsk сказал: Но если я указываю один клок для всех шин, среда ругается, что нет клока ассоциируемого с шиной. Как это правильно разрулить? если у различных шин одинаковый клок и ресет, то нужно это напрямую указать в соответствующих интерфейсах _CLK и _RST, с которыми ассоциированы необходимые шины 16 часов назад, Vadim_nsk сказал: 2. Во всех автоматически сгенерированных корках, асинхронный сброс обрабатывается как синхронный. Это намеренно так делается? Даже название сигнала "aresetn", но во всех процессах в списке чувствительности только клок. Где можно прочитать про причину и рекомендации в своем коде использовать именно такое описание сброса? по спецификациям сброс может обрабатываться как синхронный и как асинхронный, но с учётом требований: "The reset signal can be asserted asynchronously, but deassertion must be synchronous after the rising edge of ACLK." Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dxp 32 6 августа, 2022 Опубликовано 6 августа, 2022 · Жалоба 3 часа назад, stealthisname сказал: "TDATA_WIDTH must be an integer number of bytes and is recommended to be 8, 16, 32, 64, 128, 256, 512 or 1024-bits." Это AXIS. А для AXI? И как закодировать ширину, отличную от количества байт в степени двойки, с помощью сигнала AWSIZE? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
stealthisname 7 6 августа, 2022 Опубликовано 6 августа, 2022 · Жалоба 1 час назад, dxp сказал: Это AXIS. А для AXI? по спецификации AMBA AXI Protocol Specification для AXI (mm): "the data bus, that can be 8, 16, 32, 64, 128, 256, 512, or 1024 bits wide" данные действительно могут иметь отличную от 32 или 64 разрядов ширину данных для AXI и AXIS для AXI Lite данные могут иметь ширину только 32 или 64 разрядов "Two options for data bus width are supported, either 32-bit or 64-bit." Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dxp 32 6 августа, 2022 Опубликовано 6 августа, 2022 · Жалоба 3 часа назад, stealthisname сказал: данные действительно могут иметь отличную от 32 или 64 разрядов ширину данных для AXI и AXIS Т.е. для AXI могут быть 32 или 64. Или 16. Или 128. Но не могут быть, например, 40. Или 24. А вот для AXIS могут. Возвращаясь к исходному вопросу, ширина шины для AXI в корках получается 32 или 64 (или любая другая, но равная количеству байт по степени двойки, т.е. не произвольная). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
slkhome 0 8 августа, 2022 Опубликовано 8 августа, 2022 · Жалоба On 8/5/2022 at 4:15 PM, Vadim_nsk said: AXI-Stream имеет ширину данных 32 или 64 разряда. А если мне надо 256 бит и все эти данные поступают от одного источника с одним клоком, как это правильно описать? Т.е. мне защелкивать каждые 32 бита от своего клока, надеясь, что снаружи на эти несколько входов не подали разные клоки? Но если я указываю один клок для всех шин, среда ругается, что нет клока ассоциируемого с шиной. Как это правильно разрулить? Присоединяюсь к вышеописанным рекомендациям и еще - Пишите гайды для своих корок. Это ну оч. полезно! И верояно только Вы и будете их пользовать, судя по Вашим вопросам. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Vadim_nsk 0 10 августа, 2022 Опубликовано 10 августа, 2022 · Жалоба On 8/6/2022 at 12:41 PM, stealthisname said: если у различных шин одинаковый клок и ресет, то нужно это напрямую указать в соответствующих интерфейсах _CLK и _RST, с которыми ассоциированы необходимые шины Он не позволяет выбрать один клок для двух разных интерфейсов. Перенес созданный s_m_axis_aclk: s_m_axis_aclk : in std_logic; -- Ports of Axi Slave Bus Interface S00_AXIS s00_axis_aresetn : in std_logic; s00_axis_tready : out std_logic; s00_axis_tdata : in std_logic_vector(C_S00_AXIS_TDATA_WIDTH-1 downto 0); s00_axis_tstrb : in std_logic_vector((C_S00_AXIS_TDATA_WIDTH/8)-1 downto 0); s00_axis_tlast : in std_logic; s00_axis_tvalid : in std_logic; -- Ports of Axi Master Bus Interface M00_AXIS m00_axis_aresetn : in std_logic; m00_axis_tvalid : out std_logic; m00_axis_tdata : out std_logic_vector(C_M00_AXIS_TDATA_WIDTH-1 downto 0); m00_axis_tstrb : out std_logic_vector((C_M00_AXIS_TDATA_WIDTH/8)-1 downto 0); m00_axis_tlast : out std_logic; m00_axis_tready : in std_logic в интерфейс S00_AXIS_ACLK: При этом, создал интерфейс M00_AXIS_ACLK, но там этого сигнала в списке активных нет: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Vadim_nsk 0 10 августа, 2022 Опубликовано 10 августа, 2022 · Жалоба Блин, не тот сигнал стрелкой указал. Этот для AXI-Lite. Но s_axis_aclk тоже неактивен... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Vadim_nsk 0 10 августа, 2022 Опубликовано 10 августа, 2022 · Жалоба Еще одну странность обнаружил. Я для тестирования системы подключил все к Microblaze, у которого есть вход и выход AXI-Stream, что довольно удобно. Но шина 32 разрядная, а у меня 256 бит (поменял параметра AXIS_TDATA_WIDTH на 256). Нашел компонент AXI4-Stream Data Width Converter, поставил на входе и выходе своего компонента и вот что вижу: Довольно странный размер TDATA на входе и выходе данного конвертера и странное сообщение. Я действительно не трогал параметр TDATA_NUM_BYTES, наивно полагая, что он вычислится автоматически из S[M]00_AXIS_TDATA_WIDTH, который я как раз меняю с 32 на 256. Мне еще и количество байт самому считать? Самое интересное, что при всем этом он еще и , что настораживает... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться