ram_style的使用

一.概述

        博主在做双令牌桶的算法模块时,用到了比较大的寄存器,综合的时候实现该寄存器是用的LUT资源和FF触发器,FF触发器板子资源够用,但是LUT资源不够用,所以就想着用BRAM实现这个寄存器块,但是模块中有3组这样的寄存器,只有一组寄存器对时序要求不高,比较宽松的时序要求让我首先对它下手。小记以下遇到的问题。

二.使用及代码

        对于没有用BRAM实现的结果。该模块LUT资源使用11000多,FF触发器使用2600多。

       模块中用到了这样的寄存器,reg [31:0] counting_drop_red [127:0]。如果想要将这个reg改为BRAM,那么就要编写符合RAM规范的代码并且使用综合命令ram_style="block",如果要使用DRAM也类似。以下是该寄存器对应的BRAM代码。值得一提的是,我一开始引入复位对RAM进行清0操作,可是这是不符合RAM规范的,所以查看综合结果,并没有看到该寄存器综合成BRAM,然后改成初始值{default:0}的形式,才综合成BRAM。

module CountArray_as_RAM(
	input clk,

	input ena,
	input wea,
	input [4:0]addra,
	input [31:0]dina,

	input enb,
	input [4:0]addrb,
	// input rst,
	output reg [31:0]doutb
);	

(* ram_style="block" *)reg [31:0] counting_drop_red [31:0] = {default:0};

always @(posedge clk)begin //写
    if (ena)begin
        if (wea) 
        	counting_drop_red[addra] <= dina;
    end
end                                                                      

always @(posedge clk)
    if (enb) doutb <= counting_drop_red[addrb];  //读

endmodule

 下图是现在的资源使用量:LUT+FF触发器+BRAM。

        总结:可以看到LUT资源使用明显减少,FF触发器资源明显减少,实现这个寄存器的LUT和FF触发器被BRAM资源代替。

  • 3
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值