当前课程知识点:IC设计与方法 >  3、Verilog语法 >  j) 面向测试的Verilog语法(1) >  3-3-1面向测试的Verilog语法(1)

返回《IC设计与方法》慕课在线视频课程列表

3-3-1面向测试的Verilog语法(1)在线视频

3-3-1面向测试的Verilog语法(1)

下一节:3-3-2 面向测试的Verilog语法(2)

返回《IC设计与方法》慕课在线视频列表

3-3-1面向测试的Verilog语法(1)课程教案、知识点、字幕

大家好

上节课我们讲了面向设计的

或者说面向RTL级的Verilog语法

这节课

我们来讲面向测试的Verilog语法

在讲面向测试的Verilog语法之前

我们先回顾一下上节课讲的

面向RTL设计的Verilog语法

应该说

在这门课里

我们只讲最基本的

必需的RTL级的Verilog语法

总的来说只有几个关键字

一方面是面向代码结构的

包括电路外特性所描述的module

描述电路输入和输出信号

所需要的input和output信号

以及描述线的类型wire和reg这些信号的属性

第二方面是面向电路实现的

包括用于组合逻辑电路设计的assign语句

用于简单组合逻辑电路设计

所需要的always语句块

以及阻塞赋值语句

面向时序逻辑设计的always语句块以及

非阻塞赋值语句

以及相应的if语句和case语句

这些语句就可以用于设计

极其简单的组合逻辑电路

简单的时序逻辑电路以及复杂的时序逻辑电路

应该说

不管电路有多复杂

我们都可以用我们前面所讲的

大概十来个关键字设计出来

如果要设计更复杂的时序逻辑电路

我们可以用复杂的Verilog语法知识

也可以只用我们上课讲的Verilog语法知识

就可以做到

如果作为一个设计人员

或者初学者觉得仅仅用

我们讲过的Verilog语法知识还没办法设计出来

一般来说就是我们的设计思路出了问题

我们上课所没有讲过的

更复杂的一点

或者说更高深的Verilog语法知识

它的主要作用是让我们设计电路的效率

或者说描述电路的效率能够提高

而不是说缺了那部分Verilog语法知识

就设计不出电路来了

所以我们作为设计人员一定要注意的是

尽可能用最简洁的语法能够

把我们电路设计出来

那么Verilog语言呢

除了能够设计电路之外

还能够对我们所做的电路进行测试和验证

这就是我们今天所要讲的

面向测试的Verilog语法子集

我们如果设计完了电路

或者说我们做出了一个真实的电路的实体

一个电路板

我们怎么对它进行测试

大家回想一下

在本科

或者说在课外实践所遇到的情况

假设我们有一个电路板

电路板上有一些芯片

有一些电子元器件

我们在测试的时候

通常首先要为电路板增加一个电源

然后要用一些信号发生器之类的设备

为电路板产生测试所需要的信号

然后我们要用一些工具探测电路板上的信号

就好像在我们电路板上

我们可以用一些小夹子

把所需要观测的信号连接起来

然后用一台仪器去进行测试

到底会用到什么样的仪器呢

我们看一下

通常我们会用到电源为板子加电

需要用到万用表去测板子的连接状况

连接状态是否有短路

或者是否有开路

是否有虚焊等等

在加电以后

还可以用万用表去测一下板子的

某些专用节点的电平是不是处于高电平

处于低电平

完成静态测试以后

我们就要让板子加电正常的工作

工作的时候呢

要为我们的电路板提供输入信号

通常输入信号包括时钟信号

以及一些特殊的数据信号

或者是控制信号

这些信号我们可以由实际的电子系统产生

也可以用一些仪器

比如波形发生器去产生这些控制信号

产生完控制信号以后

我们就要对电路板的输出进行测试

输出测试通常有两类手段

一个就是用示波器

示波器通常有两到四路模拟输入量

可以测两到四路模拟信号

好一点的示波器还会有一些数字测试端口

可以完成八路 十六路

甚至三十二路数字量的测试

对于专业的数字系统测试

我们可能会用到逻辑分析仪

逻辑分析仪可以测试三十二路 六十四路

甚至二百五十六路以上的数字信号

测试的频率可以达到几十兆

甚至几百兆

甚至上G

所以对于一个复杂数字系统

我们通常会用一个比较高档的

逻辑分析仪去完成更完整的功能的测试

对于逻辑分析仪

我们可以看到

逻辑分析仪要去测信号的时候

会用到这样一个有多个夹头的

多个探头的夹具去测试不同的信号

如果我们的电路所要测试的探测点非常多

连接这些信号点也是一个非常麻烦的工作

你可以想象一下

假设你的电路有上百路的输出

需要我们手工地把这些小夹子一个一个地

夹到这些电路的输出点去

一方面夹的工作量非常的大

另一方面

如果我们电路的

内部的某些状态处于芯片的内部

或者说电路的某一管腿被压在芯片之下

比如说是BGA封装的芯片

那有可能我们根本就没有办法测试

那这时候电路的设计和测试就很麻烦

可能导致有些信号

根本没有任何手段可以对它进行测试

那如果我们用可编程芯片FPGA

或者CPLD来实现这样电路的时候

相对来说就容易一些

我们可以用一种叫内嵌逻辑分析仪的

方式去测试电路的内部信号

如果我们刚刚做完的RTL级、寄存器级的设计

我们这时候还仅仅是用Verilog语言

或者是VHDL语言这样的语言去描述电路

那么我们可以有更好的手段

也就是用仿真器去测试电路的内部状态

这张图是一个逻辑分析仪的

界面所看到波形

我们可以看一下

前两行是我们用逻辑分析仪

或者说内嵌的信号发生器可以产生的输入信号

后面几行是我们所观测到的

电路的内部节点

例如第三行和第四行是观测的I2C的信号

第三行是I2C的数据信号

第四行是I2C的时钟信号

这个逻辑分析仪的功能相对来说比较强

它可以对观测到的

信号去进行详细的协议层的分析

可以分析信号的工作协议是什么样的

具体代表的数据是什么样的数据

和测试一个实际的物理的电路相类似

当我们用硬件描述语言Verilog语言

描述完一个电路以后

我们也要对这样的电路进行验证

仿真或者是验证,以检查它的功能是不是正确

那对这样的代码

一小段代码

或者说一个小的module来说

我们怎么进行测试

或者怎么进行验证呢

过程跟刚才的过程是一样的

我们也要为这段代码提供激励信号

产生它所需要的输入信号

也要用某些技术手段

去观测这段电路的输出

具体的结构就和我们幻灯片上的

这样的结构类似

例如我们所做的电路是一个计数器

我们给它起个名字叫作counter

描述这段计数器的代码

对应的代码是counter.v

这么一段Verilog代码

通常Verilog代码的后缀是用.v这样

的后缀来描述

对这样一段代码进行测试的时候

我们要为它搭一个测试平台

我们把它称之为testbench

这样的testbench

我们可以给它起个名字叫tb.v

是另外一段Verilog代码

描述了整个testbench

这个testbench的名字呢

我们可以给它起个名字叫作top

在testbench里

我们首先要把计数器counter用一种手段

把它放在电路板上

有点像刚才我们电路板上插了一个芯片

所以我们也要把counter放到

我们的测试平台里来

具体放的手段

我们称之为元件例化

把counter放到我们电路板上以后呢

我们通常要给它起个名字

叫UUT

或者是DUT

UUT和DUT是Unit Under Test或者

是Device Under Test的缩写

把这个器件例化完了以后

我们还要给它产生所需要的复位信号

时钟信号

对于时钟信号

它通常是一个周期信号

我们通常可以用initial

或者是always语句来产生这样的

周期性的信号

对于复位信号

它通常是一个脉冲信号

我们简称为非周期信号

这时候我们一般用initial块

来产生这样的非周期信号

对于电路的输出

例如counter产生一个四位的计数器的值

输出out信号

我们有两大类手段来进行观测

一个是用Verilog提供的monitor

或者display语句来观测输出信号

通常是用文本的方式来显示信号值

另一类是用专用的工具

例如仿真工具所自带的波形浏览器

或者是更高层次的

分析工具来检查输出信号

是不是满足我们的要求

我们首先来看一下元件例化

元件例化除了可以

用在我们所说的测试平台里

也可以用在RTL级代码里

当我们的设计是一个多层次的复杂的设计

我们设计里面通常会分为多个模块

对于我们已经完成的

底层模块在上层电路里使用的时候

有时候我们也会把它称之为IP单元

去用在上层电路里的时候

这时候我们也会用到元件例化这种方式

我们看一下幻灯片

元件例化在Verilog和

VHDL里都有相应的语句

VHDL里定义的是PORT MAP语句

Verilog我们简称为元件例化

我们看两个例子

我们给出了Verilog以及

VHDL两种语言里的例化

元件例化的时候

通常有两种方式

一种方式我们称之为位置关联

另一种方式称之为名字关联

我们先看一下Verilog语句

例化一个AND这样的

与门的时候,它的例化方式

上面是它的语法规则

我就不再一一的念了

与门例化到我们的电路的时候

给它起个名字u1

然后把与门的三个输入和输出端

分别连到了我们电路板上的a、b以及

输出的and_out信号上

在这种方式里

a、b和and_out出现的次序

是要跟我们前面所设计的与门的

三个信号的出现次序是完全一致的

这种方式我们称之为位置关联的方式

或者叫位置映射的方式

第二种方式

我们是把与门的

每一个输入端和电路板上的每一个信号

直接关联起来

用.a加上一个a的方式

这样进行直接关联

这种方式也是我们大多数在工程情况下

推荐的方式

保证了我们的信号连接不会出现错误

在上一种方式里边

一旦a、b的次序写反了

就会导致电路的连接出错

下面是VHDL语言的映射方式

我就不再一一的多说了

我们再来看一个比较详细的实际的例子

在这个例子里

我们设计了一个小的模块

把它称之为comp

这个模块

它有两个输出端以及两个输入端

当我们在test测试平台里面例化元器件的时候

我们给了几种常见的方式

在电路里

我们把comp元器件例化了四次

相当于是在我们的

同一个电路板上插了四个这样的元器件

这四个元器件的名字分别叫c1、c2、c3和c4

第一个C1元器件的例化方式

就是我们刚才所说的位置映射的方式

Q、R、J、K的出现次序

Q、R、J、K分别连接到了元器件的o1、o2

i1、i2四个引脚上

第二种映射方式是用我们刚才所说的

名称映射的方式

(用c2表示的)comp元器件的

i2输入端连接到了电路板上的K信号上

其它的信号依次是怎么连接的

我们就不再一一的念了

第三种方式大家看一下

在Q信号后面

用了连续两个逗号

中间没有连任何的信号

表示comp元器件的某一个管腿

也就是o2这个管腿它是悬空的

没有连到任何一个信号端上

第四个跟第三个方式相类似

只是把i1和o1这两个信号连接到了J和Q上

另外两个没有提到

也就是说

另外两个管腿悬空

对应第三和第四这两种方式

在没有任何连接的这种情况下

通常软件或者仿真工具也好

或者说综合工具会给我们一个警告

告诉我们

某两个管腿悬空了

作为设计人员

我们通常要去检查这些警告信号

去看它是由于我们的设计失误导致没有连接

还是我们作为设计人员故意让它悬空的

这是我们作为设计人员需要去详细检查的

下面我们再来看一下

一个完整的testbench的结构

通常testbench包含两大部分

一个完整的Verilog代码

包含两大部分

第一部分是一些参数定义

与定义相关的语句

描述了代码段需要包含哪些其它的代码段

包含哪些定义信号

以及仿真的一些时间特征

第二段是我们完整的模块

以testbench为例

前面我们用一个`timescale语句

描述在仿真我们这段代码的时候

或者说测试的时候它的时间特征

左边的1ns表示仿真的时间单位是1ns

右边的1ps表示仿真时间的精度是1ps

我们可以理解为

我们仿真的步长是1个ps、1个ps的去走

然后整个显示的单位是以ns为单位

注意左边的单引号是一个反单引号

跟我们通常其它语言里面用的

单引号是不太一样的

是个反单引号

在顶层testbench里

通常testbench是没有任何输入信号

和输出信号的

在testbench内部大致有四大类语句

一个是信号定义

描述了testbench顶层的信号

例如在上一张图里的复位信号

时钟信号以及输出信号

第二类语句是元件例化

需要例化被测的电路

例化counter

例化成DUT或者是UUT

第三类是用来产生我们的激励向量

例如复位信号和时钟信号

最后是一些语句

用来观测我们的电路的输出

IC设计与方法课程列表:

课程准备:Quartus II软件的下载

-软件下载说明

--Quartus II软件下载教程

1、集成电路的发展

-a) 集成电路的应用及市场

--1-1集成电路应用及市场

-a) 集成电路的应用及市场--作业

-b)集成电路的制造过程

--1-2 集成电路的制造过程

-b)集成电路的制造过程--作业

-c)从CPU的发展看IC的进展

--1-3从CPU的发展看IC的进展

-c)从CPU的发展看IC的进展--作业

-d)从行业的发展看IC的进展

--Video

-d)从行业的发展看IC的进展--作业

-e)从ISSCC看IC的发展方向

--讲课视频

-e)从ISSCC看IC的发展方向--作业

2、数字集成电路设计方法

-a)数字系统的实现方法 (ASSP/FPGA/ASIC的对比)

--讲课视频

-a)数字系统的实现方法 (ASSP/FPGA/ASIC的对比)

-b)组合逻辑电路

--Video

-2、数字集成电路设计方法--b)组合逻辑电路

-c)时序逻辑电路(1)

--2-3时序逻辑电路的设计方法 (一)

-d)时序逻辑电路(2)

--2-3时序逻辑电路的设计方法 (二)

-2、数字集成电路设计方法--d)时序逻辑电路(2)

3、Verilog语法

-a)Verilog的历史和学习要点

--讲课视频

-b)端口、信号及数据类型

--讲课视频

-b)端口、信号及数据类型--作业

-c)逻辑电平及数据操作

--讲课视频

-3、Verilog语法--c)逻辑电平及数据操作

-d)Assign 语句

--3-1-4assign语句

-e)Assign 举例

--3-1-5 Assign 举例

-f)Always

--3-1-6 Always

-f)Always--作业

-g)阻塞与非阻塞赋值

--Video

-3、Verilog语法--g)阻塞与非阻塞赋值

-h)D触发器的描述

--Video

-i)时序电路的设计

--Video

-i)时序电路的设计--作业

-j) 面向测试的Verilog语法(1)

--3-3-1面向测试的Verilog语法(1)

-k) 面向测试的Verilog语法(2)

--3-3-2 面向测试的Verilog语法(2)

-k) 面向测试的Verilog语法(2)--作业

4、电路设计实例

-a)电路设计实例1

--Video

-b)电路设计实例2

--讲课视频

-b)电路设计实例2--作业

-c)电路设计实例3

--讲课视频

5、Modelsim仿真工具

-Modelsim仿真

--Modelsim仿真

6、Quartus工具

-a)综合及相关基本概念

--Video

-a)综合及相关基本概念--作业

-b)综合及优化

--Video

-c)门级仿真

--门级仿真

-d)Quartus综合及分析(1)

--讲课视频

-e)Quartus综合及分析(2)

--讲课视频

-e)Quartus综合及分析(2)--作业

-f)Quartus综合及分析(3)

--Video

-g)Quartus综合及分析(4)

--Video

-g)Quartus综合及分析(4)--作业

3-3-1面向测试的Verilog语法(1)笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。