使用matlab和ISE 创建并仿真ROM IP核

前言

  本人想使用简单的中值滤波进行verilog相关算法的硬件实现,由于HDL设计软件不能直接处理图像,大部分过程都是可以将图像按照一定的顺序保存到TXT文档中,经过Modelsim仿真后,处理的数据再经过matlab显示图像;图像首先通过matlab或者C语言保存在TXT文档中,生成测试向量文件,然后在仿真软件中进行仿真处理,把处理后的数据保存为TXT格式,最后用matlab显示,观察结果。一般都是先创建MIF文件,将图像中的像素信息用一个ROM储存起来,然后调用ROM里面的地址进行处理,相当于制作了一个ROM查找表。

 

用Quartus II创建并仿真ROM的步骤:

1.在Quatus工程下生成一个ROM

2.编写.mif文件,作为ROM的初始化文件

3.将.mif文件拷贝到Modelsim工程下

4.进行Modelsim仿真

 

图像保存的步骤:

1.使用matlab将图像生成txt文。

2.创建mif文件(Memory Initialization File):使用mif生成器、C语言或者matlab语言来生成;

   选择直接使用matlab生成mif文件gray_image.mif;

生成的mif文件如下图所示:

 

 

3.调用mif文件生成ROM(verilog文件即.v文件)

这个是Altera的方法,因为本人电脑上只安装了Xilinx软件,所以这一步没有进行实际操作。

 


使用Xilinx创建并仿真ROM的步骤:

1.编写.coe文件,作为ROM的初始化文件,.coe文件的格式和内容如代码所示:

2.生成的.coe文件格式如下图所示:

3.使用Xilinx中的Core Generator完成ROM的例化(生成的.coe文件的图像数据是一行行进行读取的)。

打开ISE,右键单击New Source,如下图所示:

单击之后选择IP_Core_Generator,

单击Next选项,选择Memories&Storage Elements->RAMs&ROMs->,选择块式存储或者分布式存储(这里根据存储数据的大小进行选择,较小的可以选择块式存储)。

点击Next,然后Finish。然后就出现了下面的界面,一直点击Next进行ROM属性的一些设置,直至完成:

然后就要选择所需要的ROM的大小

 portA 表示输出要不要时钟打拍输出,这个是在mux里实现的;

在添加初始化文件的时候,将之前matlab生成的.coe文件添加到ROM IP核中去。

一直next下去,就可以得到初始化好的ROM IP核,可以在./ipcore_dir目录下查看ROM文件,从而可以在顶层模块中对ROM进行例化。

生成的ROM文件的输入输出变量如下:

复制代码
module rom_512by512(
  clka,
  addra,
  douta
);

input clka;
input [17 : 0] addra;
output [7 : 0] douta;
View Code
复制代码

在顶层模块中对ROM进行例化如下:

复制代码
  wire [7:0] rom_data;
  wire [17:0] rom_addr;

  rom_512by512 U1
  (
    .clka(CLK),          //input clka;
    .addra( rom_addr),   //input
    .douta(rom_data)     //output
  );
View Code
复制代码

4.使用CoreGenerator完成ROM的例化后会生成一个.mif文件,这是Modelsim进行ROM仿真时需要的初始化文件,将.mif文件复制到Modelsim工程下进行仿真。

5.查看ROM模块中的初始化数据,双击Rom模块,出现如下图的界面,点击show按钮,即可查看数据;

 

posted on   鹅要长大  阅读(10489)  评论(0编辑  收藏  举报

导航

< 2025年2月 >
26 27 28 29 30 31 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 1
2 3 4 5 6 7 8

统计

点击右上角即可分享
微信分享提示