Verilog HDL程序笔记2

Verilog HDL程序笔记2

Verilog HDL程序笔记1:写出属于你的第一个Verilog HDL模块



前言

经过第一章的学习之后,我们已经能够用代码写出属于我们的第一个模块了。这就引出了下一个问题,我们应该如何验证模块的正确与否呢?下面就带大家继续了解模块的测试。


提示:以下是本篇文章正文内容。

一、如何测试模块?

1.仿真平台

在学习测试模块之前我们需要先了解我们的IDE兼仿真平台——Modelsim。
在这里插入图片描述

Mentor公司的ModelSim是业界最优秀的HDL语言仿真软件,它能提供友好的仿真环境,是业界唯一的单内核支持VHDL和Verilog混合仿真的仿真器。它采用直接优化的编译技术、Tcl/Tk技术、和单一内核仿真技术,编译仿真速度快,编译的代码与平台无关,便于保护IP核,个性化的图形界面和用户接口,为用户加快调错提供强有力的手段,是FPGA/ASIC设计的首选仿真软件。
——引用自百度百科

关于软件的安装及破解可以参考这篇文章:

Modelsim-win64-10.1c 安装破解


2.新建工程

打开软件后点击左上角File-New-Project新建一个项目,名字自己看着取就好了
在这里插入图片描述

点击OK之后会弹出下面这个框框
在这里插入图片描述

这里就不用我翻译了吧?大家都是过了4级的人。
我们点击第一个图标,创建一个新的文件。首先第一步需要将我们上节课的模块给创建了,名字是叫dog是吧?
在这里插入图片描述
这里千万不要点OK!
我们需要点开左下角的"Add file as type",选择Verilog。
在这里插入图片描述
这一步是选择编程语言,一定不能有错!然后我们才能点击OK。
然后我们再仿照上面的步骤新建一个文件叫做:dogTestbench。这个文件就是我们的测试文件,稍后再详细解说。
在这里插入图片描述
文件建立好之后我们可以看见刚刚创立的两个文件已经出现在了画面中。
在这里插入图片描述

3.编程与编译

我们需要先点开dog.v,然后将上节课的代码复制粘贴上去。

在这里插入图片描述
然后我们点击编译按钮
在这里插入图片描述
在这里插入图片描述
可以看到编译成功了!
然后我们再打开dogTestbench.v准备开始编写我们的测试模块。


二、使用步骤

1.Testbench的含义

首先我们需要了解Modelsim的仿真原理。
在我们使用Modelsim写完一个模块的时候,这个模块就像一名工程师设计好了的一个零件的设计图一样。在零件的量产与大量使用之前我们需要对零件进行验证——做出初代产品并检验。

我们写的dog.v就像是初代零件设计图,而Testbench像是初代加工好的零件。

那么dog和dogTestbench之间有什么关系呢?学过其他编程语言的同学可以将其勉强理解为类与对象的概念。

而没有学过其他高级编程语言的同学可以将dog和dogTestbench理解为学生这个群体和这个群体里的一个学生的概念。
学生的钱最好挣 ,小明同学的钱最好挣。学生就像是dog,小明同学就像是dog.v

当然,上面的比喻有点牵强,下面我将用实际的例子让大家体会一下。

2.Testbench的写法

首先在这里需要说明一下,Testbench也是一个模块——测试模块。所以我们整个代码的框架和dog.v异曲同工。

在这里插入图片描述

然后我们需要用reg型来创建需要赋值的变量。而用wire型来创建输出的值。
由于dog这个模块实际上是一个二选一多路器,所以需要两个输入和一个选择信号,而只有一个输出。所以我们就像下图这么写就好了。

在这里插入图片描述

然后我们需要对我们需要赋值的信号初始化:
在这里插入图片描述
我们可以看到begin和end又出现了。聪明的小伙伴可能已经发现了Verilog里没有花括号,并且联想到了begin和end就是花括号的作用了。

初始化之后我们要做的当然就是给信号赋值啦!这里有两种赋值方式:
第一种方式是手动赋值,我们在初始化里直接手动赋值。#100代表延时了100个时间单位。
在这里插入图片描述
可以看出这是十分累的。除了有特定的要求之外我建议直接使用第二种方法。

在这里插入图片描述
可以看到这简单的一句话就产生了一个周期为50个单位时间的选通信号。

我们的测试模块就是为了观测输出的值的变化。按照逻辑来说,当选通信号为0时,输出值和a的值相同。当选通信号为1时,输出的值和b相同。
到这里我们已经把a,b和sl都设置好了。所以接下来我们只要观察outw的值的变化就好了。

接下来我们需要加入最后一步也是最具有灵魂的的一步

在这里插入图片描述
dog就是所谓的设计图,而dog1就是我们做出来测试的初代产品!而括号内的.xxx(yyy)中的xxx就是模块的接口,yyy就是Testbench赋值的信号。必须要一一对应才行,不然仿真值会出错。

3.仿真

最后我们再编译一下所有.v文件,然后最上方工具栏中选择 Simulate-star simulate

在这里插入图片描述

然后点开work,选择dogTestbench。最重要的是**将左下角第三步的勾勾去掉!!**然后OK运行。

在这里插入图片描述

然后我们在左边那一栏里右键点击dogTestbench-add wave。这时才能添加信号波形。

在这里插入图片描述
在这里插入图片描述
我们点击上方的这个按钮开始仿真
在这里插入图片描述
框框里的100ns可以自定义大小,这个会影响我们点击一次仿真按钮输出的波形长度。
在这里插入图片描述
成功输出波形了。对比发现,当sl=0时,outw=a=0,当sl=1时outw=b=1;
为了排除误差,我们把dogTestbench.v里的a和b的值互换一下再次进行仿真:
在这里插入图片描述
确实是这么回事!也就是说,我们的模块没有问题。dog模块确实有二选一选择器的功能。大成功!!


总结

本章讲述了如何使用Modelsim写模块和创建一个测试平台。并进行了仿真观测了波形。这只是一个很简单的例子。往后我们将学习更多有趣的知识。因为本人也是一名正在学习Verilog的大学生,所以有不正确的地方欢迎大家的指出!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值