当前位置: 首页 > article >正文

ram的使用——初始化很重要

背景

ram是非常常用的ip,前人的经验告诉我们,如果不对ram进行初始化直接读写,不定态在实际上板时会出现不可预知的问题。

我们需要对ram进行初始化写0操作,代码如下。需要注意,复位释放时立马写入可能存在复位抖动的造成ram写入失败的问题,因此可以选择复位后增加一定的延时。

当inital_done信号拉高以后才允许系统开始工作。

 下面是复位初始化ram的代码:

parameter C_ADDR = 10;//ram地址位宽 DEPTH = 1024
parameter C_WIDTH = 10;//ram数据位宽

reg                 s_initial_delay_flag    ;  //延迟标志
reg [6:0]           s_initial_delay_cnt     ;  //延迟计数器 128 clk

reg [C_ADDR-1:0]    s_init_ram_addr         ;  //初始化写地址
reg                 s_init_ram_wr           ;  //初始化写势能信号

reg                 s_ram_initial_done      ;  //初始化完成标志
always@(posedge i_clk)begin
    if(i_rst)begin
        s_initial_delay_cnt <= 7'd0;
        s_initial_delay_flag <= 1'b0;
    end
    else if(s_initial_delay_cnt == 7'b111_1111)begin//计数器结束条件
        s_initial_delay_cnt <= s_initial_delay_cnt;
        s_initial_delay_flag <= 1'b1;
    end
    else begin
        s_initial_delay_cnt <= s_initial_delay_cnt + 7'd1;
        s_initial_delay_flag <= s_initial_delay_flag;
    end
end

always@(posedge i_clk)begin
    if(i_rst)begin
        s_init_ram_addr <= 7'd0;
        s_init_ram_wr <= 1'b0;
        s_ram_initial_done <= 1'b0;
    end
    else if(s_init_ram_addr == {C_ADDR-1{1'b1}})begin//
        s_init_ram_addr <= s_init_ram_addr;
        s_init_ram_wr <= 1'b0;
        s_ram_initial_done <= 1'b1;
    end
    else if(s_initial_delay_flag) begin
        s_init_ram_addr <= s_init_ram_addr + 7'd1;
        s_init_ram_wr <= 1'b1;
        s_ram_initial_done <= 1'b0;
    end
end
//例化ram
//initial data = {C_WIDTH-1{1'b0}}


http://www.kler.cn/a/548442.html

相关文章:

  • 快速入门 Tailwind CSS:现代前端开发的利器
  • [C++]多态详解
  • 掌握SQL多表连接查询_轻松处理复杂数据关系
  • 【设计模式】【行为型模式】解释器模式(Interpreter)
  • Datawhale 数学建模导论二 笔记1
  • 系统可观测性(1)基础概念
  • 深度解析2025最新微服务版本特性
  • 数据结构 day05
  • 【机器学习】常见采样方法详解
  • DeepSeek赋能制造业:图表可视化从入门到精通
  • 《On Java进阶卷》阅读笔记(五)
  • 无人机遥感图像拼接软件有哪些?无人机遥感图像采集流程;遥感图像拼接的一般流程
  • 【原创】解决vue-element-plus-admin无法实现下拉框动态控制表单功能,动态显隐输入框
  • Github 2025-02-14 Java开源项目日报 Top10
  • Svelte 最新中文文档翻译(8)—— @html、@const、@debug 模板语法
  • 工控网络安全架构
  • 【2.10-2.16学习周报】
  • 深度学习框架探秘|TensorFlow:AI 世界的万能钥匙
  • 如何在MacOS上查看edge/chrome的扩展源码
  • DeepSeek R1完全本地部署实战教程01-课程大纲