Jump to content
    

Клоки AXI-шины в пользовательком IP

1. При создании пользовательского IP с различными AXI-шинами, автоматически к каждой шине создается свой клок. Внутри потом для каждой шины создается отдельный компонент обработки сигналов данной шины со своим клоком. Я еще понимаю, что есть AXI-Interconnect, который увязывает несколько клоков, но для чего это в обычной жизни?

AXI-Stream имеет ширину данных 32 или 64 разряда. А если мне надо 256 бит и все эти данные поступают от одного источника с одним клоком, как это правильно описать? Т.е. мне защелкивать каждые 32 бита от своего клока, надеясь, что снаружи на эти несколько входов не подали разные клоки? Но если я указываю один клок для всех шин, среда ругается, что нет клока ассоциируемого с шиной. Как это правильно разрулить?

Видимо, сказываются повадки программиста, где хочется строгой типизации, исключающей внешние ошибки...

2. Во всех автоматически сгенерированных корках, асинхронный сброс обрабатывается как синхронный. Это намеренно так делается? Даже название сигнала "aresetn", но во всех процессах в списке чувствительности только клок. Где можно прочитать про причину и рекомендации в своем коде использовать именно такое описание сброса?

3. При попытке описать AXI-шину с шириной отличной от 32/64 среда выдает ошибку. Но при этом, я могу настроить арифметические корки с AXI-шиной, где ширина входных параметров и результата будет отличаться от 32/64. На самом деле нет такого строгого ограничения?

Share this post


Link to post
Share on other sites

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.

Первый вопрос не понял.

Share this post


Link to post
Share on other sites

мне для понимания работы с 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."

image.thumb.png.b631a89a6249109e6140103f7eafbff0.png

если передаётся 256 бит с одного источника и если источник позволяет не дробить общую шину на отдельные, то нужно указать ширину данных 256 бит

например вот так

image.thumb.png.3c9fba6e1158de1c233cec497edd8aa2.png

image.thumb.png.ef8c52f3a29876cbf5b93f497b36ee5f.png

 

15 часов назад, Vadim_nsk сказал:

Но если я указываю один клок для всех шин, среда ругается, что нет клока ассоциируемого с шиной. Как это правильно разрулить?

если у различных шин одинаковый клок и ресет, то нужно это напрямую указать в соответствующих интерфейсах _CLK и _RST, с которыми  ассоциированы необходимые шины

image.thumb.png.8b97b8dfc4d0d5c9a2b08c050c52e47d.png

 

 

16 часов назад, Vadim_nsk сказал:

2. Во всех автоматически сгенерированных корках, асинхронный сброс обрабатывается как синхронный. Это намеренно так делается? Даже название сигнала "aresetn", но во всех процессах в списке чувствительности только клок. Где можно прочитать про причину и рекомендации в своем коде использовать именно такое описание сброса?

по спецификациям сброс может обрабатываться как синхронный и как асинхронный, но с учётом требований:

"The reset signal can be asserted asynchronously, but deassertion must be synchronous after the rising edge of ACLK."

image.thumb.png.ad20cc3df55056f7393e6e1c5f856693.png

 

 

 

 

Share this post


Link to post
Share on other sites

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?

Share this post


Link to post
Share on other sites

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"

image.thumb.png.46ec79ac430ae2aa6b4c4726c1286b4d.png

данные действительно могут иметь отличную от 32 или 64 разрядов ширину данных для AXI и AXIS

для AXI Lite данные могут иметь ширину только 32 или 64 разрядов

"Two options for data bus width are supported, either 32-bit or 64-bit."

image.thumb.png.2f9f85280274823f50b070cd1baf6362.png

 

Share this post


Link to post
Share on other sites

3 часа назад, stealthisname сказал:

данные действительно могут иметь отличную от 32 или 64 разрядов ширину данных для AXI и AXIS

Т.е. для AXI могут быть 32 или 64. Или 16. Или 128. Но не могут быть, например, 40. Или 24. А вот для AXIS могут. Возвращаясь к исходному вопросу, ширина шины для AXI в корках получается 32 или 64 (или любая другая, но равная количеству байт по степени двойки, т.е. не произвольная).

Share this post


Link to post
Share on other sites

On 8/5/2022 at 4:15 PM, Vadim_nsk said:

AXI-Stream имеет ширину данных 32 или 64 разряда. А если мне надо 256 бит и все эти данные поступают от одного источника с одним клоком, как это правильно описать? Т.е. мне защелкивать каждые 32 бита от своего клока, надеясь, что снаружи на эти несколько входов не подали разные клоки? Но если я указываю один клок для всех шин, среда ругается, что нет клока ассоциируемого с шиной. Как это правильно разрулить?

Присоединяюсь к вышеописанным рекомендациям и  еще  - Пишите гайды для своих корок. Это ну оч. полезно! И верояно только Вы и будете их пользовать, судя по Вашим вопросам.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...