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

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

3天内不再提示

RAM初始化的下板验证

FPGA之家 来源:FPGA开源工作室 2023-04-11 10:51 次阅读

本实验基于xilinx ARTIX-7芯片验证实现,有时间有兴趣的朋友可在其他FPGA芯片上实现验证。

当大家看到《xilinx verilog语法技巧(三)–RAM的初始化》文章的时候很多人认为initial语句,$readmemb语句均是不可综合语句(只能用来写测试文件),但是xilinx的综合器已经悄然改变了这一点。

rams_init_file源码:

// 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

rams_init_file.data源文件:

00001110110000011001111011000110
00101011001011010101001000100011
01110100010100011000011100001111
01000001010000100101001110010100
00001001101001111111101000101011
00101101001011111110101010100111
11101111000100111000111101101101
10001111010010011001000011101111
00000001100011100011110010011111
11011111001110101011111001001010
11100111010100111110110011001010
11000100001001101100111100101001
10001011100101011111111111100001
11110101110110010000010110111010
01001011000000111001010110101110
11100001111111001010111010011110
01101111011010010100001101110001
01010100011011111000011000100100
11110000111101101111001100001011
10101101001111010100100100011100
01011100001010111111101110101110
01011101000100100111010010110101
11110111000100000101011101101101
11100111110001111010101100001101
01110100000011101111111000011111
00010011110101111000111001011101
01101110001111100011010101101111
10111100000000010011101011011011
11000001001101001101111100010000
00011111110010110110011111010101
01100100100000011100100101110000
10001000000100111011001010001111
11001000100011101001010001100001
10000000100111010011100111100011
11011111010010100010101010000111
10000000110111101000111110111011
10110011010111101111000110011001
00010111100001001010110111011100
10011100101110101111011010110011
01010011101101010001110110011010
01111011011100010101000101000001
10001000000110010110111001101010
11101000001101010000111001010110
11100011111100000111110101110101
01001010000000001111111101101111
00100011000011001000000010001111
10011000111010110001001011100100
11111111111011110101000101000111
11000011000101000011100110100000
01101101001011111010100011101001
10000111101100101001110011010111
11010110100100101110110010100100
01001111111001101101011111001011
11011001001101110110000100110111
10110110110111100101110011100110
10011100111001000010111111010110
00000000001011011111001010110010
10100110011010000010001000011011
11001010111111001001110001110101
00100001100010000111000101001000
00111100101111110001101101111010
11000010001010000000010100100001
11000001000110001101000101001110
10010011010100010001100100100111

tb_rams_init_file测试顶层文件:

`timescale 1ns / 1ps
module tb_rams_init_file(
       input clk,
       input reset,
       output [2:0] led_rgb0,
       output [2:0] led_rgb1,
       output [2:0] led_rgb2,
       output [2:0] led_rgb3
        );
reg [5:0] addr;
wire  [31:0] dout;
reg [27:0] cnt;

assign led_rgb0 = dout[2:0];
assign led_rgb1 = dout[5:3];
assign led_rgb2 = dout[8:6];
assign led_rgb3 = dout[11:9];

always @(posedge clk ) begin
  if(reset==1'b1) begin
    cnt   <= 28'd0;
    addr <= 0;
  end
  else if(cnt == 28'd100000000)begin//1s
    cnt <= 28'd0;
    addr <= addr +1;
  end
  else begin
    cnt   <= cnt + 1;
    addr <= addr;
  end
end
rams_init_file u_rams_init_file(
               .clk(clk), 
               .we(1'b0), 
               .addr(addr), 
               .din(32'b0), 
               .dout(dout));
endmodule

约束文件(根据自己板卡):

set_property PACKAGE_PIN E3 [get_ports clk]
set_property IOSTANDARD LVCMOS33 [get_ports clk]

set_property PACKAGE_PIN D9 [get_ports reset]
set_property IOSTANDARD LVCMOS33 [get_ports reset]

set_property PACKAGE_PIN E1 [get_ports led_rgb0[0]]
set_property IOSTANDARD LVCMOS33 [get_ports led_rgb0[0]]

set_property PACKAGE_PIN G6 [get_ports led_rgb0[1]]
set_property IOSTANDARD LVCMOS33 [get_ports led_rgb0[1]]

set_property PACKAGE_PIN F6 [get_ports led_rgb0[2]]
set_property IOSTANDARD LVCMOS33 [get_ports led_rgb0[2]]

set_property PACKAGE_PIN G4 [get_ports led_rgb1[0]]
set_property IOSTANDARD LVCMOS33 [get_ports led_rgb1[0]]

set_property PACKAGE_PIN G3 [get_ports led_rgb1[1]]
set_property IOSTANDARD LVCMOS33 [get_ports led_rgb1[1]]

set_property PACKAGE_PIN J4 [get_ports led_rgb1[2]]
set_property IOSTANDARD LVCMOS33 [get_ports led_rgb1[2]]

set_property PACKAGE_PIN H4 [get_ports led_rgb2[0]]
set_property IOSTANDARD LVCMOS33 [get_ports led_rgb2[0]]

set_property PACKAGE_PIN J3 [get_ports led_rgb2[1]]
set_property IOSTANDARD LVCMOS33 [get_ports led_rgb2[1]]

set_property PACKAGE_PIN J2 [get_ports led_rgb2[2]]
set_property IOSTANDARD LVCMOS33 [get_ports led_rgb2[2]]

set_property PACKAGE_PIN K2 [get_ports led_rgb3[0]]
set_property IOSTANDARD LVCMOS33 [get_ports led_rgb3[0]]

set_property PACKAGE_PIN K1 [get_ports led_rgb3[1]]
set_property IOSTANDARD LVCMOS33 [get_ports led_rgb3[1]]

set_property PACKAGE_PIN H6 [get_ports led_rgb3[2]]
set_property IOSTANDARD LVCMOS33 [get_ports led_rgb3[2]]






审核编辑:刘清

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

    关注

    7

    文章

    1161

    浏览量

    112799
  • Xilinx
    +关注

    关注

    69

    文章

    2003

    浏览量

    118241
  • Verilog
    +关注

    关注

    28

    文章

    1214

    浏览量

    108790
  • FPGA芯片
    +关注

    关注

    2

    文章

    203

    浏览量

    39327
收藏 人收藏

    评论

    相关推荐

    阻止RAM初始化文件

    上的RAM有疑问。我正在寻找电路上给定Block RAM的VHDL描述,在那里我可以直接将内存初始化文件的链接写入VHDL代码。上次我使用Altera时,我可以写下
    发表于 05-08 14:38

    电源关闭几秒后,Ram数据不会初始化

    Ram数据不会初始化以上来自于谷歌翻译以下为原文 Ram data not init after power off for seconds
    发表于 07-10 14:03

    s32k146如何初始化RAM

    初始化 RAM,除了上电复位之外的每次复位的特定部分。(On Power On Reset 应初始化所有数据)。有什么办法可以做到这一点吗?
    发表于 03-31 07:36

    手机模块初始化向导

    初始化向导:为了刚好的对手机模块进行初始化,所以把最基本的向导写下来.本向导适用于本公司的西门子TC35I和华为GT9000模块。一、在初始化手机模块前,请先确定DT
    发表于 09-18 09:41 17次下载

    RDA1846S初始化设置

    初始化设置RDA1846S初始化设置RDA1846S初始化设置
    发表于 01-15 17:08 70次下载

    UCOS_III_配置与初始化

    发表于 12-20 22:53 5次下载

    HX711初始化程序

    初始化程序
    发表于 02-08 01:51 83次下载

    在51平台初始化文件的引入导致全局变量无法初始化的问题如何解决

    初始化文件的引入导致全局变量无法初始化的问题如何解决。
    发表于 08-20 17:31 0次下载
    在51平台<b>下</b><b>初始化</b>文件的引入导致全局变量无法<b>初始化</b>的问题如何解决

    uboot和内核里phy的初始化_内核里的双网络配置及phy的初始化

    初始化,以及内核里的双网络配置及 phy 的初始化。 本文以盈鹏飞嵌入式的CoM-335x(基于AM335x)核心及网络芯片LAN8720 为例,说明修改步骤
    的头像 发表于 05-17 08:19 1.1w次阅读

    8253初始化程序分享_8253应用案例

    初始化要求及编程,最后用一个例子介绍了8253的初始化程序。
    发表于 05-23 15:52 1.9w次阅读
    8253<b>初始化</b>程序分享_8253应用案例

    如何设置STM32单片机非初始化数据变量不被零初始化

    RAM中的数据,用来快速恢复现场,或者不至于因瞬间复位而重启现场设备。而keil mdk在默认情况,任何形式的复位都会将RAM区的非初始化变量数据清零。
    发表于 01-02 15:56 6796次阅读
    如何设置STM32单片机非<b>初始化</b>数据变量不被零<b>初始化</b>

    想要对RAM初始化该怎么操作

    RAM初始化并没有那么神秘,如果是采用Xilinx的IP Core,只需提供一个.coe文件,其内容就是RAM初始值,只需要注意coe文件的格式就好,这里就不再赘述。
    的头像 发表于 06-06 14:36 7366次阅读

    C++之初始化列表学习的总结

    初始化列表对成员进行初始化
    的头像 发表于 12-24 17:39 409次阅读

    RT-Thread自动初始化机制

    初始化机制](https://www.rt-thread.org/document/site
    的头像 发表于 06-17 08:52 1344次阅读
    RT-Thread自动<b>初始化</b>机制

    RT-Thread自动初始化详解

    初始化后,就需要在主函数中进行调用。当我们使用RT-Thread后,完全不需要这样做了,我们可以将硬件等自动初始化。 RT-Thread 自动初始化机制是指
    的头像 发表于 06-25 21:38 7728次阅读
    RT-Thread自动<b>初始化</b>详解