【FPGA】ROM/EPROM的设计(使用加载文件的方式初始化)

这篇博文开始讲ROM,在FPGA中的ROM可以同过加载文件的方式初始化ROM(就像定制IP核时加载coe文件),也可以通过case的方式在代码中进行初始化,这篇博文讲通过加载文件的方式初始化ROM,之后通过仿真读出来数据,看看是否成功。

Verilog描述:

`timescale 1ns / 1ps
//
// Create Date: 2019/05/28 23:15:15
// Design Name: 
// Module Name: rom_using_file
//
module rom_using_file (
input [7:0] address , // Address input
output [7:0] data    , // Data output
input read_en , // Read Enable 
input ce        // Chip Enable
);
           
reg [7:0] mem [0:255] ;  
      
assign data = (ce && read_en) ? mem[address] : 8'b0;

initial begin
  $readmemb("G:/Verilog_file/Memory_/Memory_.srcs/sources_1/new/memory.list", mem); // memory_list is memory file
// G:/Verilog_file/Memory_/Memory_.srcs/rom_using_file_sim/new/memory.list
//G:/Verilog_file/Memory_/Memory_.srcs/sources_1/new/memory.list
end

endmodule

最文章的最后会粘出初始化文件memory.list.

通过在FPGA中测试,使用readmemb读出初始化数据时候,memory.list的路径要全,且分隔符是/而不是\。

下面给出测试文件:

`timescale 1ns / 1ps


module rom_using_file_tb;
 reg [7:0] address;
 reg read_en, ce;
 wire [7:0] data;
 integer i;
 
 initial begin
   address = 0;
   read_en = 0;
   ce      = 0;
   //#10 $monitor ("address = %h, data = %h, read_en = %b, ce = %b", address, data, read_en, ce);
   for (i = 0; i < 256; i = i + 1 )begin
     #5 
	 address = i;
     read_en = 1;
     ce = 1;
     #5
	 read_en = 0;
     ce = 0;
     address = 0;
   end
 end
 
rom_using_file U_rom(
.address(address) , // Address input
.data(data)    , // Data output
.read_en(read_en) , // Read Enable
.ce(ce)        // Chip Enable
);

endmodule

仿真结果:

从仿真波形图看,读出数据正常。

参考链接:ROM, EPROM, EEPROM

memory.list文件如下:

00000000
00000001
00000010
00000011
00000100
00000101
00000110
00000111
00001000
00001001
00001010
00001011
00001100
00001101
00001110
00001111
00010000
00010001
00010010
00010011
00010100
00010101
00010110
00010111
00011000
00011001
00011010
00011011
00011100
00011101
00011110
00011111
00100000
00100001
00100010
00100011
00100100
00100101
00100110
00100111
00101000
00101001
00101010
00101011
00101100
00101101
00101110
00101111
00110000
00110001
00110010
00110011
00110100
00110101
00110110
00110111
00111000
00111001
00111010
00111011
00111100
00111101
00111110
00111111
01000000
01000001
01000010
01000011
01000100
01000101
01000110
01000111
01001000
01001001
01001010
01001011
01001100
01001101
01001110
01001111
01010000
01010001
01010010
01010011
01010100
01010101
01010110
01010111
01011000
01011001
01011010
01011011
01011100
01011101
01011110
01011111
01100000
01100001
01100010
01100011
01100100
01100101
01100110
01100111
01101000
01101001
01101010
01101011
01101100
01101101
01101110
01101111
01110000
01110001
01110010
01110011
01110100
01110101
01110110
01110111
01111000
01111001
01111010
01111011
01111100
01111101
01111110
01111111
10000000
10000001
10000010
10000011
10000100
10000101
10000110
10000111
10001000
10001001
10001010
10001011
10001100
10001101
10001110
10001111
10010000
10010001
10010010
10010011
10010100
10010101
10010110
10010111
10011000
10011001
10011010
10011011
10011100
10011101
10011110
10011111
10100000
10100001
10100010
10100011
10100100
10100101
10100110
10100111
10101000
10101001
10101010
10101011
10101100
10101101
10101110
10101111
10110000
10110001
10110010
10110011
10110100
10110101
10110110
10110111
10111000
10111001
10111010
10111011
10111100
10111101
10111110
10111111
11000000
11000001
11000010
11000011
11000100
11000101
11000110
11000111
11001000
11001001
11001010
11001011
11001100
11001101
11001110
11001111
11010000
11010001
11010010
11010011
11010100
11010101
11010110
11010111
11011000
11011001
11011010
11011011
11011100
11011101
11011110
11011111
11100000
11100001
11100010
11100011
11100100
11100101
11100110
11100111
11101000
11101001
11101010
11101011
11101100
11101101
11101110
11101111
11110000
11110001
11110010
11110011
11110100
11110101
11110110
11110111
11111000
11111001
11111010
11111011
11111100
11111101
11111110
11111111

 

 

 

 

 

 

 

  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李锐博恩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值