Как сделать ACLK-ориентированную передачу данных

В спеке потока AXIS ACLK определяется как:

Глобальный тактовый сигнал. Все сигналы дискретизируются по переднему фронту ACLK.

Это означает, что предполагается, что ведущий и ведомый AXIS получают один и тот же ACLK. Можете ли вы помочь понять следующее:
1) Если на главном и подчиненном блоках AXIS имеется ACLK, он остается под ответственностью дизайнера. Спек не устанавливает никаких ограничений на это. Правильно ли мое понимание?
2) Передача данных должна соответствовать центру ACLK. Поэтому разработчик должен создать мастер AXIS для отправки данных, выровненных по центру часов. Правильно?
3) Как сделать ACLK-ориентированную передачу данных? Представьте, что у вас есть глобальные часы во всей системе, чтобы данные, передаваемые по центру часов, были выровнены по этим данным, вам нужно сгенерировать новые часы, которые смещены по фазе влево от ваших глобальных часов. Есть идеи, как мы можем сделать это в FPGA?

1 ответ

Решение

Я думаю, что проблема в вашем понимании английского языка.
-центрическое не то же самое, что центр (или центр).

Здесь Centric означает "Самое важное, где все вращается вокруг". Это не означает, что данные находятся в середине (в центре) часов.

Таким образом, в системе AXI/AMBA вы должны убедиться, что все компоненты используют один и тот же тактовый сигнал, и вся логика должна работать с нарастающего фронта тактовой частоты. Это то же самое стандартное требование всей синхронной логики.

Теперь, чтобы ответить на ваши вопросы:

1) Если на главном и подчиненном блоках AXIS имеется ACLK, он остается под ответственностью дизайнера. Спек не устанавливает никаких ограничений на это. Правильно ли мое понимание?

Вы не должны иметь перекос часов. Если у вас есть, у вас большие проблемы, и да, вы должны решить это. Избегайте этого любой ценой!

2) Передача данных должна соответствовать центру ACLK. Поэтому разработчик должен создать мастер AXIS для отправки данных, выровненных по центру часов. Правильно?

Нет. Все идет по нарастающей грани часов. Это означает, что данные начнут изменяться вскоре после этого повышающегося тактового сигнала. Вы можете видеть это на всех временных диаграммах, которые находятся в стандарте AXI/AMBA.

3) Как сделать ACLK-ориентированную передачу данных? Представьте, что у вас есть глобальные часы во всей системе, чтобы данные, передаваемые по центру часов, были выровнены по этим данным, вам нужно сгенерировать новые часы с фазовым сдвигом влево от ваших глобальных часов. Есть идеи, как мы можем сделать это в FPGA?

Все, что вы делаете, это везде используете один и тот же сигнал ACLK. Не сдвигайте часы, не генерируйте новые часы.

Вот некоторые модули Verilog, которые я разработал:

module ahbl_arbiter
#(parameter MA   = 4    // Number of masters 2..8
)
(  input                clk,       // System clock
   input                reset_n,   // System reset
   input                clken,     // Clock enable  
....


module ahbl_splitter
#(parameter SL   = 4,   // Number of slaves 2..32
            L2BS = 10   // Log 2 of block size 10 = 1K
)
(  input              clk,       // System clock
   input              reset_n,   // System reset
   input              clken,     // Clock enable
....

module apb_bridge
#(parameter
   NS   = 8,     // Number of slaves
   L2BS = 10,    // Log2 Address block assigned each peripheral
   REG  = 1'b0   // Register in rdata return path
)
(  input                  clk,       // System clock
   input                  reset_n,   // System reset
   input                  clken,     // Clock enable
...

Если вы используете их, они все имеют одинаковые часы:

ahbl_arbiter
ahbl_arbiter_0 (
     .clk        (aclk),        // System clock
     .reset_n    (reset_n),     // System reset
     .clken      (clken),       // Clock enable
....

apb_bride
apb_bride_0 (
      .clk        (aclk),        // System clock
      .reset_n    (reset_n),     // System reset
      .clken      (clken),       // Clock enable
....

ahbl_splitter
ahbl_splitter_0 (
      .clk       (aclk),        // System clock 
      .reset_n   (reset_n),     // System reset 
      .clken     (clken),       // Clock enable 
....
Другие вопросы по тегам