реклама на сайте
подробности

 
 
> Шина AXI и метастабильность
Vadim_nsk
сообщение Apr 28 2018, 06:34
Сообщение #1


Участник
*

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



Собственно вопрос в следующем. Есть шина AXI, у нее есть два сигнала ARst и AClk. Как я это понимаю, AXI-master может жить и работать в одном clock-домене, а AXI-slave в другом (клоки то ассинхронные). Это им позволяют сигналы валидности адреса, захвата адреса, валидности данных и захвата данных. Но позвольте... адрес и сигнал валидности адреса выставляется одновременно, следовательно, один из разрядов шины адреса может оказаться в том самом метастабильном состоянии, т.к. шина AXI позволяет сигналам валидности и захвата появиться одновременно или сигналу захвата уже быть установленным. Такая же ситуация и с шиной данных. Так почему там не освещаются вопросы защиты от метастабильного состояния. К сожалению, тут на форуме в поиске нельзя указывать слова из 3-х букв, поэтому AXI не ищется, а в темах о метастабильности не затрагивается шина AXI. Что позволяет шине быть особенной и не иметь единного клока?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
MegaVolt
сообщение Apr 28 2018, 07:17
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 779
Регистрация: 3-01-05
Из: Минск
Пользователь №: 1 783



Цитата(Vadim_nsk @ Apr 28 2018, 09:34) *
Что позволяет шине быть особенной и не иметь единного клока?
Я так понимаю AXI_interconnect занимается согласованием доменов.
Go to the top of the page
 
+Quote Post
Vadim_nsk
сообщение Apr 28 2018, 07:34
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 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?
Go to the top of the page
 
+Quote Post
MegaVolt
сообщение Apr 28 2018, 07:38
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 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Гц
Go to the top of the page
 
+Quote Post
Vadim_nsk
сообщение Apr 28 2018, 07:50
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 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 на то, что эти сигналы являются ассинхронными служат какой-то цели. Ведь если убрать из названий эти буквы и акцент на ассинхронность, мне также придется переносить все входные сигналы управления в мой клок-домен, а выходные в клок-домен шины. Но в то же время, у буду "знать", что строя свой компонент синхронно с частотой шины, мне вообще не придется ставить пересинхронизацию.
Go to the top of the page
 
+Quote Post
MegaVolt
сообщение Apr 28 2018, 07:58
Сообщение #6


Знающий
****

Группа: Свой
Сообщений: 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 на то, что эти сигналы являются ассинхронными служат какой-то цели.
Наверное.... деталей не знаю. Я вообще на это внимание не обрашал sm.gif
Go to the top of the page
 
+Quote Post
Vadim_nsk
сообщение Apr 28 2018, 08:03
Сообщение #7


Участник
*

Группа: Участник
Сообщений: 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 все замечательно описано, но вопросы никуда не делись :-)
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 30th July 2025 - 06:22
Рейтинг@Mail.ru


Страница сгенерированна за 0.014 секунд с 7
ELECTRONIX ©2004-2016