<一>建立一个项目readDataFromRom

      详细过程参照另一篇文章

     http://www.cnblogs.com/LCCRNblog/p/3397666.html

<二>生成一个IP内核

1.右键点击项目——》New Source——》IP (CORE Generator & Architecture Wizard)

      我取名为myRom;

          

 点击next

2.Memories & Storage Elements——》RAMs & ROMs

   选择其中一个存储器,我在此选择第三个,仅仅是作为示范;

点击next——》finish;

过一会就弹出下图所示的界面

3.配置Rom的各个参数

      本例子做一个64x8bit 的Rom,因此:

      Width = 8;

     Depth = 64;

设置Rom;

next——》next进入下一步

4.初始化Rom(在以后的使用中就不能更改,除非重新设置,后面会讲解怎样重新配置)

       在你的工程所在目录下,打开文件夹ipcore_dir,如我的D:\readDataFromRom\ipcore_dir

      创建一个文本文件,将其后缀名改写为.coe,我设置为data.coe,用记事本打开,输入一下数据

前两行是固定格式,后面是自己需要的数据:

memory_initialization_radix = 10; 这个是为了说明你在初始化时输入数据是10进制
memory_initialization_vector =
0,1,2,3,4,5,6,7,8,9,
0,1,2,3,4,5,6,7,8,9,
0,1,2,3,4,5,6,7,8,9,
0,1,2,3,4,5,6,7,8,9,
0,1,2,3,4,5,6,7,8,9,
0,1,2,3,4,5,6,7,8,9,
0,1,2,3;

数据个数一定的为64个,最后一个分号不能少;

创建好初始化文件后,

点击Browse,添加data.coe,

在此可以点击show查看数据;

点击Generate就已经生成好了需要的Rom了。

可以如下图操作查看其代码:

<三>从Rom中读数据

建立一个Verilog Modul:readRom

添加代码如下:

module readRom(  

            input [5:0] address,     //此处的地址是6位,因为我们的Rom是64x8的

           output [7:0] data    

);

myRom myRom_1(.a(address),.spo(data));//元件例化

endmodule

 

接着创建readRom的测试文件

添加代码:

//测试前面几个数据

#0.001 address <= 6'b000001;
 #0.001 address <= 6'b000010;
 #0.001 address <= 6'b000011;

结果为:

自己查看数据是不是正确的

<四>修改初始化文件数据

找到data.coe,我将数据做修改

memory_initialization_radix = 10;
memory_initialization_vector =
10,11,12,13,14,15,16,17,18,19,
0,1,2,3,4,5,6,7,8,9,
0,1,2,3,4,5,6,7,8,9,
0,1,2,3,4,5,6,7,8,9,
0,1,2,3,4,5,6,7,8,9,
0,1,2,3,4,5,6,7,8,9,
0,1,2,3;

然后:

重新读数据结果为:

 

数据显示正确;