因为我也是初学者,我把自己学习中的一个过程给写下来,希望对他人能有一点帮助。相信很多人一开始和我一样对功能仿真和时序仿真(后仿真)都模模糊糊,其实功能仿真是为了验证你的代码是否正确,而时序仿真则是添加了一些延时信息后,使仿真更接近真实的工作环境状态(因为现实中基本上都是存在不同的延时的,对于不同项目和器件,延时大小也不一样)。为了简单理解,可以认为功能仿真是理想状态,时序仿真是近实际状态。

描述在quartus软件中如何调用IP核、查看工作文件、以及前仿真和后仿真

1、具体IP核的详细调用:

(1)新建一个工程
,具体详细步骤就不再描述,之前都描述过了,这里就调用一个RAM核作为例子。

(2)在界面上找到IP库,并找到选择RAM (这里有两种,我选择的是RAM:2-PORT)。你也可以根据自己的需要查找相应的IP核,如果不清楚使用方法可以去官网看帮助文档。

(3)保存IP核在工程下,命名为RAM。

(4) 对IP核进行相应配置的设置




后面几部可以next,最后点击Finish,点击Yes,IP核已生成如下:

(5) 在file中找到.qip文件,设为顶层模块,双击打开RAM,可看到IP核文件,我们可以复制端口内容,方便在测试文件中编写,也就是为了偷个懒。

(6)新建测试文件,命名为RAM_tb,放在工程下:
我们可以使用点击Start
Test Bench Writer,可以创建一个测试激励模板,便于快速编写测试激励。生成的激励模板文件是存在你工程的Modelsim文件下的.vt文件,我们可以直接在这个文件基础上改写,可以很方便写测试激励。

下面就给出RAM的测试激励代码:

`timescale 1ns/1ns `define clock_period 20 //新的时钟周期 module RAM_tb; reg clock; //时钟信号        reg     [7:0]data; //写的数据       reg     [7:0]rdaddress;//读地址 reg   [7:0]wraddress;//写地址 reg    wren;//写使能信号
wire  [7:0] q;//输出数据
integer i; //例化 IP 核 RAM u0 ( .clock(clock),.data(data),.rdaddress(rdaddress),.wraddress(wraddress),.wren(wren),.q(q));initial clock=1;     always#(`clock_period/2) clock=~clock; initial
begin
//初始化
data =0; rdaddress=20;          wraddress=0; wren=0;#(`clock_period*20+1); for (i=0;i<=10;i=i+1)begin
wren=1;                  data = 30-i;                    wraddress=i;                 #`clock_period;              end
wren=0; #(`clock_period*20);
//读地址为 0-10的数据输出
for (i=0;i<=10;i=i+1)begin rdaddress=i; #`clock_period;        end #(`clock_period*20);            $stop;
end
endmodule 

(7)设置仿真脚本,添加测试激励文件,进行联合仿真(这就是前仿真)

2、前仿真(功能仿真):

注意:一般第一次用modelsim+quartus的时候需要在quartus中设置modelsim的路径,quartus->tools->options->general->EDA tool options ,在右边选择modelsim的安装路径。

1、 首先在建立工程时设置好仿真器和描述语言

2、 编写源文件和测试文件,然后再保存编译,仿真之前需要设置一下,点击工具栏assignment,然后再选EDA tools setting,再点simulation,添加测试文件,填写文件名

3、 点击Tools ->Run Simulation tool->RTL Simulation,就可以开始联合仿真了

4、 按如下操作即可自动打开modelsim软件:

写入数据

读出数据

3、后仿真(时序仿真)与查看报告

时序仿真,就是在综合后仿真的基础上加上标准时延文件 (.sdf文件),综合考虑了路径延迟和门延迟的情况,验证电路是 否存在时序违规.所以最精确的还是还是先进行时序约束,利用Timing Quest Analyzer写出.sdc文件,之后进行后仿真。这里时序约束之后会生成.vo文件以及.sdo文件,分别是综合之后的门级网表文件(Verilog为.vo文件,VHDL是.vho)和时延反标文件(Verilog,VHDL都是是.vho);生成文件之后可以利用modesim调用这两个文件以及相关的库文件,即在SDF标签中加入时延反标文件。过程比较复杂,同时对于文件的放置的位置也会要求。还有一种方法就是利用modesim-altera与Quartus II联合仿真,比较方便,只需Quartus中进行时序约束,生成.sdc文件,之后设置NativeLink,进行后仿真就可以完成了。

当在quartus中调用Modelsim-Altera进行Gate-level仿真时(前提是在第三方仿真工具中选择Modelsim-Altera),主要步骤如下:

利用TimeQuest Timing
Analyzer工具生成.SDC文件:

(1) 创建时序分析网表

点击Netlist->Create Timing Netlist来创建一个新的约束网表,由于输入的门级网表是综合后适配的因此选择post-fit。
当然所有这些任务都可以通过tcl脚本语言来实现,如图中的tcl command。
speed grade与所选的芯片有关,本次的开发板对应芯片的速度等级是8,具体的可以查阅相关的资料。

(2)创建时钟

Constraints->Create
Clock,将源时钟设置为50MHz,周期是20ns.

(3)设置时钟的不确定性

我们所使用的时钟都是非理想的,一般要给时钟留出余量。

latency是寄存器时钟信号与时钟源信号之间的相位差;uncertainty是寄存器与寄存器之间的时钟信号相位差,在此对uncertainty进行设置

constraints->Set Clock Uncertainty,设置时钟源的setup uncertainty为1ns

(4)设置输入/输出延时

(5)编写SDC文件

如果之前建立了sdc文件,再次写的时候,可以将两个名字保存为一样的,这样就会覆盖原来的。但是如果一个工程中有两个sdc文件,都会起作用,进行多次时钟约束,若不一样则会得出错误的结果。

写完之后,关闭窗口在Assigments的settings中的TimeQuest Timing Analyzer中将之前的文件添加进来。这一步与设置NativeLink类似,不再赘述。

(6)查看报告(查看之前需要全编译一下):一些基本步骤都标出来了,这个其实是比较简单直接的,这里可以查看一些资源的使用情况。


可以看出在Slow
1200mV 85C下
clk的最大的工作时钟是276.93MHz,经过布局布线之后,是238.04MHz。当然这里只是简单的介绍时序约束的步骤。同时还可以由生成的报告看出这个设计的资源占用的情况,比如逻辑单元,寄存器,存储器等等,都可以在生成的报告中查看。这些资源的占用最终都对应到实际的门级的电路,最后的面积的大小可能与不同的Foundry的器件库不同。

(7)全编译之后进行后仿真,其一些基本联合仿真步骤差不多,不过要添加生产的.sdc文件,后仿真的结果如图。由仿真的结果可以看出来,经过时序约束,布局布线之后, 产生的输出是存在时延的。前后仿真结果对比如下图:

前仿真结果(在时钟变化时,没有产生延时)

后仿真(时延的大小与你前期的设置是有关系的,这只是演示一下,具体的还有结合你的工程来设计)

FPGA之IP核的使用、搞懂功能仿真和时序仿真相关推荐

  1. FPGA开源IP核下载opencores.org

    原贴 http://bbs.elecfans.com/m/jishu_384213_1_1.html [问答] opencores这个网站的使用常识 2013-9-28 22:42 关于http:// ...

  2. PLL锁相环原理以及Altera FPGA的IP核实现

    文章目录 前言 一.PLL锁相环功能核原理 1. 锁相环功能 2. 锁相环原理[1] 二.Altera的FPGA调用IP核实现 后续补充 总结 参考文献 前言 本文主要介绍了锁相环的原理,以及适用Al ...

  3. FPGA的ip核之概念和分类

    ip核之概念和分类 IP(Intellectual Property)内核模块是一种预先设计好的甚至已经过验证的具有某种确定功能的集成电路.器件或部件.它有几种不同形式.IP内核模块有行为(behav ...

  4. 【FPGA】: ip核——Fir滤波器

    文章目录 一.简介 二. ip核的端口说明 三. ip核的生成 四. 典型示例 五.结果展示 六. 参考资料 一.简介 FIR 滤波器之内插 FIR 滤波器Interpolated FIR Filte ...

  5. 【FPGA基础】关于FPGA的IP核概念

    IP核介绍 IP(Intelligent Property)核是具有知识产权核的集成电路芯核总称,是经过反复验证过的.具有特定功能的宏模块,与芯片制造工艺无关,可以移植到不同的半导体工艺中. IP核模 ...

  6. 基于FPGA的IP核RAM的设计和调用

    介绍IP核: IP(知识产权)核将一些在数字电路中常用但比较复杂的功能块,如FIR滤波器,SDRAM控制器,PCI接口等做成一个"黑盒"或者可修改参数的模块,供设计者使用.IP核包 ...

  7. 【FPGA】IP核概述

    目录 一.IP核是什么 二.为什么要使用IP核 三.IP核的存在形式(分类) 四.IP核的缺点 五.Quartus II软件下IP核的调用 1.调用方式 2.实际操作 一.IP核是什么 二.为什么要使 ...

  8. FPGA NVME IP 核 纯逻辑实现NVME协议,读写SSD

    随着存储速度需求越来越大,SATA的读写速度很多场景就有点吃力了,基于PCIE协议的NVME协议慢慢成为主流厂商的首选,FPGA实现NVME协议是比较复杂的,本文主要基于xilinx的方案,前面说了N ...

  9. LabVIEW FPGA PCIe开发讲解-7.2节:目前主流的4大Xilinx FPGA PCIe DMA通信IP核讲解

    1.要开发一个带PCIe或者PXIe接口的FPGA板卡出来,除了硬件本身外,最重要的就是FPGA芯片里面的PCIe通信代码编写,俗称下位机FPGA编程:还有中间层的驱动文件编写以及上位机PC端的应用程 ...

最新文章

  1. html中判断字段第一位,javascript判断字符串是否相等
  2. 字符流写数据的5种方式
  3. TypeScript里一些特殊的类型
  4. Ubuntu 配置swftools(Ubuntu14.04)
  5. 实车采集的数据重建场景_避障、探测、采样......华理这套系统让无人小车“身手非凡”...
  6. “绿色高效 模块智能”金融业数据中心系列规范发布会将于12月7日召开
  7. js获取单选框里面的值
  8. Qt实现表格内进度条展示数据
  9. Oracle、 Mysql 、 SQLserver 分页查询
  10. rsync and inotify
  11. Unity3D MMD Demo
  12. 团队管理那点破事,OKR绩效、核心人才、面试、技术分享、研发流程
  13. 你所知道好玩有趣的 iOS URL schemes 有哪些?
  14. 推荐免费下载430套大型企业管理源码 下载地址:http://www.hur.cn/tg/linkin.asp?linkid=205389 下载地址:[URL=http://www.hur.cn/t
  15. 达达php源码,达达房卡麻将二次开发VIP系统学习课程
  16. 怎么windows设置qq邮箱服务器,电脑中如何添加QQ邮箱到Windows Live Mail
  17. Excel的F4键妙用,赶紧来学一下吧
  18. 临沂一中高考2021成绩查询,2021年临沂高考状元名单公布 今年临沂高考状元是谁资料和分数...
  19. 安全狗技术研究论文入选中国科技核心期刊
  20. 全球程序员薪资调查:硅谷米贵,居大不易

热门文章

  1. 北京理工大学:《Python语言程序设计》____笔记整理
  2. 程序设计思维与实践 Week15 作业 A-ZJM与霍格沃兹
  3. k8s使用的iptables,具体原理是什么?一学就会
  4. Tableau豆瓣电影项目实战作业 Day1
  5. Windows下设置桌面壁纸的代码(QT版)
  6. “Physically-Based Rendering for Indoor Scene Understanding Using Convolutional Neural Networks”论文阅读
  7. 【踩坑日记】Vue组件@click事件点击没有反应
  8. Chrome浏览器滚动条样式设置
  9. 论文结尾参考文献形式
  10. asp创建mysql表_asp创建数据库