BRAM 写模式解释 (write_first, read_first, no_change)

BRAM写模式一共有三种,分别是write_first、read_first和no_change。

对于BRAM的一个端口,以PORTA为例,一般会有CLKA PORTA 时钟信号、WEA PORTA写使能信号、DINA PORTA写数据、ADDRA PORTA读写地址、DOUTA PORTA读输出 以及 ENA PORTA使能。

WRITE_FIRST MODE

对于write_first模式,BRAM在时钟上升沿1准备将数据16‘h1111写到地址8’hbb处,在Delay不到1个时钟周期的时间后,DOUTA变为了16'h1111,所以在时钟上升沿1,BRAM同时进行了对地址8’hbb的写操作和读操作,且读出的值为最新写入的值也就是16‘h1111。

用verilog来描述上述行为(CSDN为什么没有verilog格式!!):

always @(posedge clka) begin
    if(ena) begin
        if(wea) begin
            BRAM[addra] <= dina;
            douta       <= dina;
        end
        else begin
            douta <= BRAM[addra];
        end
    end
end

READ_FIRST MODE

对于read_first模式,BRAM在时钟上升沿2准备将数据16‘h1111写到地址8’hbb处,在Delay不到1个时钟周期的时间后,DOUTA变为了old MEM(bb),即地址8'hbb的旧值,所以在时钟上升沿2,BRAM同时进行了对地址8’hbb的写操作和读操作,但读出的值为先前的旧值而非最新的16'h1111。

用verilog来描述上述行为:

always @(posedge clka) begin
    if(ena) begin
        if(wea) begin
            BRAM[addra] <= dina;
            douta       <= BRAM[addra];
        end
        else begin
            douta <= BRAM[addra];
        end
    end
end

NO_CHANGE MODE

对于no_change模式,WEA和ENA都为高时,BRAM在时钟上升沿3准备将数据16‘h1111写到地址8’hbb处,DOUTA没有变化,所以在时钟上升沿3,BRAM仅对地址8’hbb进行了写操作,只有当WEA拉低时才会进行读操作,即WEA高为写低为读。

用verilog来描述上述行为:

always @(posedge clka) begin
    if(ena) begin
        if(wea) BRAM[addra] <= dina;
        else    douta       <= BRAM[addra];
    end
end

总结

1. write_first mode,wea拉高时,BRAM会同时执行读写操作,读出来的值为最新写入的值。

2. read_fisrt mode,wea拉高时,BRAM会同时执行读写操作,读出来的值为未更新的旧值。

3. no_change mode, wea拉高时, BRAM只会执行写操作,wea拉低时,BRAM才执行读操作。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值