首页->【MATLAB Usage 】

7 1

function [ res ] = ui_hex_wr(hexfilenamepath,datpth)
%UI_HEX_WR 此处显示有关此函数的摘要
%   此处显示详细说明
%   MATLAB 下用于生成Questasim Verilog HDL的ram仿真的hex文件
%   hex file generation
%    input 2B
%   function is ok
%   输入参数
    % hexfilenamepath :hex输出文件路径,
    % indata :输入数据

    % datpth :输入dat文件,关于dat文件的创建,请参考相关例程。

% 输出数据
    %res       : 操作状态

fileID=fopen(hexfilenamepath,'wb');
filepthID=fopen(datpth,'rb');

    if fileID == -1
        
       res=-1;
       error('the file path is error ');
       
    end
    
    if filepthID == -1
       
       res=-1;
       error('the file path is error ');
    end
    
    i=0;
    
    d=fread(filepthID,'uint16');
    [~,col]=size(d');
    indata=d';
    while i<col
      hexgenerate(fileID,i,indata(1,i+1),0);
      i=i+1;
    end
    
endofhex(fileID);
%end of file
fclose(fileID);
fclose(filepthID);
res=1;

end

function [chksum,d1,d3]=chkdatasum(data)

    data=uint16(data);
    d1= (bitshift(data,-8));
    d3= (mod(data,uint16(hex2dec('100'))));
    chksum=mod((d1+d3),256);
    
end

function hexgenerate(fpathID,addr,data,type)
    datacnts=2;
    chksum0=datacnts;
    fprintf(fpathID,':%02X',datacnts);    %1 data cnts
    fprintf(fpathID,'%04X',addr);        %addr
    fprintf(fpathID,'%02X',type);
    fprintf(fpathID,'%04X',data);
    d0=chkdatasum(data);
    d1=chkdatasum(addr);
    
    d2=mod(d0+d1+chksum0,256);  
    chksum= hex2dec('100')-d2;
    chksum=mod(chksum,256);
    fprintf(fpathID,'%02X',chksum);
    fprintf(fpathID,'\n');
    
end

function endofhex(fpathID)

   fprintf(fpathID,':%02X',hex2dec('0')); % length of data in this  row
   fprintf(fpathID,'%04X',hex2dec('0'));      % load offset
   fprintf(fpathID,'%02X',hex2dec('1'));        % endof file
   fprintf(fpathID,'%X',hex2dec('ff'));          % chksum
   
end

楼主可见

  1. shwnyoo 1#

    实测有效,仅供参考