当前课程知识点:IC设计与方法 >  3、Verilog语法 >  b)端口、信号及数据类型 >  讲课视频

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

讲课视频在线视频

讲课视频

下一节:讲课视频

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

讲课视频课程教案、知识点、字幕

具体到语言来说

它有很多用处

首先我们来看一下

怎么用语言去描述电路的结构

这是一段Verilog代码

我们来看一下实际的代码

对于一个电路而言

描述一个电路的话

大概我们要关注它的两方面

一个是它的外特性

具体到一个电路

它外面都有哪些输入信号和输出信号

每个信号起什么作用

这是电路的外特性

就好像在幻灯片的右上角

我们表述了一个rs触发器

这个触发器有复位端 置位端 输出端

和反向输出端

这是它的外特性

第二部分是电路的内特性

也就是说

电路内部是有哪些元器件构成的

他们是怎么连接成功的

在这里面的话就是

我们幻灯片的左下角这张图

表述了RS触发器发器

是由两个与非门互连形成的电路

对于这样一个电路

我们用图的方式的话

用右上角的图和左下角的图

能够描述出这个电路

如果用代码的话

对应的是左上角的这部分代码

首先电路的外特性这部分

我们从代码的第一行

第一 第二 第三行可以表示出来

这些代码看起来非常的直观

第一行表示了这个电路叫什么名字

叫rs触发器

然后他有4个输入和输出信号

第二行和第三行表述了这些信号

哪些是输入哪些是输出

这是描述外特性的这部分

中间第二层代码描述了电路的内部特性

从这个语句的话

看起来也非常的直观

比如说Q信号

它是由SET信号和QB信号相与以后

然后取一个非

大致就是表述了一个

类似与非门这样的一个功能

QB信号也是类似的

这就是一个典型的Verilog代码

前边这部分表述了电路的外特性

后面表述了电路的内部特性

我们可以把这段代码归结成一个模型

对于任何一个Verilog代码

都会用一个Module来表示一个电路单元

Module是一个Verilog表述电路单元的

最基本的一个模块

在每一个Module或者每一个电路单元

都分为三部分

一个是Module的名字和端口的列表

这部分表述了电路的外部特性

第二部分比刚才的例子稍微复杂一点

有一个数据定义

就好像刚才那张图里边

电路内部有一些连线

这些连线的话

要通过数据类型的定义及连线的定义

来表述电路内部的连线

那这部分有点像c语言里面的局部变量的定义

第三部分就是功能的描述

用来描述电路内部的功能

具体这部分代码有多复杂

取决于电路有多复杂

最简单的可能只有一行两行

最复杂的可能有100行200行

甚至1000行去描述一个复杂的电路

在这些幻灯片里边

左边是Verilog语言的表述方式

右边是VHDL的表述方式

为了方便对比

我把这两种方式都列在里面了

虽然我们这门课学的是Verilog

通过对比

大家也可以去看明白

如果是另一种描述语言

比如VHDL语言的话

它大致是一个什么样子

我们把刚才所说的Verilog代码的模型

和一个实际的Verilog代码片段

也列在了幻灯片的右部

我们一一对应看一下

第一部分是模块的名字和端口的名字

右边的话

是我们的一个测试电路

它有六个输入信号

然后这些输入信号里面有

我们看第一行

第一行的ab是单根的输入信号

然后第二行的c和d

是两个位宽各自是4位的输入信号

第三行和第四行表述的输出信号

分别都是单根信号和多位位宽的输出信号

从这里面我们就可以看到

描述电路的输入和输出信号的时候

我们不但可以用这种和实际的硬件连线

相对应的一根一根地线来表示这个信号

也可以用一些总线

比如说这种4位的总线sum

来表示这种多位信号

这样的话

在描述输入和输出信号的时候就比较方便

第二部分是数据类型定义

那在这部分里面

定义了电路里边的内部用的一个信号

在这里面的话

这个sum又被重新定义了一下

也就是说这个sum信号不但是输入

不但是我们电路的输出信号

其实也是我们电路的一个内部信号

在这里面的话

具体又用到了两个新的数据类型

我们在后面具体讲信号的属性的时候

会专门去讲是什么意思

第三部分用一些语句

去描述了电路的内部功能有多种描述方式

我们后面会结合具体的语法来讲

到底都是什么样的描述方式

我们下面来详细的看一下

端口的定义以及模块的定义

对于一个电路而言

我们通常电路的信号的话

有输入信号、输出信号以及双向信号3种

对于输入和输出

我们分别用input output来定义

对于双向信号

我们用inout属性来进行定义

信号的类型的话

又分为两种一个是wire类型

一个是reg类型

具体wire和reg是什么

我们到后面会详细的说

因为wire和reg

跟我们常规意义上的电路好像以前

如果大家没有学过硬件描述语言的话

这是一个新的概念

我们具体到电路的物理特性的话

就是它的一个方向特性

输入和输出

我们来看一下右边这个例子

比如说还是刚才这个例子

对于a、b、c、d

它就是输入信号

在定义信号的时候

我们不但可以用名字来表示这个信号

具体是指代是干什么用的

还可以用一个这样的一个形式

来表示它的位宽

是一个多位的位宽

对于电路内部的连线

通常我们从一个实际电路的角度来说的话

内部的连线就是跟互连线wire就行了

在Verilog语言里边

又定义了另一种特殊的连线

称之为叫reg

reg和wire的特性在很多课文里面都讲的

说实话讲的不是特别清楚

我们可以针对工程来说

给大家一个比较简单的一个定义

如果将来我们在Verilog代码里边

某一个信号

比如说sum信号

是由一个always语句块的输出产生的话

那我们在前面定义这个信号的时候

要用reg类型

其他的时候都用wire类型就可以了

其实根据我对Verilog语言的理解

那个reg类型和wire类型

它的定义其实是没有

从工程的角度来说

或者说从RTL级电路设计的角度来说

它是没有什么意义的

我们可以把所有的信号

都定义成wire类型就可以了

因为现在的EDA工具

它完全可以识别出

哪个信号是该是什么属性

只不过可能是由于当初

IEEE标准组织在定义的时候

从某种其它原因角度

去定义了这两种不同类型的这种属性

我们再来看一下主要的数据类型

Verilog定义了3种主要数据类型

net、Register和parameter三种类型

按照Verilog语法里面定义

net型表示了电路里边的

比如说右边这个电路里面的某些连线

这些连线都称之为叫net类型

net类型的话

下面又分了很多的类型

我就不再一一的去念了

在我们实际工程里边

我们基本上只会用到wire这种类型

第二种是register类型

按照Verilog语法定义

register类型

它表示一个信号的线能够保持其值

并且直到它被赋予新的值之前

它的值都能够保持不变

听起来很像寄存器

是吧

听起来很像我们所说的

D触发器这样的一个功能

但实际上

register这种数据类型跟触发器是两码事

完全两个不同的概念

在register里面又有好多种子类型

在我们的RTL级电路设计里面

通常我们只会用到reg这种类型

所以总结一下我们在定义一个信号

它的类型的时候

数据类型的时候

通常我们只会用到wire类型和reg类型

再结合刚才我提到的reg类型

只有在某个特殊情况的时候

我们才需要把一个信号定义成reg类型

其他所有的我们应该定义成wire类型就行

第三种属性是参数类型

parameter类型

这个数据类型主要是方便我们去定义一些

将来在编译的时候需要去改变的数据类型

我们来看一下刚才我们提到的

两种常用的数据类型

一个是wire

中文的话

在很多书籍里面把它翻成叫线网

有时候也称之为叫网络

第二种是reg类型

顾名思义

wire类型用来表示

电路里面的任何根物理连线

都可以用wire类型来去给它表述

reg型的话

按照语法的定义

它是某一个具备存储功能的某一根连线

实际上的话根据我们在RTL级的工程经验

当我们的一个信号是always

或者是initial过程的输出的时候

我们把它定义成是reg类型

其他无论什么其他情况

我们都是把它定义成wire类型

所以的话这里面我要强调的

就是这个reg类型

千万不要把它跟D触发器

或者什么Flip-flop给它混淆在一起

我们就记住

在写代码的时候只有一个代码

这是一个代码书写规范

从某个角度来说

可以把reg类型

看成是一个代码书写规范的要求

当我们的代码里边

有always块产生信号的时候

这个信号在前面定义的时候

就需要把它定义成reg类型

除了这种情况

其他所有的线都定义成是wire类型

我们再来看一下

实际的数据类型定义的一个例子

左边是一个电路

一个叫顶层模块的一个描述

这个顶层模块的名字是top

在这个顶层模块里面

内部有用到了几个信号

通常我们就会

把它需要在顶层模块的这个位置

要把它定义出我们所用的信号

比如说y、a和b

这3个信号

在讲这3个信号之前

我们先看一下右下角

右下角的一个底层电路模块

在我们这个电路里边相当于有两个模块

一个是小电路模块

称之为叫DUT

第二个是在大电路模块称之为叫top

这个DUT是用在top里面的一个小模块

在这个DUT电路里边

我们的电路有3个信号

两个输入信号a、b和一个输出信号y

在这个里边的话

y、a、b都是互连线这个wire类型

在顶层电路里边

我们把这个DUT

当做一个小电路

用某个Verilog语句给它映射进来

或者说放在我们的顶层电路里面

从物理的概念来说的话

就有点想把一个小的元器件

插在电路板上

插在电路板上一样

在这里边这个y、a、b信号就变成了

我们顶层电路的内部信号

那在这里面y、a、b

到底该定义成是wire还是reg类型呢

根据刚才所说的

要看这个a、b和y都是由什么东西产生的

根据我的经验

你可以一开始把他们都当做wire类型来对待

我们再往下接着看代码

在这个顶层电路里面有一个initial模块

initial模块它能够产生a b这些信号

a信号、b信号都是由这个模块产生的

所以回过头来

我们在再去检查a、b信号定义的时候

我们就需要把这个a、b

定义成是reg类型了

这就是我们对信号定义的

一种工程上的一种判断方法

我们总结一下

我们一开始可以把所有的信号

都定义成是wire类型

定义完了以后

当我们再去写具体电路的时候

发现有时候需要用一个initial模块

或者说always模块去产生这个信号的时候

我们回过头去

再把这个信号的定义

改成这个reg类型就可以了

我们刚才已经把

怎么用Verilog语言去描述一个电路的外特性

所用到的基本语法知识大概都讲了一下

我们回顾一下

我们讲怎么用Module语句去定义一个模块

然后用input

output和inout的表述信号的输入和输出

用wire和reg去定义信号的类型

可能有些同学会讲

这只是表述电路的一个外部特性

有这么重要吗

非常重要

我们来看一下

实际的一段电路的外部特性的一个描述

这是一个实际的一个

Pie编码器的电路模块的外特性描述

这个电路可能有

将近20个输入和输出信号

我们可以看一下在实际的工程里边

电路的端口定义的时候

一般都是非常规范的

大家会看到不同的风格

这只是我给大家建议的一种风格

在实际工程里面

我们所需要的就是你的电路描述非常规范

比如说像在这个代码里边

第一部分描述的是我们电路的名字

以及电路有什么信号

第二部分描述了这些信号的属性

它是输入还是输出

是wire类型

还是reg类型

信号的位宽是多宽

通过这样的一个很规整的方式

能够让大家看清楚这个信号的各个属性

非常清楚

在这里面

比如说是个input这3个信号

由于是wire类型是默认类型

所以这4个字就可以省略掉了

看起来会简单一些

再往下的下一部分是我们电路的内部信号

面是外部信号

这部分内部信号里面

同样

第一列是他的属性

是wire还是reg

第二列是它的宽度

最后一部分是一些parameter

我们定义的一些电路的一些常量

这就是一个规则的代码风格

在这我给大家用了很长时间去讲

怎么描述一个电路的一个外部特性

其实在做一个工程芯片设计的时候

描述电路的外部特性非常的重要

大家不知道有没有关注到

我这个嘴角好像已经上火了

是吧

上火是因为我这两天吃了一个特别大的亏

我们有一个工程项目

这个工程项目的话

前两天

应该不能说前两天

这个项目已经持续了将近一年了

在前几天

我们刚刚发现这个项目芯片流片回来以后

不成功的原因

这个原因是什么呢

就是某个工程师在定义电路的外部信号的时候

或者说定义电路的连线的时候

少连了一根线

少定义了一个信号

导致我们这个芯片流片回来以后

不能稳定的工作

造成多大损失

造成我们大概将近150万人民币的损失

150万是什么概念

差不多是一个工程师工作10年

10年的工资的这个损失

这是直接造成的经济损失

当然还有一些间接损失

为了找出这个问题

我们在拿到芯片以后

花了将近半年的时间

经过各种各样的排查才找到这个原因

所以

又是我要把我可能在第一节课就讲过的话

再重复一遍

对于一个集成电路设计工程师而言

你做事情必须异常的小心

每一步都需要仔细的去检查

任何一个小的错误

可能由于我们的种种原因

你忽视的这种小错误都可能造成巨大的影响

就像刚才说的这个项目一样

会给我们项目造成一种毁灭性的这种影响

都是有可能的

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)--作业

讲课视频笔记与讨论

也许你还感兴趣的课程:

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