🎎Matlab生成FPGA端rom初始化文件.coe
本文主打言简意赅。
函数源码
function gencoeInitialROM(width, depth, signal, filepath)% gencoeInitialROM - 生成 Xilinx ROM 初始化格式的 COE 文件%% 输入参数:% width - ROM 数据位宽% depth - ROM 数据深度% signal - 待写入的信号% filepath - 文件路径及文件名%% 输出参数:% 无% 检查输入信号长度,如果不够则报错if length(signal) < deptherror('信号长度不够深度的需求');end% 取信号的前 depth 位signal = signal(1:depth); % 计算最大绝对值max_val = max(abs(signal));if max_val == 0error('信号最大值为零,不能进行归一化处理。');end% 缩放因子scale_factor = 2^(width-1)-1;% 归一化信号并转换成对应位宽的整数signal = signal / max_val; signal = round(signal * scale_factor); % 自动添加 .coe 文件尾缀[~, ~, ext] = fileparts(filepath);if isempty(ext)filepath = [filepath, '.coe'];elseif ~strcmp(ext, '.coe')error('文件扩展名错误,应为 .coe');end% 创建 .coe 文件fid = fopen(filepath, 'w');if fid == -1error('无法创建文件,路径有问题?');end% 写入 COE 文件头fprintf(fid, 'memory_initialization_radix=10;\n');fprintf(fid, 'memory_initialization_vector=\n');% 向 .coe 文件中写入数据for i = 1:length(signal)if i < length(signal)fprintf(fid, '%d,\n', signal(i));elsefprintf(fid, '%d;\n', signal(i));endend% 关闭 .coe 文件fclose(fid);
end
使用示例
width = 8; % ROM 数据位宽
depth = 10; % ROM 数据深度
frequency = 1; % 正弦信号频率
sampling_rate = 10; % 采样率
filepath = 'sine_wave'; % 输出文件路径% 生成时间轴
t = (0:depth-1) / sampling_rate;% 生成正弦信号
signal = sin(2 * pi * frequency * t);% 调用 gencoeInitialROM 函数生成 COE 文件
gencoeInitialROM(width, depth, signal, filepath);disp('正弦信号 COE 文件已生成。');
得到的coe文件如下:
memory_initialization_radix=10;
memory_initialization_vector=
0,
78,
127,
127,
78,
0,
-78,
-127,
-127,
-78;