FPGA 片内 ROM 测试实验

该实验通过在FPGA内创建一个使用初始化文件的BlockMemoryGenerator,设置为SingleProtROM,以8位宽32深度进行配置,实现ROM的效果。coe文件用于设定初始值,ILA调试用于验证地址线和数据线。在线仿真使用200MHz时钟,周期5ns,每隔2.5ns翻转地址。
摘要由CSDN通过智能技术生成

FPGA 片内 ROM 测试实验

实验说明

FPGA里的程序断电就会消失,可以使用RAM实现一个假的ROM,每次上电都会把初始化的值先写入 RAM。
实验过程主要是创建一个rom,但需要勾选使用初始化的文件的选项。

实验准备

coe文件用于设置ROM的初始值。

MEMORY_INITIALIZATION_RADIX=16;     // 进制
MEMORY_INITIALIZATION_VECTOR=
00,
01,
02,
03,
04,
05,
06,
07,
08,
09,
0a,
0b,
0c,
0d,
0e,
0f,
10,
11,
12,
13,
14,
15,
16,
17,
18,
19,
1a,
1b,
1c,
1d,
1e,
1f;

实验过程

在IP Catalog搜索ROM,选择Block Memory Generator,设置为Single Prot ROM,对其进行配置8位宽32深度,勾选一直使能,设置初始化的文件。
ILA调试也是类似的操作,抓取5位的地址线和8位的数据线。

rom_test.v

`timescale 1ns/1ps

module rom_test(
    input sys_clk_p,
    input sys_clk_n,
    input rst_n
);

wire [7:0] rom_data;
reg [4:0] rom_addr;

wire sys_clk;

IBUFDS IBUFDS_inst(
    .O(sys_clk),
    .I(sys_clk_p),
    .IB(sys_clk_n)
    );
    
always  @ (posedge sys_clk or negedge rst_n)
begin
    if(!rst_n)
        rom_addr  <= 10'd0;
    else    
        rom_addr <= rom_addr + 1'b1;
end

rom_ip rom_ip_inst(
    .clka(sys_clk),
    .addra(rom_addr),
    .douta( rom_data)
    );
    
ila_0 ila_m0(
    .clk(sys_clk),
    .probe0(rom_addr),
    .probe1(rom_data)
    );
endmodule
    

在线仿真

激励文件编写,板子的时钟是200MHz,周期为5ns,每隔2.5ns翻转一次。

`timescale 1ns/1ps

module rom_unit_test;

reg sys_clk_p;
reg rst_n;

wire sys_clk_n;

rom_test uut(
    .sys_clk_p(sys_clk_p),
    .sys_clk_n(sys_clk_n),
    .rst_n(rst_n)
);

initial
begin
    sys_clk_p = 0;  
    rst_n = 0;
    #1000
    rst_n = 1;
end

always #2.5 sys_clk_p = ~ sys_clk_p;
assign sys_clk_n = ~sys_clk_p;

endmodule

在这里插入图片描述
在这里插入图片描述

实际测试

在这里插入图片描述

总结

本实验生成一个RAM,使用文件对其进行初始化,实现类似ROM的效果。

参考资料

  1. xilinx 真双口RAM的primitives /core output 区别
  2. COE文件制作与使用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值