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