专栏首页FPGA开源工作室xilinx verilog语法技巧(三)--RAM的初始化

xilinx verilog语法技巧(三)--RAM的初始化

RAM的初始化

RAM可以通过以下方式初始化: 1,在HDL源代码中指定RAM初始内容; 2,在外部数据文件中指定RAM初始内容。 Verilog Coding Example:

1,所有可寻址的words都初始化为相同的值

reg [DATA_WIDTH-1:0] ram [DEPTH-1:0]; 
integer i; 
initial for (i=0; i<DEPTH; i=i+1) ram[i] = 0; 
end 

2,在外部数据文件中指定RAM初始内容

使用HDL源代码中的文件读取函数从外部数据文件加载RAM初始内容。 以下外部数据文件使用二进制值初始化8x32位RAM:

00001110110000011001111011000110
00101011001011010101001000100011
01110100010100011000011100001111
01000001010000100101001110010100
00001001101001111111101000101011
00101101001011111110101010100111
11101111000100111000111101101101
10001111010010011001000011101111
................................

Code Example (Verilog):

reg [31:0] ram [0:63]; 
initial begin 
$readmemb(“rams_20c.data”, ram, 0, 63); 
end 

3 Initializing Block RAM (Verilog)

// Initializing Block RAM (Single-Port Block RAM) 
// File: rams_sp_rom 
module rams_sp_rom (clk, we, addr, di, dout); 
input clk; 
input we; 
input [5:0] addr; 
input [19:0] di; 
output [19:0] dout; 
reg [19:0] ram [63:0]; 
reg [19:0] dout; 
initial 
begin 
ram[63] = 20'h0200A; ram[62] = 20'h00300; ram[61] = 20'h08101; 
ram[60] = 20'h04000; ram[59] = 20'h08601; ram[58] = 20'h0233A; 
ram[57] = 20'h00300; ram[56] = 20'h08602; ram[55] = 20'h02310; 
ram[54] = 20'h0203B; ram[53] = 20'h08300; ram[52] = 20'h04002; 
ram[51] = 20'h08201; ram[50] = 20'h00500; ram[49] = 20'h04001; 
ram[48] = 20'h02500; ram[47] = 20'h00340; ram[46] = 20'h00241; 
ram[45] = 20'h04002; ram[44] = 20'h08300; ram[43] = 20'h08201; 
ram[42] = 20'h00500; ram[41] = 20'h08101; ram[40] = 20'h00602; 
ram[39] = 20'h04003; ram[38] = 20'h0241E; ram[37] = 20'h00301; 
ram[36] = 20'h00102; ram[35] = 20'h02122; ram[34] = 20'h02021; 
ram[33] = 20'h00301; ram[32] = 20'h00102; ram[31] = 20'h02222; 
ram[30] = 20'h04001; ram[29] = 20'h00342; ram[28] = 20'h0232B; 
ram[27] = 20'h00900; ram[26] = 20'h00302; ram[25] = 20'h00102; 
ram[24] = 20'h04002; ram[23] = 20'h00900; ram[22] = 20'h08201; 
ram[21] = 20'h02023; ram[20] = 20'h00303; ram[19] = 20'h02433; 
ram[18] = 20'h00301; ram[17] = 20'h04004; ram[16] = 20'h00301; 
ram[15] = 20'h00102; ram[14] = 20'h02137; ram[13] = 20'h02036; 
ram[12] = 20'h00301; ram[11] = 20'h00102; ram[10] = 20'h02237; 
ram[9] = 20'h04004; ram[8] = 20'h00304; ram[7] = 20'h04040; 
ram[6] = 20'h02500; ram[5] = 20'h02500; ram[4] = 20'h02500; 
ram[3] = 20'h0030D; ram[2] = 20'h02341; ram[1] = 20'h08201; 
ram[0] = 20'h0400D; 
end 
always @(posedge clk) 
begin 
if (we) 
ram[addr] <= di; 
dout <= ram[addr]; 
end 
endmodule 

4,从外部数据文件初始化块RAM(Verilog)

// Initializing Block RAM from external data file 
// Binary data 
// File: rams_init_file.v 
module rams_init_file (clk, we, addr, din, dout); 
input clk; 
input we; 
input [5:0] addr; 
input [31:0] din; 
output [31:0] dout; 
reg [31:0] ram [0:63]; 
reg [31:0] dout; 
initial begin 
$readmemb("rams_init_file.data",ram); 
end 
always @(posedge clk) 
begin 
if (we) 
ram[addr] <= din; 
dout <= ram[addr]; 
end 
endmodule 

用于初始化RAM的外部文件需要以位向量形式。整数或十六进制格式的外部文件将无法工作。

点“Verilog常用语法”了解更多

verilog常用语法一让您的FPGA设计更轻松

verilog常用语法二让您的FPGA设计更轻松

verilog常用语法三让您的FPGA设计更轻松

xilinx verilog 语法技巧--综合属性

xilinx verilog语法技巧(二)

本文分享自微信公众号 - FPGA开源工作室(leezym0317),作者:OpenSLee

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-05-20

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • mig IP的仿真

    FPGA开源工作室将通过五篇文章来给大家讲解xilinx FPGA 使用mig IP对DDR3的读写控制,旨在让大家更快的学习和应用DDR3。

    FPGA开源工作室
  • 使用Simulink快速搭建视频处理硬件加速仿真平台

    前言:这一讲我们使用Simulink来快速搭建图像/视频处理硬件加速平台。以简单的RGB2GREY算法为例。我们主要使用的Toolbox为HDL Coder和V...

    FPGA开源工作室
  • FPGA图像处理之行缓存(linebuffer)的设计一

    如图1所示,我们要设计n行同时输出,就串联n行。Line_buffer的大小设置由图像显示行的大小(图像宽度)决定。例如480*272 (480)。

    FPGA开源工作室
  • CMDB开发

    TIL即IT基础架构库(Information Technology Infrastructure Library, ITIL,信息技术基础架构库)由英国政府部...

    菲宇
  • java环境搭建-走进java世界

    我来为大家演示jdk8的搭建,后面再讲一些jdk8和jdk10的一些区别。 为什么要安装jdk8版本呢,因为现在大多数软件的java环境是基于8版本的呢!

    小蓝枣
  • 「R」使用 ezcox 展示森林图

    我之前写过一篇文章介绍最近写的一个包 ezcox,它可以用来进行批量处理 Cox 模型(支持并行计算)。那个时候我已经关注到了 forestmodel 包并修复...

    王诗翔呀
  • 从真值表角度分析与消除竞争冒险

    在组合逻辑中,由于门的输入信号经过了不同的延时,导致到达该门的时间不一致叫竞争,产生的毛刺叫冒险,如果布尔式中有相反的信号则可能产生竞争和冒险。

    根究FPGA
  • 何恺明、吴育昕最新成果:用组归一化替代批归一化

    编译 | 阿司匹林 AI科技大本营按:近日,FAIR 团队的吴育昕和何恺明提出了组归一化(Group Normalization,简称 GN)的方法。其中,GN...

    AI科技大本营
  • 1024程序员节,WeTest送好礼,为程序员疯狂打call!

    ? 为什么是1024?某百科说:1024是2的十次方,二进制计数的基本计量单位之一。程序员就像是一个个1024,以最低调、踏实、核心的功能模块搭建起这个科技世...

    WeTest质量开放平台团队
  • 靶场练习 | Wall (hack the box)

    声明:请勿利用文章内的相关技术从事非法测试,如因此产生的一切不良后果与文章作者及本公众号无关!

    贝塔安全实验室

扫码关注云+社区

领取腾讯云代金券