嵌入式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 20
                module rom_tb;
                reg [7:0]addr;
                reg clk;
                wire [7:0]q;
                        rom        rom (
                                                .address(addr),
                                                .clock(clk),
                                                .q(q));
                    initial clk=1;
                    always#(`clock_period/2)
                    clk=~clk;

                integer i;
                    initial
                    begin
                    addr=0;
                    for(i=0;i<=2550;i=i+1)begin
                    #`clock_period;
                    addr=addr+1;
                    end
                    #(`clock_period*50);
                    $stop;
                    end 

endmodule 

设定仿真路径进行仿真,可以看到q成功的将mif文件提取出来了,并通过仿真加强对romIP核的理解

选中q,右键修改显示格式,即可看到仿真出来的模拟的锯齿波形。

将mif未见改为正弦波的mif文件观察

此时发现波形有断层

这是因为选择的显示格式为无符号的,将格式改为有符号的即可

在这里,波形发生器的仿真设计已经完成了(对于控制频率,其实就是一个控制地址变化的方式)。

新建一个rom_top文件,将其设置为顶层文件,其目的是设计地址发生模块:

module rom_top(clk,
                                        rst_n,
                                        q
                                        );

                input clk;
                input rst_n;
                output [7:0]q;
                reg [7:0]addr;
                rom        rom_1 (
                                                .address(addr),
                                                .clock(clk),
                                                .q(q));

                    always@(posedge clk or negedge rst_n)
                                    if(!rst_n)
                                    addr<=0;
                                    else
                                    addr<=addr+1;

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中显示的波形变为了锯齿波了。

至此,整个设计就完成了

时间: 2024-10-08 20:48:49

嵌入式ROM核的调用的相关文章

嵌入式FIFO核的调用

本次设计源码下载地址:http://download.csdn.net/detail/noticeable/9915523 课程目标:学习调用quartus II 软件的FIFO(先进先出)IP核,并通过仿真,了解其时序. 实验现象:通过quartus II 调用FIFO IP核,并进行不同形式的配置,通过仿真验证其接口时序. 知识点:FIFO IP核的使用. FIFO是什么?有什么用? FIFO 即先进先出存储器,是一个在FPGA中使用到的具有先进先出特性的一个存储器,其常被用来作为数据的缓存

三星嵌入式四核4412开发板开源平台,助您快速开发新产品

POP 封装 长宽:5CM * 6CM,高度 1.5MM,320 个引脚(80 * 4):板载 1GB 内存,电源管理: SCP 封装 长宽:6CM * 7CM,高度 1.5MM,320 个引脚(80 * 4): SCP 板载 1G 或者 2G 内存,电源管理: 底板 iTOP-4412 全能版底板如下图所示: 屏幕 屏幕尺寸:9.7寸电容屏 分辨率:1024*768 核心板参数 尺寸:6cm*7cm 高度:连同连接器在内0.26cm CPU:Exynos4412,四核Cortex-A9,主频为

C语言与汇编的嵌入式编程:汇编调用函数(两数交换)

编写一个两数交换函数swap,具体代码如下: #include<stdio.h> void swap(int *a,int *b) { int temp; temp = *a; *a = *b; *b= temp; //printf("a=%d,b=%d,temp=%d\n",a,b,temp); } void main(){ int a=0; int b=0; char *str1="a=%d,b=%d\n"; printf("++++++\

基于Vivado调用ROM IP core设计DDS

 DDS直接数字式频率合成器(Direct Digital Synthesizer) 下面是使用MATLAB生成正弦波.三角波.方波的代码,直接使用即可. 1 t=0:2*pi/2^12:2*pi 2 y=0.5*sin(t)+0.5; 3 r=ceil(y*(2^8-1)); %将小数转换为整数,ceil是向上取整. 4 fid = fopen('sin.coe','w'); %写到sin.coe文件,用来初始化sin_rom 5 fprintf(fid,'MEMORY_INITIALIZAT

quartus ip核破解

在证书文件中添加一段: FEATURE 6AF7_0012 alterad 2035.12 permanent uncounted E75BE809707E VENDOR_STRING="iiiiiiiihdLkhIIIIIIIIUPDuiaaaaaaaa11X38DDDDDDDDpjz5cddddddddtmGzGJJJJJJJJbqIh0uuuuuuuugYYWiVVVVVVVVbp0FVHHHHHHHHBUEakffffffffD2FFRkkkkkkkkWL$84" HOSTID

QuartusII 13.0 PLL IP Core调用及仿真

有一个多月没用用Quartus II了,都快忘了IP 是怎么用调用的了,还好有之前做的笔记,现在整理出来,终于体会到做笔记的好处. 一.  QuartusII的pll的调用 打开软件界面 Tool——megawizard plug-in manage 选择——next 选择,输入IP核名称,next 按如图所示参数,配置IP核. 添加复位信号,添加locked,锁相完成信号,为了更好的管理工程模块,然后一直next到如下界面(areset是低电平时PLL正常工作还是高电平时PLL正常工作,loc

嵌入式Linux设置PATH

博主现在所做开发的平台为一个Realtek的SDK.由于某些需要,要将 /usr/local/bin 加入到 PATH 环境变量中. 该嵌入式Linux的文件系统中没有 /etc/profile 类似的文件,只有 /etc/rcS.博主发现在 /etc/rcS 里添加 `PATH=$PATH:/usr/local/bin` 并没能使之在串口终端上生效. 博主思来想去,为什么系统默认 PATH 就是:`/bin:/sbin/:/usr/bin` ?在哪指定的? 博主最终在 busybox 中找到原

Vivado使用技巧:封装自己设计的IP核

概述 ??Vivado在设计时可以感觉到一种趋势,它鼓励用IP核的方式进行设计."IP Integrator"提供了原理图设计的方式,只需要在其中调用设计好的IP核连线.IP核一部分来自于Xilinx官方IP:一部分来自于第三方IP,其中有的是在网络上开源的:另一部分就是自己设计的IP.有时候我们需要把自己的一个设计反复用到以后的工程中,利用Vivado的"IP Package"将其封装起来,再以后的工程中直接调用即可. ??本文致力于讲述如何将自己的设计封装为IP

Vivado使用技巧(二):封装自己设计的IP核

由 judyzhong 于 星期五, 09/08/2017 - 14:58 发表 概述 ??Vivado在设计时可以感觉到一种趋势,它鼓励用IP核的方式进行设计."IP Integrator"提供了原理图设计的方式,只需要在其中调用设计好的IP核连线.IP核一部分来自于Xilinx官方IP:一部分来自于第三方IP,其中有的是在网络上开源的:另一部分就是自己设计的IP.有时候我们需要把自己的一个设计反复用到以后的工程中,利用Vivado的"IP Package"将其封