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.取模软件设置:注意这里是设置的输出数据的格式!!!!!!!!! ...
随机推荐
- ElasticSearch CPU和内存占用高的优化记录
公司最近使用ElasticSearch作为数据报表汇总引擎.上线三个月累计数据800万,但是今天突然大面积出现查询超时,上服务器查看服务运行情况,发现cpu使用率高达300% mem 使用率也到了90 ...
- WEB学习笔记13-高可读性的HTML之精简HTML代码/过时的块状元素和行内元素
<a id="more-intro">点击此处 <img src="down-arrow.png" /></a> (1)删除 ...
- spring cloud_1_mm_ribbon
ji接上文 ribbon做请求分发负载均衡 ribbon 配置: server.port=9999 spring.application.name=ribbon-consumer #stores.ri ...
- 20164322韩玉婷 -----EXP4 恶意代码分析
1.实践目标 1.1是监控你自己系统的运行状态,看有没有可疑的程序在运行. 1.2是分析一个恶意软件,就分析Exp2或Exp3中生成后门软件:分析工具尽量使用原生指令或sysinternals,sys ...
- 第四次Scrum冲刺----Life in CCSU
一.第四次Scrum任务 小组GitHub地址链接 个人GitHub地址链接:https://github.com/2505486985/FirstScrum 继续上次完成的任务,这次完成校园服务中的 ...
- 只有mdf文件和ldf文件--怎么恢复数据库
1.将mdf和ldf放到你电脑的路径中. 2.执行以下语句 USE master; GO CREATE DATABASE DBName ON (FILENAME = 'C:\Program Files ...
- 我的linux部署nginx步骤记录
http://www.runoob.com/linux/nginx-install-setup.html 安装prce找不到GCC c++文件 解决方法: yum install gcc-c++^C ...
- Merging one UE4 project into another.
Merging can be done by right clicking on folder in the content directory in the editor and selecting ...
- node连接mongodb(简略版)
1.先通过配置启动mongodb,然后新建db.js 已经对相对应的数据库操作增删改查封装完成. //这个模块里面封装了所有对数据库的常用操作 var MongoClient = requir ...
- 在Django中运行ExtJS 事例
网上关于ExtJS的事例挺多的,但是在Django中使用ExtJS挺少的,当然了,一些大牛觉得ExtJS运用在页面上是很简单的事,但是对于菜鸟来说,实在有点困难. 我这个例子是用在了sublime3这 ...