Vadim_nsk 0 28 апреля, 2018 Опубликовано 28 апреля, 2018 · Жалоба Собственно вопрос в следующем. Есть шина AXI, у нее есть два сигнала ARst и AClk. Как я это понимаю, AXI-master может жить и работать в одном clock-домене, а AXI-slave в другом (клоки то ассинхронные). Это им позволяют сигналы валидности адреса, захвата адреса, валидности данных и захвата данных. Но позвольте... адрес и сигнал валидности адреса выставляется одновременно, следовательно, один из разрядов шины адреса может оказаться в том самом метастабильном состоянии, т.к. шина AXI позволяет сигналам валидности и захвата появиться одновременно или сигналу захвата уже быть установленным. Такая же ситуация и с шиной данных. Так почему там не освещаются вопросы защиты от метастабильного состояния. К сожалению, тут на форуме в поиске нельзя указывать слова из 3-х букв, поэтому AXI не ищется, а в темах о метастабильности не затрагивается шина AXI. Что позволяет шине быть особенной и не иметь единного клока? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
blackfin 11 28 апреля, 2018 Опубликовано 28 апреля, 2018 · Жалоба Есть шина AXI, у нее есть два сигнала ARst и AClk. Как я это понимаю, AXI-master может жить и работать в одном clock-домене, а AXI-slave в другом (клоки то ассинхронные). Ошибаетесь. AXI-master и AXI-slave могут жить и работать только(!) в одном clock-домене. Для реализации CDC обычно используют FIFO. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_Ivan_ 0 28 апреля, 2018 Опубликовано 28 апреля, 2018 · Жалоба Используйте интерконнекты, там обычно эти вопросы решаются. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MegaVolt 22 28 апреля, 2018 Опубликовано 28 апреля, 2018 · Жалоба Что позволяет шине быть особенной и не иметь единного клока?Я так понимаю AXI_interconnect занимается согласованием доменов. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Vadim_nsk 0 28 апреля, 2018 Опубликовано 28 апреля, 2018 · Жалоба Я так понимаю AXI_interconnect занимается согласованием доменов. В мой Slave компонент приходят такие сигналы: S_AXI_ACLK : in std_logic; S_AXI_ARESETN : in std_logic; S_AXI_AWADDR : in std_logic_vector(C_S_AXI_ADDR_WIDTH-1 downto 0); S_AXI_AWVALID : in std_logic; S_AXI_WDATA : in std_logic_vector(C_S_AXI_DATA_WIDTH-1 downto 0); S_AXI_WSTRB : in std_logic_vector((C_S_AXI_DATA_WIDTH/8)-1 downto 0); S_AXI_WVALID : in std_logic; S_AXI_BREADY : in std_logic; S_AXI_ARADDR : in std_logic_vector(C_S_AXI_ADDR_WIDTH-1 downto 0); S_AXI_ARVALID : in std_logic; S_AXI_RREADY : in std_logic; S_AXI_ARREADY : out std_logic; S_AXI_RDATA : out std_logic_vector(C_S_AXI_DATA_WIDTH-1 downto 0); S_AXI_RRESP : out std_logic_vector(1 downto 0); S_AXI_RVALID : out std_logic; S_AXI_WREADY : out std_logic; S_AXI_BRESP : out std_logic_vector(1 downto 0); S_AXI_BVALID : out std_logic; S_AXI_AWREADY : out std_logic Предположим, что S_AXI_ACLK имеет частоту 100МГц Вы хотите сказать, что я спокойно могу в своем компоненте работать на частоте 23.96МГц с этими сигналами и AXI_interconnect все разрулит? В нем уже есть 2 ряда D-триггеров в ту и другую сторону? Собственно, у меня тогда три вопроса. 1. Если я вижу в названии сигналов впереди букву "А", я должен относиться к этому сигналу как к асинхронному и пропускать через 2 D-триггера работающие от моего клока? 2. Должен ли я свои выходные сигналы, сформированные от моего клока приводить к частоте AXI чреез 2 D-триггера или это забота AXI_interconnect? 3. Могу ли я ничего этого не делать, строя свой компонент таким образом, чтобы он целиком работал от частоты AXI? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MegaVolt 22 28 апреля, 2018 Опубликовано 28 апреля, 2018 · Жалоба Предположим, что S_AXI_ACLK имеет частоту 100МГц Вы хотите сказать, что я спокойно могу в своем компоненте работать на частоте 23.96МГц с этими сигналами и AXI_interconnect все разрулит? В нем уже есть 2 ряда D-триггеров в ту и другую сторону? Нет. Частота 23.96МГц поступает на interconnect и уже из него она же попадает на AXI_CLK вашего блока. А вообще на интерконнект есть даташит и можно почитать его чтобы снять все сомнения. 1. Если я вижу в названии сигналов впереди букву "А", я должен относиться к этому сигналу как к асинхронному и пропускать через 2 D-триггера работающие от моего клока?Как я понимаю нет.2. Должен ли я свои выходные сигналы, сформированные от моего клока приводить к частоте AXI чреез 2 D-триггера или это забота AXI_interconnect?переход между доменами делает interconnect3. Могу ли я ничего этого не делать, строя свой компонент таким образом, чтобы он целиком работал от частоты AXI?Да при том что частота AXI для него будет ваши 24MГц Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Vadim_nsk 0 28 апреля, 2018 Опубликовано 28 апреля, 2018 · Жалоба Как я понимаю нет.переход между доменами делает interconnect Да при том что частота AXI для него будет ваши 24MГц S_AXI_ACLK : in std_logic; это сигнал от AXI_Interconnect и он имеет частоту 100МГц. Я не могу подать свою частоту на шину, т.к. компонент slave и частота шины для него является входным параметром. Вся логика компонента завязана именно на частоте 23.96МГц, а управление осуществляется с шины AXI-lite. Просто мне кажется, что буква "А" в начале названий некоторых сигналов и такой явный акцент в презентациях Zynq, Microblaze на то, что эти сигналы являются ассинхронными служат какой-то цели. Ведь если убрать из названий эти буквы и акцент на ассинхронность, мне также придется переносить все входные сигналы управления в мой клок-домен, а выходные в клок-домен шины. Но в то же время, у буду "знать", что строя свой компонент синхронно с частотой шины, мне вообще не придется ставить пересинхронизацию. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MegaVolt 22 28 апреля, 2018 Опубликовано 28 апреля, 2018 · Жалоба S_AXI_ACLK : in std_logic; это сигнал от AXI_Interconnect и он имеет частоту 100МГц. Я не могу подать свою частоту на шину, т.к. компонент slave и частота шины для него является входным параметром. В какой среде вы работаете? Какая версия interconnecta? Частоту нужно подвать не на шину а на интерконнект. Т.е. на интерконнект идут две частоту и 100 и 24. Из интерконнекта на ваш слейв идёт одна частота 24. Так по крайней мере в Vivado 17.4 Просто мне кажется, что буква "А" в начале названий некоторых сигналов и такой явный акцент в презентациях Zynq, Microblaze на то, что эти сигналы являются ассинхронными служат какой-то цели.Наверное.... деталей не знаю. Я вообще на это внимание не обрашал :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Vadim_nsk 0 28 апреля, 2018 Опубликовано 28 апреля, 2018 · Жалоба В какой среде вы работаете? Какая версия interconnecta? В данный момент это ISE14.7 и AXI Interconnect 1.06.a Т.к. в ISE генерирование slave компонента делает убого и через шину IPIF (кажется так называется), я сделал иначе, запустил VIVADO 2016.4, сгенерировал пример slave-компонента в нем и перетащил исходники в ISE. Все работает, но вопросы остались открытыми. Нарыл вот такой документ: https://www.xilinx.com/support/documentatio...rence_guide.pdf все замечательно описано, но вопросы никуда не делись :-) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
one_eight_seven 3 28 апреля, 2018 Опубликовано 28 апреля, 2018 · Жалоба Просто мне кажется, что буква "А" в начале названий некоторых сигналов и такой явный акцент в презентациях Zynq, Microblaze на то, что эти сигналы являются ассинхронными служат какой-то цели. Но в шине AXI это никоим образом не так. Это вообще, не Xilinx, это ARM AMBA. Поэтому: 1. Если я вижу в названии сигналов впереди букву "А", я должен относиться к этому сигналу как к асинхронному и пропускать через 2 D-триггера работающие от моего клока? Нет. ACLK - это: Each AXI component uses a single clock signal, ACLK. All input signals are sampled on the rising edge of ACLK. All output signal changes must occur after the rising edge of ACLK. On master and slave interfaces there must be no combinatorial paths between input and output signals. ARESETn - это, действительно, асинхронный сигнал сброса. Устанавливается асинхронно, снимается синхронно с ACLK Другие буквы "A" - в сигналах ARREADY, AWREADY, AWADDR, ARADDR и т.п. - это сигналы, касающиеся адресов в каналах чтения и записи, и "A" в них означает "address". Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Vadim_nsk 0 28 апреля, 2018 Опубликовано 28 апреля, 2018 · Жалоба Спасибо, все стало намного понятней Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MegaVolt 22 28 апреля, 2018 Опубликовано 28 апреля, 2018 · Жалоба В данный момент это ISE14.7 и AXI Interconnect 1.06.a RTFM!!!! Built-in clock-rate conversion: • Each master and slave connection can use independent clock rates. • Asynchronous clock conversion (uses more storage and incurs more latency than synchronous conversion). • An asynchronous clock conversion module performs either reduction or acceleration of clock-rates by passing the channel signals through an asynchronous FIFO. S_AXI_ACLK Input!!! M_AXI_ACLK Input!!! INTERCONNECT_ACLK Input C_S_AXI_IS_ACLK_ASYNC 1 = SI slot clock is asynchronous to interconnect native clock C_M_AXI_IS_ACLK_ASYNC 1 = MI slot clock is asynchronous Следовательно интерконнект может работать на своей частоте. И синхронизироваться как с мастером так и со слейвом. Т.е. Частоты мастера, интерконнекта и слейва могут быть разные. Что ещё не понятно я не знаю. Я уже сам разобрался пока объяснял :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться