|
Шина AXI и метастабильность |
|
|
|
Apr 28 2018, 06:34
|

Участник

Группа: Участник
Сообщений: 65
Регистрация: 7-09-05
Из: г. Новосибирск
Пользователь №: 8 335

|
Собственно вопрос в следующем. Есть шина AXI, у нее есть два сигнала ARst и AClk. Как я это понимаю, AXI-master может жить и работать в одном clock-домене, а AXI-slave в другом (клоки то ассинхронные). Это им позволяют сигналы валидности адреса, захвата адреса, валидности данных и захвата данных. Но позвольте... адрес и сигнал валидности адреса выставляется одновременно, следовательно, один из разрядов шины адреса может оказаться в том самом метастабильном состоянии, т.к. шина AXI позволяет сигналам валидности и захвата появиться одновременно или сигналу захвата уже быть установленным. Такая же ситуация и с шиной данных. Так почему там не освещаются вопросы защиты от метастабильного состояния. К сожалению, тут на форуме в поиске нельзя указывать слова из 3-х букв, поэтому AXI не ищется, а в темах о метастабильности не затрагивается шина AXI. Что позволяет шине быть особенной и не иметь единного клока?
|
|
|
|
|
 |
Ответов
|
Apr 28 2018, 07:34
|

Участник

Группа: Участник
Сообщений: 65
Регистрация: 7-09-05
Из: г. Новосибирск
Пользователь №: 8 335

|
Цитата(MegaVolt @ Apr 28 2018, 14:17)  Я так понимаю 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?
|
|
|
|
|
Apr 28 2018, 07:38
|
Знающий
   
Группа: Свой
Сообщений: 779
Регистрация: 3-01-05
Из: Минск
Пользователь №: 1 783

|
Цитата(Vadim_nsk @ Apr 28 2018, 10:29)  Предположим, что S_AXI_ACLK имеет частоту 100МГц Вы хотите сказать, что я спокойно могу в своем компоненте работать на частоте 23.96МГц с этими сигналами и AXI_interconnect все разрулит? В нем уже есть 2 ряда D-триггеров в ту и другую сторону? Нет. Частота 23.96МГц поступает на interconnect и уже из него она же попадает на AXI_CLK вашего блока. А вообще на интерконнект есть даташит и можно почитать его чтобы снять все сомнения. Цитата(Vadim_nsk @ Apr 28 2018, 10:34)  1. Если я вижу в названии сигналов впереди букву "А", я должен относиться к этому сигналу как к асинхронному и пропускать через 2 D-триггера работающие от моего клока? Как я понимаю нет. Цитата 2. Должен ли я свои выходные сигналы, сформированные от моего клока приводить к частоте AXI чреез 2 D-триггера или это забота AXI_interconnect? переход между доменами делает interconnect Цитата 3. Могу ли я ничего этого не делать, строя свой компонент таким образом, чтобы он целиком работал от частоты AXI? Да при том что частота AXI для него будет ваши 24MГц
|
|
|
|
|
Apr 28 2018, 07:50
|

Участник

Группа: Участник
Сообщений: 65
Регистрация: 7-09-05
Из: г. Новосибирск
Пользователь №: 8 335

|
Цитата(MegaVolt @ Apr 28 2018, 14:38)  Как я понимаю нет.переход между доменами делает interconnect Да при том что частота AXI для него будет ваши 24MГц S_AXI_ACLK : in std_logic; это сигнал от AXI_Interconnect и он имеет частоту 100МГц. Я не могу подать свою частоту на шину, т.к. компонент slave и частота шины для него является входным параметром. Вся логика компонента завязана именно на частоте 23.96МГц, а управление осуществляется с шины AXI-lite. Просто мне кажется, что буква "А" в начале названий некоторых сигналов и такой явный акцент в презентациях Zynq, Microblaze на то, что эти сигналы являются ассинхронными служат какой-то цели. Ведь если убрать из названий эти буквы и акцент на ассинхронность, мне также придется переносить все входные сигналы управления в мой клок-домен, а выходные в клок-домен шины. Но в то же время, у буду "знать", что строя свой компонент синхронно с частотой шины, мне вообще не придется ставить пересинхронизацию.
|
|
|
|
|
Apr 28 2018, 07:58
|
Знающий
   
Группа: Свой
Сообщений: 779
Регистрация: 3-01-05
Из: Минск
Пользователь №: 1 783

|
Цитата(Vadim_nsk @ Apr 28 2018, 10:50)  S_AXI_ACLK : in std_logic; это сигнал от AXI_Interconnect и он имеет частоту 100МГц. Я не могу подать свою частоту на шину, т.к. компонент slave и частота шины для него является входным параметром. В какой среде вы работаете? Какая версия interconnecta? Частоту нужно подвать не на шину а на интерконнект. Т.е. на интерконнект идут две частоту и 100 и 24. Из интерконнекта на ваш слейв идёт одна частота 24. Так по крайней мере в Vivado 17.4 Цитата Просто мне кажется, что буква "А" в начале названий некоторых сигналов и такой явный акцент в презентациях Zynq, Microblaze на то, что эти сигналы являются ассинхронными служат какой-то цели. Наверное.... деталей не знаю. Я вообще на это внимание не обрашал
|
|
|
|
|
Apr 28 2018, 08:03
|

Участник

Группа: Участник
Сообщений: 65
Регистрация: 7-09-05
Из: г. Новосибирск
Пользователь №: 8 335

|
Цитата(MegaVolt @ Apr 28 2018, 14:58)  В какой среде вы работаете? Какая версия 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 все замечательно описано, но вопросы никуда не делись :-)
|
|
|
|
Сообщений в этой теме
Vadim_nsk Шина AXI и метастабильность Apr 28 2018, 06:34 blackfin Цитата(Vadim_nsk @ Apr 28 2018, 09:34) Ес... Apr 28 2018, 06:39 _Ivan_33 Используйте интерконнекты, там обычно эти вопросы ... Apr 28 2018, 07:16      MegaVolt Цитата(Vadim_nsk @ Apr 28 2018, 11:03) В ... Apr 28 2018, 08:25 one_eight_seven ЦитатаПросто мне кажется, что буква "А" ... Apr 28 2018, 08:11 Vadim_nsk Спасибо, все стало намного понятней Apr 28 2018, 08:14
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|