经典网站设计风格,做内容网站,甘肃园区网络搭建,产品设计公司怎么接单背景
ram是非常常用的ip#xff0c;前人的经验告诉我们#xff0c;如果不对ram进行初始化直接读写#xff0c;不定态在实际上板时会出现不可预知的问题。
我们需要对ram进行初始化写0操作#xff0c;代码如下。需要注意#xff0c;复位释放时立马写入可能存在复位抖动的…背景
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 clkreg [C_ADDR-1:0] s_init_ram_addr ; //初始化写地址
reg s_init_ram_wr ; //初始化写势能信号reg s_ram_initial_done ; //初始化完成标志
always(posedge i_clk)beginif(i_rst)begins_initial_delay_cnt 7d0;s_initial_delay_flag 1b0;endelse if(s_initial_delay_cnt 7b111_1111)begin//计数器结束条件s_initial_delay_cnt s_initial_delay_cnt;s_initial_delay_flag 1b1;endelse begins_initial_delay_cnt s_initial_delay_cnt 7d1;s_initial_delay_flag s_initial_delay_flag;end
endalways(posedge i_clk)beginif(i_rst)begins_init_ram_addr 7d0;s_init_ram_wr 1b0;s_ram_initial_done 1b0;endelse if(s_init_ram_addr {C_ADDR-1{1b1}})begin//s_init_ram_addr s_init_ram_addr;s_init_ram_wr 1b0;s_ram_initial_done 1b1;endelse if(s_initial_delay_flag) begins_init_ram_addr s_init_ram_addr 7d1;s_init_ram_wr 1b1;s_ram_initial_done 1b0;end
end
//例化ram
//initial data {C_WIDTH-1{1b0}}