0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

RAM的两种应用:统计计数和位宽转换

sanyue7758 来源:IC的世界 2023-12-05 09:48 次阅读

应用1 统计计数

在进行模块设计时,我们经常需要统计报文的数量,以供软件(or 主机)读取,有些统计仅仅用于debug,有些统计是协议要求,有些统计是为了便于功能实现。

当需要统计的数量较多时,为了降低功耗和减少面积,我们通常采用RAM去实现。

如下案例中,统计有效数据包的个数。

假设数据中存在pkt_id,pkt_id为0~63,则ram的深度为64。pkt_id用于作为读写地址。RAM读延时为3个时钟周期。

有数据来临时,pkt_vld作为读使能,读出当前包计数rdata,三个周期后,rdata加1回写到ram。

如下图所示:需要有三个注意事项

NOTE1:需要有读写保护,因为可能出现连续4个周期内,pkt_vld为1,且pkt_id相同,此时会出现同一个周期对相同的地址进行读写,因此需要RAM需要添加读写保护模块,保证数据能够正确写入,且读出的都是最新值,否则就会出现统计错误。

NOTE2:图中既有软件读、又存在硬件读,且硬件读优先级更高,软件读优先级低,因此为了保证软件读能够在有效周期内得到响应,因此需要在主数据流上插入空拍,避免出现软件读长时间无法响应而产生超时。

wKgZomVugViATGPZAABdxDuAeHU769.png

应用2 位宽转换

在进行模块设计时,我们经常需要进行数据位宽的转换,常见的两种转换场景有同步时钟域位宽转换和异步时钟域位宽转换。本文将介绍异步时钟域位宽转换

异步时钟域的位宽转换读时钟和写时钟属于两个时钟。如下案例中,数据位宽由32bit转40bit,写时钟频率156.25MHz,读时钟频率125Mhz,写数据为32bit,读数据位宽为40bit,通过计算得到入口数据速率和出口数据速率保持一致(156.2532==40125)。

存储模块是由寄存器搭建的。那么需要多大存储模块呢?32和40的最小公倍数为160,极限场景下,只需要160bit的寄存器作为存储就够了,但是读操作通常晚于写操作,并且考虑到时钟有抖动有偏移,为了避免溢出,稍微增加一部分缓存,我们可以采用320bit作为存储模块。因此写侧32bit写10次,读侧40bit读8次,读写两侧所需的时间相等。

注意事项:写地址(wr_addr)跳转范围是09,读地址(rd_addr)跳转范围07。

wKgaomVugViAHCE3AACFx-wvlYA974.png

wKgaomVugViAIYjXAAFTzh9fxhU679.png

如图所示:

buff_array为320bit的数据存储。

vld_array为80bit的有效标志位存储:vld_array[n]为1表示buff_array[4n+3:4n]存在4bit的有效数据。

wKgaomVugViAFRVZAABOda71nBA740.png

always @(posedge wr_clk or negedge wr_rst_n) begin
  if (~wr_rst_n) begin
    buff_array  <= {DATA_FIFO_DEPTH{1'b0}};
    vld_array <= {VALID_FIFO_DEPTH{1'b0}};
  end else begin
    if (wr_en) begin
        buff_array[ wr_addr*32  +: 32]  <= wr_data_i;
        vld_array[wr_addr*8 +: 8] <= {8{wr_valid_i}};
      end
    end
  end


reg [10-1:0] rd_valid_bus;
reg [40-1:0]  rd_data_bus;
always @(*) begin
  rd_data_bus[40-1:0]  = buff_array[  rd_addr*40  +: 40];
  rd_valid_bus[10-1:0] = vld_array[rd_addr*10 +: 10];
end
integer i;
reg [40-1:0] rd_data_valid_mask;
always @(*) begin
  for(i = 0; i < 40; i = i + 1) begin
      rd_data_valid_mask[i] = rd_valid_bus[i/4];
  end
end
always @(posedge rd_clk or negedge rd_rst_n) begin
  if (~rd_rst_n) begin
    rd_data_o  <= {40{1'b0}};
    rd_valid_o <= 1'b0;
  end else begin
    if (rd_en) begin
      rd_data_o  <= rd_data_bus & rd_data_valid_mask;
      rd_valid_o <= |rd_valid_bus;
    end else begin
      rd_data_o  <= {40{1'b0}};
      rd_valid_o <= 1'b0;
    end
  end
end

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 寄存器
    +关注

    关注

    31

    文章

    5328

    浏览量

    120116
  • RAM
    RAM
    +关注

    关注

    8

    文章

    1368

    浏览量

    114565
  • 数据包
    +关注

    关注

    0

    文章

    253

    浏览量

    24373
  • 读写保护
    +关注

    关注

    0

    文章

    4

    浏览量

    5865

原文标题:ram的两种应用~统计计数和位宽转换

文章出处:【微信号:处芯积律,微信公众号:处芯积律】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    测量开关电源转换效率的两种不同方法

    本文将向大家介绍测量开关电源转换效率的两种不同方法。
    发表于 08-09 16:45 4439次阅读
    测量开关电源<b class='flag-5'>转换</b>效率的<b class='flag-5'>两种</b>不同方法

    IC设计:ram的应用-异步时钟域转换

    在进行模块设计时,我们经常需要进行数据转换,常见的两种转换场景有同步时钟域
    的头像 发表于 11-23 16:41 814次阅读
    IC设计:<b class='flag-5'>ram</b>的应用-异步时钟域<b class='flag-5'>位</b><b class='flag-5'>宽</b><b class='flag-5'>转换</b>

    OpenCV两种不同方法实现粘连大米分割计数

    测试图如下,图中有个别米粒相互粘连,本文主要演示如何使用OpenCV用两种不同方法将其分割并计数
    的头像 发表于 01-22 14:55 1573次阅读
    OpenCV<b class='flag-5'>两种</b>不同方法实现粘连大米分割<b class='flag-5'>计数</b>

    基于FPGA的HDTV视频图像灰度直方图统计算法设计

    结构,即在内存中开辟一个整数数组来进行计数,但是在FPGA 中定义数组是非常消耗资源的,尤其是当数组成员的很大时。例如用触发器来统计256 灰度的720p 图像的直方图,将消耗40
    发表于 05-14 12:37

    AVR的两种操作及比较

    AVR的两种操作的比较(域方式和移位宏方式) 测试环境如下: 硬件:AT90S2313 软件: WiinAVR gcc3.3-Os级优化(最小size)。 说明: 由于AVR不支持
    发表于 09-06 10:24

    STC12系列单片机的定时器有两种计数速率

    STC12系列单片机的定时器有两种计数速率:一是12T模式,每12个时钟加1,与传统8051单片机相同;另一是1T模式,每个时钟加1,速度是传统8051单片机的12倍。
    发表于 11-25 06:13

    ROM和RAM两种寄存器的区别是什么呢

    ROM或者对于玩电脑的人并不陌生,什么内存3G(内存就是RAM),硬盘100G(硬盘就是ROM)单片机里面和电脑一样,有ROM和RAM之分..那这两种寄存器的区别是什么呢?1 . ROM的功能:ROM的数据在程序运行的时候是不容
    发表于 03-01 07:35

    求分享S32G2内存映射系统计数器的地址

    计时器: • 提供一个系统计数器,用于实时测量时间的流逝。 在同一参考文献的 D7.1.1 节中,指出: 内存映射计数器模块,需要 此模块控制系统计数器。它有个框架: • 一个控制
    发表于 05-12 06:18

    使用IP方法的独特统计计数

      网络路由器带有用于性能监控、流量管理、网络追踪和网络安全的统计计数器。计数器用来记录数据包到达和离开的次数以及特定事件的次数,比如当网络出现坏包时。数据包的到达会使多个不同的统计
    发表于 09-18 19:52 10次下载
    一<b class='flag-5'>种</b>使用IP方法的独特<b class='flag-5'>统计</b><b class='flag-5'>计数</b>器

    FPGA设计中的RAM两种实现方法

    大家好,又到了每日学习的时间了,今天我们来聊一聊在FPGA设计中RAM两种使用方法,RAM是用来在程序运行中存放随机变量的数据空间,使用时可以利用QuartusII的LPM功能实现RAM
    的头像 发表于 06-08 11:30 2w次阅读

    统计信号连接到定时器的两种模式

    对于这种情况,我们可以将被统计信号连接到定时器的ETR脚,并作为定时器的计数时钟。开启定时器更新中断对溢出次数进行统计,择时读取计数器的值和溢出次数即可。这样既避免了CPU频繁进中断而
    的头像 发表于 06-08 09:18 2633次阅读

    FPGA设计中这两种情形该怎么约束

    在FPGA设计中,我们经常会碰到这样的情形:从快时钟域到慢时钟域完成转换,这时,这个时钟是同步的。例如:源时钟是400MHz,数据
    的头像 发表于 09-07 09:47 525次阅读
    FPGA设计中这<b class='flag-5'>两种</b>情形该怎么约束

    IC设计:RAM的应用-统计计数

    在进行模块设计时,我们经常需要统计报文的数量,以供软件(or 主机)读取,有些统计仅仅用于debug,有些统计是协议要求,有些统计是为了便于功能实现。
    的头像 发表于 11-17 17:16 709次阅读
    IC设计:<b class='flag-5'>RAM</b>的应用-<b class='flag-5'>统计</b><b class='flag-5'>计数</b>

    浅析多晶硅锭中错存在的两种来源

    根据晶体凝固生长与错形成、运动与增殖的理论,多晶硅锭中错存在两种来源:原生和增殖。
    的头像 发表于 03-27 11:09 521次阅读
    浅析多晶硅锭中<b class='flag-5'>位</b>错存在的<b class='flag-5'>两种</b>来源

    同步计数器和异步计数器的区别

    在数字电子领域中,计数器是一用于统计脉冲信号数量的重要设备。其中,同步计数器和异步计数器是两种
    的头像 发表于 05-24 14:36 3792次阅读