hex转mif文件 verilog
用FPGA来跑ARM 核的时候,刚开始将Keil编译产生的hex文件拿来仿真和下到板子上的时候,发现程序运行不正确。细细观察仿真波形发现,在Altera的ROM IP中直接调用Keil产生的hex文件,出来数据是不正确的。比较Quartus产生的HEX文件和标准的Hex文件,发现两者之间的格式不是完全一样。于是干脆直接将Keil产生的Hex文件转换成mif文件。
//-----------------------------------------------------------------
// Author: wuzhangquan
// Blog: http://www.cnblogs.com/xinlukk/
// Email: wuzhangquan@foxmail.com
//-----------------------------------------------------------------
//: 10 0000 00 F0FF0F20 B9010000 B1010000 AD010000 B8
`timescale 1ns/1ns
module hex2mif;
parameter MEM_DEPTH = 16*1024;
integer fid;
integer i;
integer tf;
reg [7:0] ch;
reg [7:0] len;
reg [15:0] ext_addr;
reg [15:0] addr;
reg [7:0] dtype;
reg [7:0] data;
reg [7:0] mem[0:MEM_DEPTH-1];
initial begin
ch = 0;
ext_addr = 0;
addr = 0;
dtype = 0;
data = 0;
for(i=0;i<MEM_DEPTH;i++)
mem[i] = 0;
fid=$fopen("rom.hex","rb");
if(fid==0) begin
$display("Cann't find rom.hex!!");
$finish;
end
ch = $fgetc(fid);
while(ch!=8'hff)
begin
//$write("%c",ch);
if(ch==":")
begin
ch = $fgetc(fid);
len[7:4] = asc2hex(ch);
ch = $fgetc(fid);
len[3:0] = asc2hex(ch);
//Get Addr
ch = $fgetc(fid);
addr[15:12] = asc2hex(ch);
ch = $fgetc(fid);
addr[11:8] = asc2hex(ch);
ch = $fgetc(fid);
addr[7:4] = asc2hex(ch);
ch = $fgetc(fid);
addr[3:0] = asc2hex(ch);
//get Data type
ch = $fgetc(fid);
dtype[7:4] = asc2hex(ch);
ch = $fgetc(fid);
dtype[3:0] = asc2hex(ch);
//DATA
if(dtype==8'h00) begin //Data
for(i=0;i<len;i++) begin
ch = $fgetc(fid);
data[7:4] = asc2hex(ch);
ch = $fgetc(fid);
data[3:0] = asc2hex(ch);
mem[ext_addr + addr] = data;
addr = addr + 1;
$fwrite(tf,"%h",data);
end
len = 0;
end
//CHECK
//ch = $fgetc(fid);
//ch = $fgetc(fid);
end
ch = $fgetc(fid);
end //while end
$fclose(fid);
fid = $fopen("rom.mif","w");
$fdisplay(fid,"WIDTH=32;");
$fdisplay(fid,"DEPTH=4096;");
$fdisplay(fid,"ADDRESS_RADIX=HEX;");
$fdisplay(fid,"DATA_RADIX=HEX;");
$fdisplay(fid,"CONTENT BEGIN");
for(i=0;i<(MEM_DEPTH/4);i=i+1)
$fdisplay(fid,"%h : %h%h%h%h;",i,mem[i*4+3],mem[i*4+2],mem[i*4+1],mem[i*4]);
$fdisplay(fid,"END;");
$fclose(fid);
// fid = $fopen("rom.txt","w");
//
// for(i=0;i<(MEM_DEPTH/4);i=i+1)
// $fdisplay(fid,"%h%h%h%h",mem[i*4+3],mem[i*4+2],mem[i*4+1],mem[i*4]);
//
// $fclose(fid);
end
function [3:0] asc2hex;
input [7:0] din;
begin
if(din<="9") asc2hex = din - "0";
else if( (din>="A") && (din<="F")) asc2hex = din - "A" + 4'ha;
else if( (din>="a") && (din<="f")) asc2hex = din - "a" + 4'ha;
else asc2hex = 0;
end
endfunction
endmodule
hex转mif文件 verilog的更多相关文章
- 生成mif文件的几种方法总结
mif文件就是存储器初始化文件,即memory initialization file,用来配置RAM或ROM中的数据.生成QuartusII11.0可用的mif文件,有如下几种方式: 方法1:利用Q ...
- FPGA工程中用C语言对文件进行处理_生成mif文件
本博客中有用verilog处理文件数据的代码,本博文采用C 处理文件中的数据. 有时候要生成一个mif文件—— altera memory initial file.本次工程中我得到的是一个大型的数 ...
- 使用matlab生成sine波mif文件
使用matlab生成sine波mif文件 作者:lee神 在使用altera 的FPGA中的rom过程中常常会使用到.mif文件或.hex文件.对于初学者,无论mif还是hex都是很令人疑惑的东西,这 ...
- 用matlab生成mif文件
在FPGA中,rom模块的初始化文件分为两种,一种是hex文件,另外一种是mif文件,这两种文件都可以通过Quartus进行手工创建,进行手工输入数据,也可以借助于专用的文件编辑器完成编辑. 在此介绍 ...
- 使用MATLAB一键制作mif文件
本文档主要讲解实现一个16384(2^14)点的14位正弦波数据mif格式文件的生成,使用此文件,我们便可以在FPGA上基于直接数字合成(DDS)原理生成标准的正弦波,即实现信号发生器的功能.关于DD ...
- fpga rom 初始化mif文件生成
mif文件的格式 width= depth= address_radix= data_radix= content begin 00: ; 01: ; 02: ; .... end; 关 ...
- mif文件C语言生成
1:正弦波 用函数 sin (x * π/180°) /************************************************** 正弦波 mif 生成 ********** ...
- mif文件生成方法
mif文件就是存储器初始化文件,即memory initialization file,用来配置RAM或ROM中的数据.常见生成方法: Quartus自带的mif编辑器生成 mif软件生成 高级编程语 ...
- 如何生成各种mif文件,绝对经典!!!
mif文件生成模板,只需要5步,很简单!!!!! 先说明如何操作,1-2-3-4-5步,后面附上模板!!! 下面以汉字去模演示过程: 1.取模软件设置:注意这里是设置的输出数据的格式!!!!!!!!! ...
随机推荐
- Spring XML文件配置
singleton不能创建多对象(默认) <?xml version="1.0" encoding="UTF-8"?> <beans xmln ...
- Linux安装jdk-8u161-linux-x64
最基本的操作,有一些细节需要处理,这次主要列出来步骤,其实步骤在网上一搜就有,这里只是根据个人的操作进行一些整合和注意事项的提醒罢了. 1.卸载原先的java jdk 这一步的目的是,很多Linux版 ...
- jQuery-4.动画篇---动画切换的比较(toggle与slideToggle以及fadeToggle的比较)
jQuery中toggle与slideToggle以及fadeToggle的比较 操作元素的显示和隐藏可以有几种方法.例如: 改变样式display为none 设置位置高度为0 设置透明度为0 都能达 ...
- @RequestParam 和 @ PathVariable 的区别
@RequestParam 和 @ PathVariable 的区别http://localhost:8080/Springmvc/user/page.do?pageSize=3&pageNo ...
- java高级进阶
- 20155219付颖卓 Exp3 免杀原理与实践
1.基础问题回答 (1)杀软是如何检测出恶意代码的? 杀毒软件有一个病毒的特征码库,通过识别恶意代码的特征码或者特征片段检测恶意代码 杀毒软件通过动态检测对象文件的行为来识别恶意代码,如果他的行为在一 ...
- SimpleDateFormat将月/日/年 时分秒转换为年-月-日 时:分:秒
String expirTime = ”12 / 27 / 2018 12: 00: 00 AM”;SimpleDateFormat in = new SimpleDateFormat("M ...
- Python变量和常量
1.什么是变量 变量:核心在于变和量儿字,变->变化,量->状态如何定义? x=1 变量名 变量赋值符号:= 变量值:1 其中变量名又称为标识符: 1. 可以是字母,数字,下划线的任意组合 ...
- Notepad++ 配置python
Notepad++配置: 1. 运行命令配置 单击运行,出现对话框 在弹出的窗口里填入:cmd /k cd "$(CURRENT_DIRECTORY)" & python ...
- Sublime3安装及配置
1.官网下载 2.安装后输入密钥 ----- BEGIN LICENSE -----sgbteamSingle User LicenseEA7E-11532598891CBB9 F1513E4F 1A ...