Verilog RAM/ROM的数据初始化

这篇具有很好参考价值的文章主要介绍了Verilog RAM/ROM的数据初始化。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


FPGA设计中RAM和ROM作为存储器用来存储可变或不可变类型的数据。
ROM初始化一般是加载固定数据,RAM声明时默认为不定态数据,初始化时可以让数据为全1或者全0。

一、初始化方式

  1. 复位时按地址写入初值
    always@ (posedge clk_in or negedge rst_n_in ) begin
        if( !rst_n_in ) begin
            ram_reg[0] <= xxx;
            ram_reg[1] <= xxx;
            ...
            ram_reg[n-1] <= xxx;
        end else begin
            ...
        end
    end
    
  2. 使用initial 和 for循环来初始化
    用于初始化为有规律的数据,RAM初始化常使用这种方式。
    initial begin : ram_init
        integer i;
        for(i=0;i<n;i++) begin
            ram_reg[i] = xxx;
        end
    end
    
    变量的定义必须在命名块中,因此这里需要使用命名的initial块。
  3. 通过读文件的方式初始化
    将数据存储在.dat文件中,通过读文件实现初始化。
    这种方式RAM使用较少,一般ROM初始化时喜欢采用这种做法。
    initial begin
        $readmemh("filepath",rom_reg);
    end
    

二、测试

方式1的正确性不言而喻。
方式2和方式3中,initial块一般来说是用在仿真中的,对其能否综合,编写如下的测试代码:

  1. 定义了两块寄存器,用来实现RAM

  2. ram_1通过方式2初始化

  3. ram_2通过方式3初始化,dat文件内容从0x0f ~ 0x08
    Verilog RAM/ROM的数据初始化,FPGA,fpga开发

  4. 循环对ram中的内容进行读取

  5. 调用ila核,来抓取读取的数据

`timescale 1ns / 1ps
//
// Engineer: wkk 
// Create Date: 2023/12/23 20:50:45
// Module Name: init_value_test
//
module init_value_test(
    input   clk_in    ,
    input   rst_n_in  ,
    
    output  nc_out 
);

reg [7:0]  ram_1 [7:0];
reg [7:0]  ram_2 [7:0];

reg  [2:0]  ram_addr ;
wire [7:0]  ram_1_out;
wire [7:0]  ram_2_out;

initial begin : init_ram1
    integer i;
    for( i=0;i<7;i = i+1 ) begin
        ram_1[i] = i+1;
    end
end

initial begin : init_ram2
    $readmemh("E:/FPGA/init_value_test/init_value_test.srcs/data/ram_data.dat",ram_2);
end

always @( posedge clk_in or negedge rst_n_in ) begin
    if( !rst_n_in ) begin
        ram_addr <= 'b0;
    end else begin
        ram_addr <= ram_addr + 1'b1;
    end
end

assign ram_1_out = ram_1[ram_addr];
assign ram_2_out = ram_2[ram_addr];

ila_0 ila_0_inst (
        .clk(clk_in), // input wire clk

        .probe0(ram_1_out), // input wire [7:0]  probe0  
        .probe1(ram_2_out), // input wire [7:0]  probe1 
        .probe2(ram_addr)   // input wire [2:0]  probe2
);

endmodule

增加了一个nc_out 端口,实际上是没有什么作用的,但是必须要加,否则会报错:

[Place 30-494] The design is empty
Resolution: Check if opt_design has removed all the leaf cells of your design.  Check whether you have instantiated and connected all of the top level ports.

原因:顶层文件没有输出接口

测试结果
Verilog RAM/ROM的数据初始化,FPGA,fpga开发

通过ila核抓出的数据,表明方式2和方式3成功的实现了初始化操作。文章来源地址https://www.toymoban.com/news/detail-762442.html

到了这里,关于Verilog RAM/ROM的数据初始化的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • [FPGA IP系列] FPGA常用存储资源大全(RAM、ROM、CAM、SRAM、DRAM、FLASH)

    本文主要介绍FPGA中常用的RAM、ROM、CAM、SRAM、DRAM、FLASH等资源。 RAM(Random Access Memory)是FPGA中最基本和常用的内部存储块,根据不同架构可以实现不同容量,最大可达几十Mb。 FPGA中的RAM主要包括: 分布式RAM:存在于逻辑块(LE)中的小容量RAM,通常为几百比特到几千比特。 块RAM:F

    2024年02月12日
    浏览(49)
  • 【DDR】基于Verilog的DDR控制器的简单实现(一)——初始化

    在FPGA中,大规模数据的存储常常会用到DDR。为了方便用户使用,Xilinx提供了DDR MIG IP核,用户能够通过AXI接口进行DDR的读写访问,然而MIG内部自动实现了许多环节,不利于用户深入理解DDR的底层逻辑。 本文以美光(Micron)公司生产的DDR3芯片MT41J512M8RH-093为例,说明DDR芯片的操作

    2024年02月02日
    浏览(51)
  • Verilog实现FPGA可编程电路中的RAM存储器

    Verilog实现FPGA可编程电路中的RAM存储器 在FPGA可编程电路的设计中,RAM存储器通常被广泛使用。而手写RAM存储器则可以提供更加灵活、高效的设计方案。本文将介绍如何使用Verilog语言来手写FPGA中的RAM存储器。 首先,我们需要确定RAM存储器的大小和宽度。假设我们需要实现一个

    2024年02月04日
    浏览(57)
  • 官答|初始化GreatSQL报错无法找到数据目录或初始化数据字典失败

    GreatSQL推出新栏目——官答 官答栏目针对GreatSQL数据库中的问题,选取官方论坛和讨论群中的典型提问进行深入解答。内容涵盖数据库安装部署、配置优化、故障排查、性能测试等方面。 在文章中,我们不仅提供解决方案,还会结合实例深入剖析问题的成因,提升读者对GreatSQL数据

    2024年02月04日
    浏览(64)
  • go语言数据初始化

    数据的声明: 初始化数组的初始化有多种形式。 [5] int {1,2,3,4,5} 长度为5的数组,其元素值依次为:1,2,3,4,5。 [5] int {1,2} 长度为 5 的数组,其元素值依次为:1,2,0,0,0 。 在初始化时没有指定初值的元素将会赋值为其元素类型 int 的默认值0,string 的默认值是 “”。

    2024年02月03日
    浏览(50)
  • Django数据库重新初始化

    开发过程中 models.py 中的模型经历一番爆改后,执行migrate就报错。干脆重新初始化。 操作步骤: 删除旧的数据库文件 ,重新创建。如果你是使用SQLite,删除后无需重新创建,Django在运行迁移时可以自动完成SQLite数据库创建。如果使用其他数据库,需要手动创建一个新的数据

    2024年02月20日
    浏览(48)
  • 达梦数据库初始化实例

    说明(默认值) INI_FILE 初始化文件 dm.ini 存放的路径 PATH 初始数据库存放的路径 CTL_PATH 控制文件路径 LOG_PATH 日志文件路径 EX

    2024年02月11日
    浏览(71)
  • 【Express.js】数据库初始化

            在软件开发阶段和测试阶段,为了方便调试,我们通常会进行一系列的数据库初始化操作,比如重置数据表,插入记录等等,或者在部署阶段进行数据初始化的操作         根据前面章节介绍过的 knex.js 和 sequelize.js ,我们可以利用它们提供的方法进行DDL,本

    2024年02月13日
    浏览(50)
  • postgresql(Windows)初始化数据库教程

    省流:本文章内容讲的是如何初始化postgresql数据库环境,前提是已经安装好postgresql数据库,安装步骤参考postgresql(Windows)安装教程 定位到安装路径: C:Program FilesPostgreSQL12bin 执行 C:Program FilesPostgreSQL12bininitdb.exe -D \\\"E:install svrPostgreSQLData\\\" 同理 C:Program FilesPostgreSQL12

    2024年01月20日
    浏览(51)
  • 初始化vue中data中的数据

    当组件的根元素使用了v-if的时候, 并不会初始化data中的数据 如果想完全销毁该组件并且初始化数据,需要在使用该组件的本身添加v-if 或者是手动初始化该组件中的数据 下面详细说说Object.assign的用法: ES6的官方文档的解释是:Object.assign() 方法用于将所有可枚举属性的值从一

    2024年02月05日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包