FPGA学习笔记_ROM核调用与调试

2023-11-18

FPGA学习笔记

ROM核调用与调试

1. ROM存储器IP核的使用
2. 创建.mif文件
3. In system memory content editor内存查看工具的使用
4. Signal tapII工具使用
5. Verilog 代码
6. Modelsim仿真
7. FPGA板级验证

ROM核调用与调试

  • 目标:调用Quartus软件中提供的ROM核并进行系统设计
  • 现象:将一组数据(三角波形表)存储在FPGA中的使用IP核构建的片上rom中,开发板上电后,系统开始开始从rom中读取数据,并将数据直接通过并口输出。通过signal tap II软件实时抓取并口的数据,显示(三角波形)。然后使用quartus软件中提供的in system memory content editor工具在线更改rom中的数据(正弦波形),然后再次观察signal tapII工具抓取到的波形数据
  • 知识点:
  1. ROM存储器IP核的使用
    创建.mif文件
  2. In system memory content editor内存查看工具的使用
  3. Signal tapII工具使用
    嵌入式逻辑分析仪/片上逻辑分析仪,能够直接抓取芯片节点数据或者外部IO口数据,通过JTAG口与PC机相连。PC机上的quaturs软件中提供了signal tap II 软件,通过JTAG线与片上逻辑分析仪通信,将片上逻辑分析仪抓取到的设计中的节点信息,实时发送给PC机,PC机通过singal Tap II软件显示数据。

在这里插入图片描述

1. ROM存储器IP核的使用

  • (1). IP Catalog, 搜索ROM,双击ROM:1-port,根据需求设置数据位宽,rom内存等信息,点击next

在这里插入图片描述

  • (2). 根据需求选择寄存端口,点击next

在这里插入图片描述

  • (3). 选择.mif文件,点击next

在这里插入图片描述

  • (4). 点击next

在这里插入图片描述

  • (5). 点击finish

在这里插入图片描述

  • (6). 生成.qip文件,右键点击,设置set as top level entity, 分析和综合

在这里插入图片描述

  • (7). 编写testbench,仿真验证功能

2. 创建.mif文件

  • (1). 创建新的文件,选择memory initialization file, 点击OK

在这里插入图片描述

  • (2). 设置位宽和内存深度,点击OK,生成如下文件

在这里插入图片描述
在这里插入图片描述

  • (3). 根据需求更改内存值后,点击file,save as,设置好名称,将.mif文件保存在工程文件夹内,.mif文件设置完成

在这里插入图片描述
在这里插入图片描述


3. in system memory content editor内存查看工具的使用

  • (1). tool–>in system memory content editor

在这里插入图片描述

  • (2). 显示如下界面,点击读取,读取rom内的数据

在这里插入图片描述

  • (3). 右键点击rom,选择import data from file

在这里插入图片描述

  • (4). 选择实现编辑好的.mif文件,点击open

在这里插入图片描述

  • (5). 点击写入,则文件内的数据将被写入rom中

在这里插入图片描述

  • (6). 写入后的数据在signal tapII内显示

在这里插入图片描述


4. signal tapII工具使用

  • (1). 新建文件,点击signal tap logic analyzer file

在这里插入图片描述

  • (2). 按顺序添加clk信号

在这里插入图片描述

  • (3).按顺序 添加待观测信号

在这里插入图片描述

  • (4). 设置完成后,点击file,设置名称和路径后,保存

在这里插入图片描述

  • (5). 根据设计,设置存储区深度,生成.stp文件

在这里插入图片描述

  • 逻辑分析仪保证采样时钟比待采样信号速率高
  • Sample depth:
    存储器深度,抓取的数据,相当于内部开了一个存储器,连续的抓取需要观测数据,由于速度非常快,所以要先将待观测的数据全部存储在存储器中,再从存储器中通过JTAG线,发送到电脑上,实时显示;否则由于JTAG本身速度不是特别高,无法传输50MHz的直接采样的数据,使用这种存储的方式来降速

在这里插入图片描述

  • (6). 按下面顺序运行逻辑分析仪

在这里插入图片描述

  • (7). 连续实时检测数据

在这里插入图片描述

  • (8). 将实时数据格式设置为线形图显示,形状如下

在这里插入图片描述
在这里插入图片描述


5. Verilog 代码

//----top---------------------------------------
module rom_top(

	input clk,
	input rst_n,
	output [7:0] q
);

	reg [7:0] addr;

rom uut(
		.address(addr),
		.clock(clk),
		.q(q)
	);

	always@(posedge clk or negedge rst_n)
		if(!rst_n)
			addr <= 8'd0;
		else
			addr <= addr + 8'd1;
endmodule

//----testbench------------------------------
`timescale 1ns/1ns
`define clock_period 20

module tb_rom;
	reg clk;
	reg [7:0] addr;
	wire [7:0] q;

	rom uut(
		.address(addr),
		.clock(clk),
		.q(q)
	);
	integer i;
	initial clk = 1;
	always #(`clock_period/2) clk = ~clk;
	
	initial begin
		addr =8'd0;
		for(i=0;i<2550; i=i+1)begin
		#(`clock_period);
		addr = addr + 8'd1;
		end
		#(`clock_period*50);
		$stop;
	end
endmodule


6. Modelsim仿真

  • 仿真波形调试
    右键点击信号,选择format–>analog(automatixc),将信号值转换为模拟值在这里插入图片描述

  • 三角波形

在这里插入图片描述

  • 正弦波形

在这里插入图片描述

4. FPGA板级验证

  • 波形由三角形转换为正弦形

在这里插入图片描述

在这里插入图片描述


【注】:个人学习笔记,如有错误,望不吝赐教,这厢有礼了~~~


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

FPGA学习笔记_ROM核调用与调试 的相关文章

  • 打印存储在 reg 类型变量中的有符号整数值

    如何打印存储在 8 位寄存器中的有符号整数值 声明为 reg 7 0 acc Using display acc d acc 它打印无符号值 正确的语法是什么 display功能 如果您声明reg as signed display将显示减
  • 是否有理由在 VHDL 和 Verilog 中初始化(而不是重置)信号?

    我从未初始化过信号 这样 任何缺少重置或分配的信号都将是未知的或已初始化 在一些参考代码中它们有初始化 这违背了我的愿望 此外 由于初始化不可综合 因此可能会出现模拟 综合不匹配的情况 在这种情况下有什么理由初始化信号吗 编辑 2011 年
  • verilog模块中的reg和wire有什么区别?

    在verilog模块中我们什么时候应该使用reg以及什么时候应该使用wire 我还注意到有时输出会再次声明为 reg 例如 D 触发器中的 reg Q 我在某处读过这个 过程赋值语句的目标输出必须是 reg 数据类型 什么是程序赋值语句 我
  • Quartus Prime 中的“多个常量驱动程序”Verilog 错误

    我正在致力于用 Verilog 设计一个有限状态机来表示堆栈 该模块如下 module state machine s Enable Clock Resetn c OF Err UF Err input 2 0 s input Enable
  • 计算数组中的个数

    我试图在 Verilog 中计算 4 位二进制数中 1 的数量 但我的输出是意外的 我尝试了几种方法 这是我认为应该有效的方法 但事实并非如此 module ones one in input 3 0 in output 1 0 one a
  • 简单赋值时不输出期望值

    当我将一些值分配给具有四位的变量时 当我简单地输出该值时 我会得到意想不到的结果 我以前从未见过这个 想知道我是否在语法上做错了什么 module main reg 3 0 x initial begin monitor b x x 001
  • 「Verilog学习笔记」游戏机计费程序

    专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点 刷题网站用的是牛客网 timescale 1ns 1ns module game count input rst n 异位复位信号 低电平有效 input clk 时
  • x 和 z 值在 Verilog 中到底代表什么?

    Verilog 标准定义了四种类型的位值 0 1 x 和 z 其中 0 表示低 1 表示高 x 表示未知 z 表示未驱动网络 有几个问题 x 是否意味着我们不知道该值是 0 还是 1 0 或 1 或 z 或者该值是未知的并且可以是 0 1
  • 如何在verilog中逐行读取文本文件?

    我有一个 SREC 文件 它是一个简单的文本文件 我想在 verilog 中逐行读取它 我怎样才能做到这一点 以下读取文件 每个时钟周期 1 行 预期的数据格式是每行一个十进制数 integer data file file handler
  • Verilog 最佳实践 - 递增变量

    我绝不是 Verilog 专家 我想知道是否有人知道这些增加值的方法中哪一种更好 抱歉 如果这个问题太简单了 Way A 在组合逻辑块中 可能在状态机中 some condition count next count 1 然后在一个连续块中
  • 如何获取值数组作为 plusargs?

    如何获取值数组作为参数 我需要从命令行获取一组未定义大小的命令 如何将这些参数放入数组或队列中 Eg CMDS READ WRITE READ N WRITE 它应该被带到一个数组中 value plusargs不支持数组 但支持字符串 看
  • 如何将时钟门映射到技术库单元

    我的设计中有以下时钟门 module my clkgate clko clki ena Clock gating latch triggered on the rising clki edge input clki input ena ou
  • Verilog 中的“net”代表什么?

    我刚刚开始学习Verilog 据我了解 Verilog有net数据类型 什么是net代表 网络就是这样一种数据类型 您不使用它来存储值 它们代表物理连接 您可以将线路视为一种网络数据类型 你可以去网上看看更多here http www ee
  • 在 Mac OS X 10.6.8 上用什么来编译和模拟 Verilog 程序?

    作为教学大纲的一部分 我需要模拟 Verilog 程序 但是 我的大学使用 Xilinx ISE 但它不适用于 Mac 因此 请帮助我提供最好的软件以及有关如何安装和使用它们的一些详细步骤 你可以尝试伊卡洛斯 Verilog http iv
  • 始终块中的 Veriloggenerate/genvar

    我试图让一个模块通过 ISE 12 4 中的语法检查 但它给了我一个我不明白的错误 首先是代码片段 parameter ROWBITS 4 reg ROWBITS 1 0 temp genvar c generate always pose
  • 向左旋转 verilog 大小写

    我的任务是用verilog编写一个16位ALU 当我做需要旋转操作数和进行2的补码加法和减法的部分时 我发现了困难 我知道如何用纸和铅笔解决这个问题 但我无法弄清楚如何在 Verilog 中做到这一点 例如 A表示为a15 a14 a13
  • 为什么 Verilog 不被视为编程语言? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 教授在课堂上说学生不应该说他们学会了用Verilog 编程 他说 Verilog 之类的东西不是用来编程的 而是用来设计的 那么 Verilog
  • 在测试台中显示信号名称/文字

    是否可以在 Verilog 中引用 显示信号的名称 文字 对于在 Verilog 测试台中创建通用信号检查功能来说 这将是一个有用的功能 我知道使用 display 时 m 将打印信号的范围 是否有显示信号名称的等效项 在 Verilog
  • 在 Verilog 程序中使用连续分配?

    在 Verilog 程序中使用连续赋值是否可能和 或有用 例如 是否有任何理由将assign里面一个always堵塞 例如这段代码 always begin assign data in Data end 此外 是否可以用这种方法生成顺序逻
  • reg 声明中的位顺序

    如果我需要使用 4 个 8 位数字 我会声明以下 reg reg 7 0 numbers 3 0 我对第一个和第二个声明 7 0 和 3 0 之间的区别感到很困惑 他们应该按什么顺序来 第一个是保留数字的大小 而第二个是保留数字的数量 还是

随机推荐