当前位置: 首页 > news >正文

FPGA教程系列-Vivado中读取ROM中数据

FPGA教程系列-Vivado中读取ROM中数据

  • 生成coe文件教程

https://blog.csdn.net/ccsss22/article/details/124441036

本实验主要读取rom中的数据。rom中存储的数据为coe文件,用matlab可以生成。

生成coe文件


clc;
clear;
close all;
warning off;
addpath(genpath(pwd));
% --- 1. Parameters ---
num_points = 512;         % Number of points in the sine wave (e.g., 256 for a 256-depth ROM)
amplitude_scale = 1023;   % Scaling factor to match the desired integer range.% 1023 corresponds to a 10-bit unsigned range (0-1023) or% an 11-bit signed range centered at 0 (-1023 to 1023).% We will generate a signed sine wave.
% --- 2. Generate the Sine Wave ---
% Create a time vector from 0 to 2*pi for one full cycle
t = linspace(0, 2*pi, num_points);
% Generate the floating-point sine wave
y_continuous = sin(t);
% Quantize and scale the wave to integer values
% The result will be in the range [-1023, 1023]
y_quantized = round(amplitude_scale * y_continuous);
% --- 3. Write to .coe File ---
file_name = 'sine_wave.coe';
fid = fopen(file_name, 'w');
% Check if the file opened successfully
if fid == -1error('Could not open file for writing.');
end
% Write the .coe file header
fprintf(fid, 'memory_initialization_radix=10;\n');
fprintf(fid, 'memory_initialization_vector =\n');
% Write the data vector
for i = 1:length(y_quantized)fprintf(fid, '%d', y_quantized(i));    % Add a comma after each value except the last oneif i < length(y_quantized)fprintf(fid, ',\n');elsefprintf(fid, ';'); % End the vector with a semicolonend
end
% Close the file
fclose(fid);
fprintf('Successfully generated %s with %d data points.\n', file_name, num_points);
% --- 4. Plot the Generated Wave for Verification ---
figure;
plot(y_quantized);
title('Generated Quantized Sine Wave');
xlabel('Sample Index');
ylabel('Amplitude (Integer Value)');
grid on;
axis tight; % Fit the axes tightly to the data

用上述程序,生成一个sine_wave.coe文件,生成的波形如图:

image

生成IP核

本仿真采用ROM核,位数11位,深度512.

image

image

编写top文件

`timescale 1ns / 1psmodule rom_top(
input clka,
input rsta,
output signed[10:0] douta);reg[8:0] addra;
always @(posedge clka or posedge rsta)
beginif(rsta)beginaddra <= 9'd0;end
else beginif(addra == 9'd511)addra <= 9'd0;elseaddra <= addra+ 9'd1;end
endblk_mem_gen_0 blk_mem_gen_u (.clka(clka),            // input wire clka.rsta(rsta),            // input wire rsta.addra(addra),          // input wire [8 : 0] addra.douta(douta),          // output wire [10 : 0] douta.rsta_busy()  // output wire rsta_busy
);endmodule

编写Testbench

`timescale 1ns / 1psmodule rom_top_tb;
reg clka;
reg rsta;
wire signed[10:0]douta;
rom_top rom_top_u(
.clka  (clka),
.rsta  (rsta),
.douta (douta)
);
initial
begin
clka = 1'b1;
rsta = 1'b1;
#100
rsta = 1'b0;
end
always #5 clka = ~clka;
endmodule

仿真分析

最终输出的结果,就是读取coe文件中的波形,即sin函数。当然可以用matlab生成各种各样的波形来进行读取。

image

工程文件:https://download.csdn.net/download/fantasygwh2015/92292030

http://www.dtcms.com/a/609762.html

相关文章:

  • 网站怎么添加模块鹿寨建设局网站
  • 响应式外贸网站案例国外ps网站
  • springcloud feign远程调用请求参数对象变成linkhashmap处理
  • “耐达讯自动化Profibus总线光端机在化工变频泵控制系统中的应用与价值解析”
  • centos7.2安装cacti1.2.27
  • 将 vue3 项目打包后部署在 springboot 项目运行
  • 福州短视频seo网站建筑网站首页大图
  • 阿根廷网站后缀毕业设计网站成品
  • 性能相关指标
  • 数据结构--6:优先级队列(堆)
  • ESP32 Wsl2 环境搭建
  • Elasticsearch:如何创建知识库并使用 AI Assistant 来配置连接器
  • Blender学习笔记(04)-- 选中实体的一部分,单独设置颜色
  • 哪个网站做攻略比较好品牌vi设计案例欣赏ppt
  • 珠海市网站建设企业网站编辑给续南明做的封面
  • 国产化Excel开发组件Spire.XLS教程:Python将列表导出为CSV文件(含一维/二维/字典列表)
  • 接口自动化测试框架实战(Pytest+Allure+Excel)
  • 苹果质量检测与分类 - YOLO13结合RFCAConv实现
  • YZ系列工具之YZ09: VBA_Excel之读心术
  • 三芯联动:“通信 + 供电 + 主控”的安全闭环与场景革命
  • EXCEL 数字编码化排序(如部门层级排序)
  • sse,短轮询,长轮询,webSocket
  • 芦笋嫩茎形态分类与识别_YOLO11-C3k2-MambaOut-SFSC模型实现_1
  • 昆明专业网站营销北京工程建设交易平台
  • 衡阳网站搜索引擎优化wordpress如何设水印图片
  • 对Docker部署的MySQL中的数据进行备份恢复
  • AI 时代企业新形态:超级个体与多智能体
  • 夜场酒吧娱乐ktv类企业网站源码网上花店网页制作素材
  • wordpress 微博链接地址南京百度网站快速优化
  • 新操作系统