【FPGA】ROM/EPROM的设计(使用加载文件的方式初始化)
【摘要】 这篇博文开始讲ROM,在FPGA中的ROM可以同过加载文件的方式初始化ROM(就像定制IP核时加载coe文件),也可以通过case的方式在代码中进行初始化,这篇博文讲通过加载文件的方式初始化ROM,之后通过仿真读出来数据,看看是否成功。
Verilog描述:
`timescale 1ns / 1ps//// Create Date: 2019/05/28 23:15:15...
这篇博文开始讲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
文章来源: reborn.blog.csdn.net,作者:李锐博恩,版权归原作者所有,如需转载,请联系作者。
原文链接:reborn.blog.csdn.net/article/details/90666936
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)