使用quartusⅡ调用ROM或RAM IP核

标签: 教程  Quartus IP核  verilog  EDA QuartusⅡ CPLD VHDL  Quartus FPGA 设计实例  FPGA  matlab quartu mif文件

ROM IP核的使用

常常用来实现从快速时钟域到慢速时钟域的处理或慢速时钟域到快速时钟域的处理。对于一些数据可以先不发出,先把它存储起来,等到了一定的数目再发出。ROM只能读出数据,不能写入数据。在进行ip核名命的时候一定要注意规范 比如我们数据的存储宽度为8位,存储深度为256 则命名的名字为rom_8_256,rom是要进行初始化的,常常使用hex文件或mif文件对ROM进行初始化

IP核的调用过程

调用IP核

step1
在这里插入图片描述
单时钟和双时钟的意思分别为输入和输出是否使用同一个时钟
step2
在这里插入图片描述
一般都在输出端增加一个寄存器这样可以让驱动ROMIP核的时钟频率更高一些,也让时钟频率更稳定

ROM初始化

先在文件窗口下新建一个hex文件(new 下面的Memory文件第一个),然后对其赋值,然后保存,保存核ROM IP核同一个目录下,取得名字也要和ROM IP核的名字一样,保存完之后,然后将这个文件加载进来,如果文件名是黑色说明加载成功了,否则就说明加载出了问题,然后next。除了这种方法还可以建一个mif文件,用来初始化,采用mif文件的好处就是可以利用matlabd对mif文件初始化
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这个altera_mf就是我们仿真的时候要调用的库(这个库文件就需要从安装目录下的ip核目录下拷贝出来),如果直接使用do文件或modelsim进行仿真的时候,就需要把这个库文件放在仿真目录下,进行编译
在这里插入图片描述
点击产生例化的文件

仿真

在仿真的时候要注意把hex文件放在sim的文件夹下,这是因为在ip核的rom_8_256.v文件中读取hex文件的地址默认的是tb文件的那个根目录,或者我们可以打开rom_8_256.v文件,将读取hex的地址变为我们存放hex文件的地址,这样就不会出现无法读取hex文件的警告了。
仿真结果如下:
在这里插入图片描述
可以看到,对于要输出的数据具有两个节拍的时延,这就是因为输出端添加了寄存器的结果。
在这里插入图片描述
这时未加寄存器的结果,可以看到未加寄存器的话输出只有1个延时

module ex_ipcore(  
      input wire        sclk,
        output wire        oclk1,
        output wire        oclk2,
        output reg    [1:0] cnt,
        output wire    [7:0]    odata,
        output wire        locked
);

reg    [7:0]        raddr=0;
reg    [1:0]     cnt1=0;
always    @(posedge    oclk1)
begin
            cnt1 <= cnt1 + 1'b1;
            cnt <= cnt1;
end
            
always    @(posedge    oclk1)
            raddr <= raddr + 1'b1;
            
pll1    pll1_inst (
    .inclk0 ( sclk ),
    .c0 ( oclk1 ),
    .c1 ( oclk2 ),
    .locked ( locked )
    );
    
rom_8_256    rom_8_256_inst (
    .address ( raddr ),
    .clock ( oclk1 ),
    .q ( odata )
    );


endmodule

测试文件

`timescale    1ns/1ns


module tb_ex_ipcore;
reg        sclk;
wire    oclk1,oclk2,locked,cnt;

initial
begin
        sclk = 0;
        //cnt = 0;
end


always #10 sclk = ~sclk;


ex_ipcore    ex_ipcore_inst(
        .sclk(sclk),
        .oclk1(oclk1),
        .oclk2(oclk2),
        .locked(locked),
        .cnt(cnt)
);

endmodule

do文件

quit -sim
.main clear
vlib    ./work
vmap    work    ./work

vlog -work    work    ./tb_ex_ipcore.v
vlog -work    work    ./altera_lib/*.v
vlog -work    work    ./../design/*.v
vlog -work    work    ./../quartus_prj/ipcore_dir/pll1.v
vlog -work    work    ./../quartus_prj/ipcore_dir/rom_8_256.v

vsim    -voptargs=+acc    work.tb_ex_ipcore

add wave tb_ex_ipcore/ex_ipcore_inst/*
run 1000ns
版权声明:本文为qq_44554964原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_44554964/article/details/107209089

智能推荐

java压缩文件并加密,发送到邮箱

日常记录 目标,我们需要把文件进行压缩 并进行加密设置密码,并发送到指定的邮箱,这是需求    首先把工具类贴出来 我们需要导入一个jar包 winzipaes-1.0.1.jar 上传了一下,告诉已经存在了所以,有看到的去找下吧, 应该很好找的 用法在下面 下面介绍一下用法 直接调用方法即可,第一个参数是你的文件名称,第二个事压缩完后的文件名称,第三个是压缩加密的密...

使用@Slf4j的正确方法

环境说明 Windows 10 1803 IDEA 2018.2.EAP Maven 3.5.2 这是正文 POM文件 这里要吐槽一下,其实不想写这篇的,因为网上一搜有很多,但是,我真的被坑到了,很多篇教程都是复制,依赖不全,导致我总是运行不了。教程教程,就是给人学习的,你不能默认你的读者掌握了其他相关的东西。 好了,在pom中添加上面的所有依赖,很多教程里都只说添加lombok依赖就行了,其实不...

2020南京邮电大学Mooc—在线期末考试主观卷

为客观卷部分,自取。 2020南京邮电大学Mooc—在线期末考试客观卷 1 ( 20分 ) 请对序列进行快速排序,写出前5趟的排序过程,按照如下答题格式进行答题,答题时注意不要漏掉下划线,下划线标错扣分。 答题格式: 第1趟: 第2趟:____________________________ 第3趟:____________________________ 第4趟:__________...

入门图论、图论的一些基本概念及实战

图论的一些基本概念及实战 基本概念 主要思想 实战 例题1-无向图的广深优先遍历 例题2--有向图的深度优先遍历(城市地图) 例题3--最少转机 基本概念 图就是有N个顶点和M条边组成的集合。图分为有向图和无向图,如果给图的每条边规定一个方向,那么得到的图称为有向图,其他边也称为有向边。在有向图中,与一个点相关联的边有出边和入边之分,而与一个有向边关联的两个点也有始点和终点之分。边没有方向的图称为...

maven 保姆教程

什么是Maven? 如今我们构建一个项目需要用到很多第三方的类库,如写一个使用Spring的Web项目就需要引入大量的jar包。一个项目Jar包的数量之多往往让我们瞠目结舌,并且Jar包之间的关系错综复杂,一个Jar包往往又会引用其他Jar包,缺少任何一个Jar包都会导致项目编译失败。 以往开发项目时,程序员往往需要花较多的精力在引用Jar包搭建项目环境上,而这一项工作尤为艰难,少一个Jar包、多...

猜你喜欢

动态规划类问题解题步骤 --附例题(小偷问题)

动态规划类问题解题步骤 --附例题(小偷问题) 动态规划 基本思想 适用情况 优点 解题步骤 实例分析 问题 解题步骤 动态规划 基本思想 动态规划背后的基本思想非常简单。大致上,若要解一个给定问题,我们需要解其不同部分(即子问题),再根据子问题的解以得出原问题的解。 适用情况 最优子结构性质。如果问题的最优解所包含的子问题的解也是最优的,我们就称该问题具有最优子结构性质(即满足最优化原理)。最优...

C++:点 线 位置关系

一、不带方向        分享给有需要的人,代码质量勿喷 二、带方向  左右位置 2.1 ΔX=0            2.2 ΔX>0 2.3 ΔX<0 分享给有需要的人,代码质量勿喷  ...

从Java到Android_Java基础_6.Java数组

6.Java数组 一、数组 1.使用数组的原因 2.什么是数组 3.数组声明 4.数组创建 5.数组在内存中的存储 6.局部变量和数组的默认值 7.数组的初始化 8.数组元素的引用 9.数组长度 二、一维数组 1.默认值 2.循环赋值 3.循环输出 4.数组下标越界异常 三、应用 1.求整数数组的累加和 2.求数组元素最大值 四、增强型for循环 1.增强型for循环 2.foreach循环应用 ...

通过修改MotorControl Workbench生成的程序来改变死区时间

本例程是基于MotorControl Workbench 5.2.0版本生成的HALL传感器的FOC控制程序。 程序的修改是在drive_parameters.h文件里211行处,如下图:...

vue组件中使用的一些细节点

1. 在table/ul/ol/select中显示子组件 bug 效果如下,我们会发现出现了…跑到tbody外面和table同级的情况,违反了H5的要求,即tr必须在tbody中,tbody必须在table中。: 解决 2. 子组件中的data函数 在子组件中data应该是一个函数,而不是一个对象;在根组件里data定义为一个对象; 是因为子组件也许会被调用多次,这样定义使每一个子组...