使用matlab/C语言/verilog分别生成coe文件

8 篇文章 15 订阅
6 篇文章 1 订阅

        之前已经写过一个如何使用matlab生成coe文件,matlab自行运算生成三角波、正弦波等数据,并保存为COE文件。可跳转下面的网址进行查阅。

使用matlab生成正弦波、三角波、方波的COE文件_三角波文件.coe-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/yindq1220/article/details/125173035?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522171342842616800182769139%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=171342842616800182769139&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-1-125173035-null-null.nonecase&utm_term=coe&spm=1018.2226.3001.4450        但是,如果想直接把一个文件的二进制码流整体转化成coe文件(注意并不是文件内的内容,而是文件本身),又该怎么操作呢?所有的文件都是按照二进制码保存的,只要转换成COE文件,FPGA就能通过发送该COE文件,实现发送ZIP文件或者其他任何格式的文件。

        本文就是解决了这个问题。

一、MATLAB生成coe文件

% 读取图像
file = fopen('1.zip');
data = fread(file);%读取文件存在data中
fclose(file);

fid = fopen('zip.coe','wt');    %创建一个名为zip.coe的文件
%- COE 文件前置格式
fprintf( fid, 'MEMORY_INITIALIZATION_RADIX = 16;\n');                     
fprintf( fid, 'MEMORY_INITIALIZATION_VECTOR =\n');
%- 写数据
for i = 1:1:length(data) %读取所有的data数据
    if(i == length(data))
        fprintf( fid, '%X;',data(i));%最后一行为分号
    else
        fprintf( fid, '%X,\n',data(i));%写入目标文件
    end
end


fclose(fid);%关闭文件

二、C语言生成coe文件


#include <stdio.h>
#include <vector>


int main()
{
    FILE *rdfile = fopen("1.zip","rb");
    FILE *wrfile = fopen("zip.coe","w");
    if (rdfile == NULL) {
            printf("Failed to open file\n");
            return -1;
        }
    
    int data;
    fprintf(wrfile, "memory_initialization_radix=16;\n");
    fprintf(wrfile, "memory_initialization_vector=\n");
    
    std::vector<unsigned char> buffer;
    while (fread(&data, sizeof(char), 1, rdfile) == 1) {
        buffer.push_back(data);

    }
    
    for (int i = 0; i< buffer.size(); i++) {
        if(i==buffer.size())
            fprintf(wrfile, "%X;", buffer[i]);
        else
            fprintf(wrfile, "%X,\n", buffer[i]);
    }


    fclose(rdfile);
    fclose(wrfile);
    return 0;
}

三、verilog生成coe文件

         本来打算写verilog读文件二进制流,保存为COE文件的,但是使用$fread、$fgetc等函数发现结果有点问题。并且matlab和C读取文件二进制码流生成COE也足够用了,此处也就不再深究了。只举例一个最简单的固定数据输出为COE文件的代码。注意下,生成coe文件的代码涉及到读写文件,只能仿真运行。


module coe_gen(
);

integer file;
integer i;

initial begin
    file = $fopen("C:/Users/ADMIN/Desktop/out.coe", "w"); // 打开文件以便写入
    if (file == 0) begin
        $display("无法打开文件!");
        $finish;
    end
    
    $fwrite(file,"memory_initialization_radix=16;\n"); // 写入一行文本
    $fwrite(file,"memory_initialization_vector=\n"); // 写入另一行文本

    $fwrite(file,"%x,\n",8'h00);
    $fwrite(file,"%x,\n",8'h10);
    $fwrite(file,"%x,\n",8'h20);
    $fwrite(file,"%x,\n",8'h30);
    $fwrite(file,"%x,\n",8'h40);
    $fwrite(file,"%x,\n",8'h50);
    $fwrite(file,"%x;",8'h60); //最后一个数据


    $fclose(file); // 关闭文件
end



endmodule

 

  • 23
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值