Как сделать ACLK-ориентированную передачу данных - PullRequest
0 голосов
/ 20 мая 2018

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

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

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

1 Ответ

0 голосов
/ 20 мая 2018

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

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

Таким образом, в системе 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 
....
...