使用BRAM实现数据延迟

目录

为何使用BRAM实现延时

实现与仿真


为何使用BRAM实现延时

在一些设计中需要对数据进行多个周期的延时。延时方法有多种,比如使用SLICEM生成移位寄存器,或者使用FF。但是对于大位宽、深延时的数据,使用上述方法会消耗过多资源,功耗也较大。此时使用BRAM进行延时将是更优的选择。

实现与仿真

下面是简单的实现和仿真代码。其中DELAY_LEV是需要的延时周期数,READ_LATENCY是RAM的读延时,WRITE_LATENCY是RAM写入延时(在本例中是指top文件中对输入din进行的同步处理)。需要注意的是需要将RAM的工作模式设置为Read First,这样可以保证从当前地址读出的数据是之前存储的数据,而不是写入数据。当延时模块开始工作时,在addr第一次累加并归零之前,从RAM读出的都是RAM中的初始数据。只有从第二轮地址累加开始后,从RAM读出的才是需要延时的数据。所以通过控制addr在何处归零,即可实现不同的延时级数。

由于本例中的RAM通过调用XPM库实现,所以可以进一步增加parameter参数,使延时功能参数化程度进一步提高。

`timescale 1ns / 1ps
//
// Company: 
// Engineer: 
//   Yinye
// Create Date: 2020/02/26 22:04:12
// Design Name: 
// Module Name: top
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//


module top
#(  parameter DELAY_LEV         = 10,
    parameter READ_LATENCY      = 1,
    parameter WRITE_LATENCY     = 1)
(
    input               clk,
    input   [31: 0]     din,

    output  [31: 0]     dout
    );

reg     [31: 0]     din_r=32'h0;
reg     [ 5: 0]     addr=6'h0;
wire    [31: 0]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值