Matlab&Vivado生成ROM IP核
王志君老师布置的作业卷积的硬件实现和陈云霁老师的softmax函数的加速。
在完成卷积时参考了博主鹅要长大 的文章,以及王志君老师,陈云霁老师课堂所讲,王老师是集技术经验与美貌于一身的好老师,陈老师是大牛级别。这里一并感谢。
做一开头,因为要用ROM IP核。
**主要的步骤:
- 用matlab将灰度图像生成txt文件
- 生成coe文件
- 用vivado创建IP核
- Generator例化后会生成一个.mif文件
- modulesim的仿真
**
1.用matlab将灰度图像生成txt文件
%%灰度图像生成txt文件
[file,path]=uigetfile({'*.jpg';'*.bmp';'*.png'},'选择图片');
I_rgb=imread([path,file]);
subplot(221),imshow(I_rgb),title('原图')
I_gray=rgb2gray(I_rgb);
subplot(222),imshow(I_gray),title('灰度图')
fid=fopen('./lena.txt','wt'); %打开文件lena.txt
for i=1:size(I_gray,1) %遍历像素
for j=1:size(I_gray,2)
fprintf(fid,'%d',I_gray(i,j));
end
fprintf(fid,'\n'); %每行回车
end
fid=fclose(fid); %关闭文件
I_data=load('./lena.txt') %放在当前的目录下
结果

2.生成coe文件
%生成.coe_file
[m,n]=size(I_gray);
N=m*n; %数据长度,即存储器的深度
word_len=8; %每个单元的位数
data=reshape(I_gray',1,N); %变成特定的矩阵,1行n列
fid=fopen('lena.coe','wt'); %打开lena.coe文件
fprintf(fid,'MEMORY_INITIALIZATION_RADIX=16;\n'); %这两行不变,进制数
fprintf(fid,'MEMORY_INITIALIZATION_VECTOR=\n'); %数据
for i=1:N-1
fprintf(fid,'%x,\n',data(i));
end
fprintf(fid,'%x;\n',data(N)); %每个数据回车
fclose(fid);
结果

3.用vivado创建IP核
1.选择IP Catalog

2.Memories & Storages Elements->RAMs & RAMs & BRAM->block memory generator 



文件添加进去就OK
reference:
https://www.cnblogs.com/happyamyhope/
越是憧憬,越要风雨兼程。

浙公网安备 33010602011771号