Menu Close

Verilog 文件操作综合应用-生成coe/mif 文件

在之前的文章中介绍了Verilog文件操作函数,本文对已经学习过的文件操作函数进行综合训练,并生成FPGA开发中2种最常用的文件(COE和MIF)。在使用Xilinx 芯片时, 我们会使用到xilinx 公司提供的IP 核, 比如ROM , 单端口RAM, 双端口RAM等等。 在这些存储器件中,有时我们希望预存储一些数据(对存储器进行初始化)。这时,我们就会需要COE (coefficient)文件了。 另外,如果使用Altera 公司的FPGA, 同样也会遇到这样的问题。虽然Quartus 本身就提供一种方法制作MIF(Memory Initialization File)文件,但本文中,我们可以利用Verilog 仿真文件制作自己所需要的COE文件或者MIF 文件。这里谈到的COE,MIF文件是指扩展名为coe, mif的文件。

在我们学习Verilog 仿真时,不但能对我们的FPGA 工程进行仿真, 同时也可以利用我们所学习的Verilog 仿真知识(文件操作)制作一些文件。这些文件不仅可以在仿真中使用,甚至生成的文件可以应用到综合中。

1 利用静态数组方式,生成COE,MIF文件

  • 在整个仿真工程中, 用户需要修改一下几个参数:
    • localparam INPUT_DATA_RADIX = 16; // 16, 10 , 2
    • localparam INPUT_DATA_WID = 8;
    • localparam INPUT_DATA_DEEP = 256;

INPUT_DATA_RADIX 是用来确定输出文件格式的(16进制,10进制,2进制), 是用户告诉仿真工程,输出什么样的格式的COE,MIF 文件。

INPUT_DATA_WID 是用来确定输入, 输出文件的数据宽度。

INPUT_DATA_DEEP 是告诉仿真工程,最终输出文件有多少个数据。

  • 静态数组的代码如下:


上面的代码是用户自定义的静态数组,用户可以根据自己的需要更改input_data 数组里面的内容。为了方便讲解,这里提供了一个简单的例子进行测试。文件的操作一般在仿真文件中实现,Verilog代码如例1:

例1


 

生成的COE文件,内容如下:


 

生成的MIF文件内容如下:


 

练习题1:

使用Verilog的文件操作生成深度为360,精度为16bit的 正弦波数据,同时保存成coe和mif文件。

2 利用现有的文件,生成COE,MIF文件

有时,我们会利用其他工程或者软件的输出结果, 作为COE,MIF 文件的输入。这时,就需要打开文本或者2进制的文件,读取这些文件的内容, 利用仿真工程生成相应的coe,mif文件。

 

例2

文本输入文件如下(test.txt):


注:INPUT_DATA_RADIX  = 16 时,文本文件中必须使用0-9 a-f 来表示; INPUT_DATA_RADIX  = 10 时,文本文件中必须使用0-9 表示; INPUT_DATA_RADIX  = 2 时,文本文件中必须使用0-1 来表示。

例如当INPUT_DATA_RADIX  = 2 ,INPUT_DATA_WID = 8 时,文本文件必须是:

01010011

01111001

 

二进制输入文件(test.bin) ,内容如图1 所示:

图1

 


 

仿真输出的test.coe文件如下:


 

仿真输出的test.mif 文件如下:


 

 

练习题2: 使用$fscanf 函数替代 $fgets 函数,实现文本文件读取,并生成COE 文件。

 

上面给大家提供2个例子,演示如何使用Verilog 文件操作函数,生成COE或者MIF文件。真实使用环境中,可能会生成三角函数,可以用在DSP,或者科学计算当中,也可以生成图像数据文件,比如.bmp 文件,.jpg文件等用于图像处理 等等。

 

 

工程代码(vivado_2018.2)

[content_control]

verilog_coe_mif.zip

[/content_control]

 

 

 

 

Posted in FPGA, FPGA 教材教案, Verilog, 教材与教案, 文章