嵌入式ROM核的调用
本次设计的工具和源码在:http://download.csdn.net/detail/noticeable/9914766
课程目的:调用quartus II提供的rom(read only memory)进行系统项目设计
实验现象:将一组固定的波形数据以MIF的格式存储于fpga中使用IP核构建的片上ROM中,开发板上电后,系统从ROM 中读取数据,并将数据通过I/O口输出,使用signal TAP II取I/O口输出的数据,即可得到三角波形;并通过quartus II提供的in system memory content editor 工具在线更改ROM 中的数据,然后再次通过signal TAP II将更改后的波形读取出来。
知识点:1、mif文件的生成方法2、ROM IP核的使用。3、In-system memory content editor 内存查看工具的使用。4、signalTap II 调试工具的简单使用
开发流程:
首先,自己创建对应波形的mif文件,以便后面调用rom IP核的时候使用
可以自己创建一个文本,然后在文件中输入自己想自己想要显示的波形的数据再保存,但是这样设计使得设计过于繁琐,这里推荐使用软件mif_maker2010直接生成.mif文件(软件在源码压缩包中)
打开软件
设置全局参数
本次设计为256个数据长度8位位宽
选择期望生成的波形,保存即可得到相应波形对应参数的mif文件。
新建工程,调用rom ip核
之后直接next到finish即完成生成rom文件了。
将IP核设置为顶层文件
然后编写IP核的testbench文件
`timescale 1ns/1ns
`define clock_period
module rom_tb;
reg [:]addr;
reg clk;
wire [7:0]q;
rom rom (
.address(addr),
.clock(clk),
.q(q));
initial clk=;
always#(`clock_period/)
clk=~clk; integer i;
initial
begin
addr=;
for(i=;i<=;i=i+)begin
#`clock_period;
addr=addr+;
end
#(`clock_period*);
$stop;
end endmodule
设定仿真路径进行仿真,可以看到q成功的将mif文件提取出来了,并通过仿真加强对romIP核的理解
选中q,右键修改显示格式,即可看到仿真出来的模拟的锯齿波形。
将mif未见改为正弦波的mif文件观察
此时发现波形有断层
这是因为选择的显示格式为无符号的,将格式改为有符号的即可
在这里,波形发生器的仿真设计已经完成了(对于控制频率,其实就是一个控制地址变化的方式)。
新建一个rom_top文件,将其设置为顶层文件,其目的是设计地址发生模块:
module rom_top(clk,
rst_n,
q
); input clk;
input rst_n;
output [:]q;
reg [:]addr;
rom rom_1 (
.address(addr),
.clock(clk),
.q(q)); always@(posedge clk or negedge rst_n)
if(!rst_n)
addr<=;
else
addr<=addr+; endmodule
下面为了使in system memory content editor 工具在线修改ROM中的数据,需要对IP核进行设置
对引脚进行分配,其中q[0]~q[7]对应开发板上GOIP09~GPIO2
全编译后,通过FPGA内部搭建一个片上的逻辑分析仪,抓取rom里的文件:
新建一个signal tap II logic analyzer file文件
保存在工程目录下
将逻辑分析仪工具添加到工程文件夹中,对工程进行全编译
将工程生成的.sof文件下载到FPGA开发板中,进行板级验证,烧写完成后打开logic.stp文件
即可看到成功显示的正弦波波形了
下面通过in system memory content editor 工具对rom 内容进行更改
可以看到signalTap II logic analyzer中显示的波形变为了锯齿波了。
至此,整个设计就完成了
嵌入式ROM核的调用的更多相关文章
- 嵌入式FIFO核的调用
本次设计源码下载地址:http://download.csdn.net/detail/noticeable/9915523 课程目标:学习调用quartus II 软件的FIFO(先进先出)IP核,并 ...
- modelSIM仿真ROM核报错
用Quartus Prime 15.1调用modelSIM进行RTL仿真,modelSIM的transcript框框总是有Failed to Open Readmem File提示. 错误原因:IP核 ...
- 移动工程后,打开ROM核无配置信息
问题: 从他人处下载的ISE工程,打开dw51的ROM IP核,无配置信息,为block memory generator的初始配置,并显示无法找到coe文件 原因:ROM配置过程中的部分内容丢失导致 ...
- FPGA分频与倍频的简单总结(涉及自己设计,调用时钟IP核,调用MMCM原语模块)
原理介绍 1.分频 FPGA设计中时钟分频是重要的基础知识,对于分频通常是利用计数器来实现想要的时钟频率,由此可知分频后的频率周期更大.一般而言实现偶数系数的分频在程序设计上较为容易,而奇数分频则相对 ...
- FPGA开发随笔汇总
点击标题即可进入相关随笔. DE-SOC开发板VrilogHDL开发相关部分: (本过程需要Verilog HDL 的基本语言基础) 1.FPGA的发展史及FPGA 的基础架构 2.首先看一下友晶DE ...
- 【lattice软核】ROM的使用
=======================>>>>> 一.ROM核调用:==================>>>>> ======== ...
- 基于Vivado调用ROM IP core设计DDS
DDS直接数字式频率合成器(Direct Digital Synthesizer) 下面是使用MATLAB生成正弦波.三角波.方波的代码,直接使用即可. t=:*pi/^:*pi y=0.5*sin ...
- System Generator 生成IP核在Vivado中进行调用
System Generator 生成IP核在Vivado中进行调用 1.首先在Simulink中搭建硬件模型 2.查看仿真结果 3.资源分析与时序分析 4.启动vivado,关联生成的IP核 5.调 ...
- 【小梅哥SOPC学习笔记】Altera SOPC嵌入式系统设计教程
Altera SOPC嵌入式系统设计教程 第1章 概述 SOPC(System On Programmable Chip,可编程的片上系统)是Altera公司提出来的一种灵活.高效的SOC解决方案.它 ...
随机推荐
- JVM-即时编译JIT
编译简介 在谈到JIT前,还是需要对编译过程有一些简单的了解. 在编译原理中,把源代码翻译成机器指令,一般要经过以下几个重要步骤: 什么是JIT1.动态编译(dynamic compilation)指 ...
- android toolbar效果2
只有一个按钮的情况 <resources> <string name="app_name">照片</string></resources& ...
- leetcode581
public class Solution { public int FindUnsortedSubarray(int[] nums) { , end = -, min = nums[n - ], m ...
- 《Effective Java 第三版》新条目介绍
版权声明:本文为博主原创文章,可以随意转载,不过请加上原文链接. https://blog.csdn.net/u014717036/article/details/80588806前言 从去年的3月份 ...
- JMeter处理返回结果unicode转码为中文
问题举例: { "ServerCode":"200","ServerMsg":"\u6210\u529f"," ...
- synchronized 和reentrantlock的优缺点
reentrantlock的优点 可以添加多个检控条件, 如果使用synchronized,则只能使用一个. 使用 reentrant locks 可以有多个wait()/notify() 队列. [ ...
- Sql Server数据库之流程定义变量和流程控制语句
一.局部变量和全局变量 1.声明局部变量 语法:declare @变量名 变量类型 2.给局部变量赋值 语法:set @变量名=值, select @变量名=值 区别:第一种方式用于普 ...
- 微信开发 invalid openid
微信开发时候测试号运行正常,换到正式号就会报invalid openid的错误. 看了微信问答系统里的答案,说是json格式的问题,但是我这边不是这个原因. 后来突然想到了,应该是AppId和AppS ...
- Linux下安装Anaconda
Anaconda官方下载地址: https://www.anaconda.com/download/ >>bash xxxxxx.sh >>reboot >>sud ...
- 客户端验证、tcp协议中多个客户端的同时在线
一.客户端验证 当在一个局域网内需要验证是否为合法的客户端连接时,我们需要写代码进行验证. Server端 import os import hmac import socket def auth(c ...