FPGA——ROM的使用与仿真,signaltap II的使用,in-system memory content editor的使用

ROM的使用

  1. 使用quartus实例化字符宽度为8,深度为256的单端口一个ROM,指定mif文件的位置并进行仿真,仿真脚本如下所示

  2. `timescale 1ns/1ns
    `define clk_period 20
    
    module tb_rom_1port();
    
    reg [7:0]addr;
    reg clk;
    wire [7:0]q;
    
    rom_1port	rom_1port_inst (
    	.address ( addr ),
    	.clock ( clk ),
    	.q ( q )
    	);
    
    initial clk = 1'b1;
    always#(`clk_period/2) clk = ~clk;
    
    integer i = 0;
    integer j = 0;
    initial begin
    	addr = z;
    	#2001;
    	for(i=0; i<=10; i=i+1)begin
    		for(j=0; j<=255; j=j+1)begin
    			addr = j;
    			#`clk_period;
    		end
    	end
    	#2000;
    	$stop;
    end
    endmodule 
    
  3. ROM仿真1

  4. 使用上面的脚本对定制的rom仿真后波形如下所示,图3是输出q为字符格式,图5输出为波形的格式(modelsim的功能之一,将数字转换为波形),从图4中可以看出数据的输出同ram一样,地址在时钟上升沿被采样,在下一拍时钟被输出

  5. 这里要说的并不仅仅是仿真,我们写一个简单的顶层文件,使用signaltap II以及in-system memory content editor,顶层文件如下

  6. module rom_top(	clk,	rst,	q);
    input clk;
    input rst;
    output [7:0]q;
    reg [7:0]addr;
    rom_1port	rom_1port (
    	.address ( addr ),
    	.clock ( clk ),
    	.q ( q )
    	);
    always@(posedge clk or negedge rst)
    	if(!rst)
    		addr <= 8'd0;
    	else 
    		addr <= addr + 1'd1;
    endmodule 
    
  7. 建立顶层文件后,进行仿真与编译并且新建一个stp文件,

    1. stp文件是在可视化界面中设置一个脚本
    2. 将时钟,采样的深度,需要观察的信号都设置好后保存
    3. 在工程中进行制定引脚等信息,重新进行编译
    4. 完成后打开之前保存好的stp文件‘
    5. 连接仿真器,将编译好的文件烧写进去,
    6. 选中实例信息,运行后就得到了如下所示
  8. image-20200604162509678
  9. 操作成功后如图所示

  10. 通过设置我们观察了rom输出随着地址的变化

  11. 通过我们在signaltap II中观察到的信号可以看到基本与我们仿真中的相同

  12. 在Tools中打开in-system memory content editor,基本界面如下

  13. in_system_memory_content_editor
  14. 全是问号的原因是因为打开后并没有采集信号,接下来我们对rom进行采集

  15. 同时我们通过这个工具可以导入另一个已经准备好的mif文件,导入后使用signaltap II进行观察

  16. signaltapII三角波

  17. 可以看到将之前的正弦波替换成了三角波

posted @ 2020-06-04 21:30  嗨喽来了  阅读(575)  评论(0编辑  收藏  举报