FPGA 开发流程

仿真的概念

完成了设计输入以及成功综合、布局布线之后,只能说明设计符合一定的语法规范。但是是否满足要求的功能,是不能保证的,还需要通过仿真流程对设计进行验证。仿真的目的就是在软件环境下,验证电路的行为和设想的行为是否一致。

仿真分为功能仿真和时序仿真。

  • (1)功能仿真(行为仿真,前仿真)

  功能仿真是在设计输入之后,还没有综合、布局布线之前的仿真,又称为行为仿真和前仿真。**此阶段不考虑电路的逻辑门和寄存器之间的信号传播延时,仅考虑理想状态下,电路行为是否与设想的一致。**如果设计功能都不能满足,其他环节都无从谈起。

使用modelsim进行功能仿真需要的文件:

  1. 功能模块.v
  2. 测试激励.vt // test bench
  • (2)时序仿真(后仿真)

  但是,仅仅功能仿真是无意义的,还需要时序仿真,亦称为后仿真,是指在综合、布局布线之后,考虑到电路已经映射到特定的工艺环境之后和器件延时的情况下对布局布线的网表文件经进行的仿真。其中器件延时信息是通过反标时序延时信息来实现的。如果在时序分析中发现时序不满足需要,而更改代码,则功能仿真必须更新进行。

  使用modelsim进行功能仿真需要的文件:

  1. 功能模块.v
  2.  测试激励.vt                          // test bench
  3. 标准延时文件.sdo                 //声明电路和门延时标准
  4.  功能模块.vo                         //映射到布局布线之后的电路
  5. 自定义的延时文件.sdf           //这个是可选的,自行编写器件延时标准进行仿真, 即是上文提到的反标时序延时信息。

对于目前主流的altera FPGA器件而言,时序仿真已经被静态时序分析取代。 只需要进行功能仿真,确保电路行为与预想的一致, 实际电路的走线延时/亚稳定状态的问题交给STA(static timing analysis)来处理,通过timing report来分析和改善,不需要再人为的观看仿真的波形,排查时序问题。

modelsim的使用

  在此仅说明modelsim软件的使用方式,至于test bench激励文件的编写不做介绍。

  1. 首先创建一个 modelsim的project。  File –> new –> project

  2. 请注意modelsim的这个project和quartus的project毫无关系,可以按自己的喜好命名、设置存放位置。

  3. 添加要进行仿真的模块文件,包括.v和.vt

  4. 右键,编译文件。

  5. 通过之后会在library的工作区中看到你添加进来的文件中包含的模块

  6. 选择对应的测试模块,右键 simulate without optimization

  7. 在新出现的sim目录中,右键add wave,将对应信号放到waveform视图中。

  8. 根据自己的需要,开始run并观察波形

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )

FPGA 开发流程 - HelloWorld