如何进行ACLK中心数据传输

时间:2018-05-20 03:15:25

标签: fpga amba

在AXIS流speck中,ACLK定义为:

  

全球时钟信号。所有信号都在上升沿采样   ACLK。

这意味着假设AXIS主站和从站正在接收相同的ACLK。 能否帮助您理解以下内容:
1)如果AXIS主站和从站块上存在ACLK转换,则由设计人员负责。 Speck没有对此设置任何限制。我的理解是对的吗? 2)数据传输应该是ACLK中心对齐的。因此,开发人员应使AXIS主站发送时钟中心对齐的数据。对吗?
3)如何进行ACLK中心数据传输?想象一下,你在整个系统中都有全局时钟,要使数据传输时钟中心与那些数据对齐,你需要生成一个新的时钟,它的相位从全局时钟偏移。有什么想法我们如何在FPGA中做到这一点?

1 个答案:

答案 0 :(得分:1)

我认为问题出在你对英语的理解上 - 中心与中心(或中心)不同。

中心意味着“最重要的,一切都围绕着” 意味着数据位于时钟的中间(中间)。

因此,在AXI / AMBA系统中,您必须确保所有组件使用相同的时钟信号,并且所有逻辑应从上升时钟边沿运行。这与所有同步逻辑的要求相同,标准。

现在回答你的问题:

  

1)如果AXIS主站和从站块上存在ACLK转换,则由设计人员负责。 Speck没有对此设置任何限制。我的理解是对的吗?

你应该时钟歪斜。如果你有,你有深陷困境,是的,你必须解决这个问题。不惜一切代价避免它!

  

2)数据传输应该是ACLK中心对齐的。因此,开发人员应使AXIS主站发送时钟中心对齐的数据。正确?

没有。一切都是时钟上升的时钟。这意味着数据将在时钟上升沿之后不久开始变化。您可以在AXI / AMBA标准的所有时序图中看到这一点。

  

3)如何进行ACLK中心数据传输?想象一下,你在整个系统中都有全局时钟,要使数据传输时钟中心与那些数据对齐,你需要生成一个新的时钟,它的相位从全局时钟偏移。有什么想法我们如何在FPGA中做到这一点?

您所做的只是在任何地方使用相同的ACLK信号。 移动时钟,生成新时钟。

以下是我设计的一些Verilog模块:

 # Data
 pval.vec <- c(7.777067e-12, 8.345999e-16, 4.341658e-17, 5.984561e-15 ,1.711345e-15)

 cat(sprintf("le mean value est %e",median(pval.vec)))
 #le mean value est 1.711345e-15


 #One can specify number of digits after decimal. e.g. for 2 digits
 cat(sprintf("le mean value est %.2e",median(pval.vec)))
 #le mean value est 1.71e-15

如果你使用它们,它们都有相同的时钟:

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
...