用VerilogHDL设计一个与门逻辑,并进行前仿和后仿

摘要:
在下面填写项目名称,并在最后一列填写顶部文件名。编写testbench,创建一个新的verlog文件,并将其保存为_Tb,这意味着testbench将编写一个由分数组成的时间刻度。分子是当前文件使用的时间单位,分母是分辨率。到目前为止,已经完成了对先前模拟的验证。

用VerilogHDL设计一个与门逻辑,并进行前仿和后仿第1张

执行菜单命令【File】-【New Project Wizard…】,创建工程向导。

用VerilogHDL设计一个与门逻辑,并进行前仿和后仿第2张

What is the working directory for this project?下选择项目存储地址工作目录,What is the name of this project?下填写工程名,最后一栏填写顶层文件名。

用VerilogHDL设计一个与门逻辑,并进行前仿和后仿第3张

加已存在文件(可选),在【File name】下选择已经存在的工程项目,利用【Add】或【Add all】命令添加文件到新工程,点击【Next】

用VerilogHDL设计一个与门逻辑,并进行前仿和后仿第4张

3、选择器件,【Device family】-【Family】下选择你要使用的FPGA芯片系列,这里我选择ALtera公司的CycloneV系列(因为个人用的是友晶的DE1-SOC,芯片型号依个人不同而不同),并在【devices】下选择具体芯片型号,点击【Next】

 用VerilogHDL设计一个与门逻辑,并进行前仿和后仿第5张

设定第三方工具,Design Entry/Synthesis】选择逻辑综合工具,这里可以不填,直接使用Quartus默认工具,【Simulation】下选择仿真工具,这里一般需要quartus都配套安装了Modelsim,点击【Next】

用VerilogHDL设计一个与门逻辑,并进行前仿和后仿第6张

显示设置信息,显示了项目路径,项目名,顶层文件,芯片系列型号等设置信息,在检察符合需要后点击【Finish】,完成向导新建工作。

用VerilogHDL设计一个与门逻辑,并进行前仿和后仿第7张

至此,就完成了一个工程的建立,后面的就是为了工程添加文件。

用框图原理图作为文件顶层(此文件可以直接用代码编程完成,此处是借此讲解如何将硬件原理图转化为程序文件)

1、选择文件类型

用VerilogHDL设计一个与门逻辑,并进行前仿和后仿第8张

立刻另存为,给顶层文件起名字(这里的名字要和工程名一样)并为它定位

 用VerilogHDL设计一个与门逻辑,并进行前仿和后仿第9张

选择BLOCK TOOL,绘制一个block

 用VerilogHDL设计一个与门逻辑,并进行前仿和后仿第10张

右键绘制出来的block,选择属性

用VerilogHDL设计一个与门逻辑,并进行前仿和后仿第11张

block命名

用VerilogHDL设计一个与门逻辑,并进行前仿和后仿第12张

添加定义端口

 用VerilogHDL设计一个与门逻辑,并进行前仿和后仿第13张

用自带的EDA工具生成一段代码的模板

 用VerilogHDL设计一个与门逻辑,并进行前仿和后仿第14张

删掉一些注释,顶层文件就生成了

用VerilogHDL设计一个与门逻辑,并进行前仿和后仿第15张

在生成文件的基础上,添加自己的模块代码

用VerilogHDL设计一个与门逻辑,并进行前仿和后仿第16张

将文件转变为符号

用VerilogHDL设计一个与门逻辑,并进行前仿和后仿第17张

 完成后可以在symbol tool看到我们的工程符号

用VerilogHDL设计一个与门逻辑,并进行前仿和后仿第18张

点击生成管脚可以将建立的模型扩展出来

用VerilogHDL设计一个与门逻辑,并进行前仿和后仿第19张

用VerilogHDL设计一个与门逻辑,并进行前仿和后仿第20张

通过用VerilogHDL设计一个与门逻辑,并进行前仿和后仿第21张对文件进行编译。

至此一个工程项目就建立完成了。下面就需要编写它的仿真文件,对输出信号进行分析。

编写testbench

新建verlog文件

用VerilogHDL设计一个与门逻辑,并进行前仿和后仿第22张

保存,用_tb表示testbench

 用VerilogHDL设计一个与门逻辑,并进行前仿和后仿第23张

编写一个时标,时标是有一个分数组成的,分子是当前文件所用的时间单位,分母是分辨率。(最开始的符号是  `,就是esc键下面那个符号)

用VerilogHDL设计一个与门逻辑,并进行前仿和后仿第24张

将待测试的模型装载到testbench,将模型的例化头贴到testbench,并为他起一个实例的名称,用.操作符做接口的装配,

用VerilogHDL设计一个与门逻辑,并进行前仿和后仿第25张

申明要用到的信号,并与电路模型连接

 用VerilogHDL设计一个与门逻辑,并进行前仿和后仿第26张

编写测试信号

用VerilogHDL设计一个与门逻辑,并进行前仿和后仿第27张

整体代码如下

`timescale 1ns/1ns
module apt_get_tb;

reg a,b;
wire c;
apt_get u1(
.a(a),
.b(b),
.c(c)

);

initial
begin
a=0;b=0;
#20 a=0;b=1;
#20 a=1;b=0;
#20 a=1;b=1;
end
endmodule

至此,测试平台就完成了。

testbenchmodelsim仿真

assignmentsetting中对设置进行更改

用VerilogHDL设计一个与门逻辑,并进行前仿和后仿第28张

设置中的simulation进行如下设置后点击testbench

 用VerilogHDL设计一个与门逻辑,并进行前仿和后仿第29张

添加testbench及仿真结束时间,(filename里添加的是.v文件不是.bak文件)

用VerilogHDL设计一个与门逻辑,并进行前仿和后仿第30张

最后在quartus中设置modelsim的路径,quartus->tools->option->EDA tool options ,在右边选择modelsim_altera的安装路径

用VerilogHDL设计一个与门逻辑,并进行前仿和后仿第31张

这里要确保自己的quartus和modelsim都是已经取得了lincense的,否则是调用不了modelsim的

前仿

 用VerilogHDL设计一个与门逻辑,并进行前仿和后仿第32张

软件自动跳转modelsim生成仿真图形,通过按键盘上的F键可以看他的全局图

用VerilogHDL设计一个与门逻辑,并进行前仿和后仿第33张

修改过的testbench文件保存后,可以按方向键上键,调用用过的.do 文件,即可重新仿真。

至此,前仿的验证完成。

后仿

由于框图原理图不能作为一个国际标志在平台中互相传递,所以需要用系统工具将图形改为代码

 用VerilogHDL设计一个与门逻辑,并进行前仿和后仿第34张

完成后,将生成的文件加入到file

用VerilogHDL设计一个与门逻辑,并进行前仿和后仿第35张

为顶层的代码编写一个testbench

 用VerilogHDL设计一个与门逻辑,并进行前仿和后仿第36张

之后的步骤与前仿相同,但应理解的是此时做的是顶层的仿真,是后仿

用VerilogHDL设计一个与门逻辑,并进行前仿和后仿第37张

 综合编译后,就可以做顶层的前仿和后仿了,前仿按照之前的来,这里演示后仿

 用VerilogHDL设计一个与门逻辑,并进行前仿和后仿第38张

可以看到后仿与前仿存在着时序上的延迟,这是器件的延迟,这便是一个更真实的仿真结果。

(需要注意的是cyclone V系列的芯片已经不再支持时序仿真了,只能跑功能仿真,如果芯片类型选的是Cyclone V系列的话,它就会一致弹出

Rerun the EDA Netlist Writer的对话框,这点需要注意,网上搜索说这里需要改setting或者说start EDA Netlist Writer都是坑爹的,博主就被这
些坑货误导了一天来找问题,希望能够给大家个借鉴,修改芯片型号进行后仿,虽然也没意义了,但还是把图给贴一下,让大家了解下前仿与
后仿的区别

 用VerilogHDL设计一个与门逻辑,并进行前仿和后仿第39张

前仿看到的是逻辑功能间的关系,后仿不仅可以看到逻辑功能间的关系,还能看到他们时序间的关系。

免责声明:文章转载自《用VerilogHDL设计一个与门逻辑,并进行前仿和后仿》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇jquery的get()方法VUE公众号出现空白的原因 以及解决方案下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

Redis设置Auth认证保护

Redis有一种保护数据安全的身份验证方法。有两种方法可以设置此身份验证。一个是通过配置文件。另一种是直接在Redis客户端命令中设置参数requirepas。首先是在配置文件中查找参数requirepass。这是配置Redis访问密码的参数。由于Redis具有很强的并发能力,并且只使用密码,攻击者可能会在短时间内发送大量密码猜测请求,这很容易被暴力破解。因...

android动态申请权限

申请权限对于安卓开发很重要,从Android6.0开始,Android系统提供动态申请权限的机制,APP在使用危险权限时,需要用户的授权才可进一步操作。...

C# winform开发嵌套Chrome内核浏览器(WebKit.net)开发(一)

//Www.cnblogs.com/Maxq/p/6566558.htmlWebKit.net是WebKit的一个net包。使用它,。net程序可以非常方便地集成和使用webkit作为加载网页的容器。EventArgse){WebKit.WebKitBrowser=newWebKitBrowser();this.Controls.Add(浏览器);...

SQL中一次插入多条数据

SQL中insert一次可以插入一条数据,我们有三种方法可以一次性插入多条数据。在此处还有一些有趣的问题,当我使用以下代码来插入多条数据时:selecttop0*intonewstudentfromstudentinsertintonewstudentselect*fromstudent这里会发生这样的报错:因为NewClass表中ClassId为标识列,所...

ORACLE无法删除当前连接用户

今天在做Oracle数据库是遇到ORACLE无法删除当前连接用户,经查找可用如下方法解决。SQL˃dropuseracascade;//删除用户以及用户表空间下所有对象用户已丢弃。...

C# Task详解

1.任务线程池的优点与线程相比有很多优点,但线程池不方便使用。例如:◆ ThreadPool不支持线程取消、完成和失败通知等交互操作;◆ ThreadPool不支持线程执行顺序;在过去,如果开发人员想要实现上述功能,他们需要完成大量额外的工作。现在,FCL提供了一个更强大的概念:任务。任务基于线程池执行...