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

 
 
 
Reply to this topicStart new topic
> Шина 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
blackfin
сообщение Apr 28 2018, 06:39
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 3 040
Регистрация: 18-04-05
Пользователь №: 4 261



Цитата(Vadim_nsk @ Apr 28 2018, 09:34) *
Есть шина AXI, у нее есть два сигнала ARst и AClk. Как я это понимаю, AXI-master может жить и работать в одном clock-домене, а AXI-slave в другом (клоки то ассинхронные).

Ошибаетесь. AXI-master и AXI-slave могут жить и работать только(!) в одном clock-домене. Для реализации CDC обычно используют FIFO.
Go to the top of the page
 
+Quote Post
_Ivan_33
сообщение Apr 28 2018, 07:16
Сообщение #3


fpga designer
****

Группа: Свой
Сообщений: 610
Регистрация: 20-04-08
Из: Зеленоград
Пользователь №: 36 928



Используйте интерконнекты, там обычно эти вопросы решаются.


--------------------
Go to the top of the page
 
+Quote Post
MegaVolt
сообщение Apr 28 2018, 07:17
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 730
Регистрация: 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
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 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
Сообщение #6


Знающий
****

Группа: Свой
Сообщений: 730
Регистрация: 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
Сообщение #7


Участник
*

Группа: Участник
Сообщений: 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
Сообщение #8


Знающий
****

Группа: Свой
Сообщений: 730
Регистрация: 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
Сообщение #9


Участник
*

Группа: Участник
Сообщений: 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
one_eight_seven
сообщение Apr 28 2018, 08:11
Сообщение #10


Знающий
****

Группа: Участник
Сообщений: 914
Регистрация: 3-10-08
Из: Москва
Пользователь №: 40 664



Цитата
Просто мне кажется, что буква "А" в начале названий некоторых сигналов и такой явный акцент в презентациях 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".
Go to the top of the page
 
+Quote Post
Vadim_nsk
сообщение Apr 28 2018, 08:14
Сообщение #11


Участник
*

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



Спасибо, все стало намного понятней
Go to the top of the page
 
+Quote Post
MegaVolt
сообщение Apr 28 2018, 08:25
Сообщение #12


Знающий
****

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



Цитата(Vadim_nsk @ Apr 28 2018, 11:03) *
В данный момент это 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

Следовательно интерконнект может работать на своей частоте. И синхронизироваться как с мастером так и со слейвом. Т.е. Частоты мастера, интерконнекта и слейва могут быть разные.
Что ещё не понятно я не знаю.


Я уже сам разобрался пока объяснял sm.gif
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 17th August 2018 - 18:05
Рейтинг@Mail.ru


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