FPGA寄存器 Vivado IP核

1.  今日任务

小梅哥视频:21A 认识并理解FPGA中的存储器模型_哔哩哔哩_bilibili

                      21B 学习使用Vivado中的存储器资源_哔哩哔哩_bilibili

2. FPGA中的存储器类型

只读ROM                 eg.CMOS摄像头初始化、DDS信号发生器(固定波形数据的形式)

                数据量比较多

                数据值已知

                数据值不需要更改

可读可写RAM                 eg. DDS信号发生器(波形可调)
                数据量相对较大

                数据要求能被更改

                数据要能重复使用

                                         eg. 高速数据采集系统

                数据速率不匹配

                数据消耗速率  慢于  数据生产速率

                数据总量有限

                                         eg. 以太网 or USB传输
                数据速率不匹配

                数据消耗速率  快于  数据生产速率

                数据消耗时要求连续

3.  存储器资源使用

4.  matlab生成coe文件

【FPGA】:matlab生成coe文件-CSDN博客

sin-cos wave

%% sin-cos wave data write in coe file
clear all ;
clc ;

width = 10;//与幅值有关
N = 4096 ;  // depth  数据个数
y = zeros(N , 1) ;
for i = 1:1:N 
    x = i ;
    %y(i,1) = ceil( 127*sin(x*2*pi/N) ) + 127 ;
    y(i,1) = ceil( 127*cos(x*2*pi/N) ) + 127 ;
end   
plot(y);
hold on;
fid = fopen('cos_4096.coe','wt');    
%- standard format
fprintf( fid, 'MEMORY_INITIALIZATION_RADIX = 10;\n');                     
fprintf( fid, 'MEMORY_INITIALIZATION_VECTOR =\n');
%- write data in coe file
for i = 1:1:N
    fprintf(fid,'%d,\n',y(i,1));  
end
fclose(fid);

triangle wave

%% triangle wave data write in coe file
clear all ;
clc ;
width = 10;//与幅值有关
N = 4096 ;  // depth  数据个数
y = zeros(N , 1) ;
for i = 1:1:N 
    if(i < 2049)
        y(i,1) = fix( (i/8) - 1 ) ;
    else
        y(i,1) = fix( ((4096 - i )/8) ) ;
    end
end   
plot(y);
hold on;
fid = fopen('triangle_4096.coe','wt');    
%- standard format
fprintf( fid, 'MEMORY_INITIALIZATION_RADIX = 10;\n');                     
fprintf( fid, 'MEMORY_INITIALIZATION_VECTOR =\n');
%- write data in coe file
for i = 1:1:N
    fprintf(fid,'%d,\n',y(i,1));  
end
fclose(fid);

rectangle wave
%% rectangle wave data write in coe file
clear all ;
clc ;
width = 10;//与幅值有关
N = 4096 ;  // depth  数据个数
y = zeros(N , 1) ;
for i = 1:1:N 
    if(i < 2049)
        y(i,1) = 255 ;
    else
        y(i,1) = 0 ;
    end
end   
plot(y);
hold on;
fid = fopen('rectangle_4096.coe','wt');    
%- standard format
fprintf( fid, 'MEMORY_INITIALIZATION_RADIX = 10;\n');                     
fprintf( fid, 'MEMORY_INITIALIZATION_VECTOR =\n');
%- write data in coe file
for i = 1:1:N
    fprintf(fid,'%d,\n',y(i,1));  
end
fclose(fid);
 

5.  rom_tb

`timescale 1ns / 1ns

module rom_1_tb(    );
        reg  clka;
        reg  ena;
        reg  [11 : 0] addra;
        wire  [9 : 0] douta;
     blk_mem_gen_0   rom_1_test(
                          .clka(clka),
                          .ena(ena),
                          .addra(addra),
                          .douta(douta)
                            );
        initial clka = 1 ;
        always #10 clka = ~clka ;
        
        initial
        begin
                ena = 0 ; 
                addra = 0 ;
                #201;
                ena = 1 ;
                repeat(8000)
                begin 
                    addra = addra + 1 ;
                    #20;
                end
                #200;
        $stop;
        end
        

endmodule
 

  • 26
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值