2
\ \ begingroup \美元

更新1:

我的第一个方法是使用xpm_cdc_handshake宏的如下方式:

xpm_cdc_握手泛型映射(DEST_EXT_HSK => 0,——DECIMAL;0=内部握手,1=外部握手DEST_SYNC_FF => 4,——DECIMAL;INIT_SYNC_FF => 0,——DECIMAL;0=禁用模拟初始值,1=启用模拟初始值SIM_ASSERT_CHK => 0,——DECIMAL;0=禁用模拟消息,1=启用模拟消息SRC_SYNC_FF => 4,——DECIMAL;宽度=> 32——DECIMAL;port map (dest_clk => M_AXIS_ACLK,——1位输入:目标时钟。dest_req => AXIS_DestReq,——1-bit output:断言此信号表示已接收到新的dest_out数据,并已准备好由目标逻辑使用或捕获。当——DEST_EXT_HSK = 1时,一旦源握手——确认目标时钟域已经接收到传输的——数据,该信号将停止断言。当DEST_EXT_HSK = 0时,该信号在——dest_out总线有效时断言一个时钟周期。 This output is registered. dest_ack => AXIS_DestAck, -- 1-bit input: optional; required when DEST_EXT_HSK = 1 dest_out => AXIS_SyncData, -- WIDTH-bit output: Input bus (src_in) synchronized to destination clock domain. This output is registered. src_clk => Clock, -- 1-bit input: Source clock. src_rcv => OV7670_SrcRcv, -- 1-bit output: Acknowledgement from destination logic that src_in has been -- received. This signal will be deasserted once destination handshake has fully -- completed, thus completing a full data transfer. This output is registered. src_send => OV7670_SrcSend, -- 1-bit input: Assertion of this signal allows the src_in bus to be synchronized -- to the destination clock domain. This signal should only be asserted when -- src_rcv is deasserted, indicating that the previous data transfer is complete. -- This signal should only be deasserted once src_rcv is asserted, acknowledging -- that the src_in has been received by the destination logic. src_in => OV7670_SyncData -- WIDTH-bit input: Input bus that will be synchronized to the destination clock domain. );

这个想法是设计一些逻辑来填充OV7670接收缓冲区(OV7670_SyncData)并通过断言OV7670_SrcSend信号。AXI4-Stream传输逻辑等待信号AXIS_DestAck当断言该信号时,数据被同步,然后通过AXI4-Stream接口传输。


我试图实现一个OV7670相机接口与AXI4-Stream接口的数据传输。我目前的想法是实现某种FIFO或环形缓冲区来存储来自相机的数据(即一行),当FIFO满时,通过AXI4-Stream接口的数据传输开始。

但我不确定这是否是理想的方法,因为我将跨越两个时钟域(相机模块的时钟和AXI时钟),或者是否有更好的方法?

\ \ endgroup \美元
    3.
    \ \ begingroup \美元

    异步FIFO

    异步先进先出是一种理想的实现方法,可以在两个时钟域之间安全地交叉数据。

    如果你在Vivado中这么做,我建议你使用专用Vivado IP而不是设计一个。

    如果你有兴趣设计一个,这将是有用的通过这篇文章:

    卡明斯关于FIFOs的论文

    选择FIFO的深度

    你必须根据以下几点选择FIFO的深度:

    1. 在入队列端和出队列端的写操作和读操作的频率分别是什么?
    2. 有多少突发数据你要排队到FIFO。

    这是我过去用于深度计算的一个简单指南

    编辑:

    您正在尝试使用的全握手总线同步器有更少的吞吐量,但它服务于您的目的消耗更少的资源;特别是当您不需要一次性发送多个数据爆发时。如果我没记错的话,FIFO生成器要求最小值。当涉及到资源利用时,深度和因此可能是过度的。

    \ \ endgroup \美元
    2
    • \ \ begingroup \美元 谢谢Mitu Raj。我用我的第一个方法更新了我的问题xpm_cdc_handshakemakro。我也可以用这个吗?或者这个和Vivado中的FIFO生成器有什么区别? \ \ endgroup \美元- - - - - -Kampi 12月4日20时6时10分
    • \ \ begingroup \美元 我已经编辑了答案。 \ \ endgroup \美元- - - - - -Mitu拉吉 12月4日20时6点42分

    你的答案

    点击“发布您的答案”,即表示您同意我们的服务条款隐私政策而且饼干的政策

    这不是你想要的答案吗?浏览其他带标签的问题问你自己的问题