当前课程知识点:IC设计与方法 >  3、Verilog语法 >  d)Assign 语句 >  3-1-4assign语句

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

3-1-4assign语句在线视频

3-1-4assign语句

下一节:3-1-5 Assign 举例

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

3-1-4assign语句课程教案、知识点、字幕

我们前面已经讲完了

一些基本的语法要素

包括怎么定义电路的名字

怎么定义端口和信号

下面我们要来看

怎么描述一个电路的内部结构了

我们看一下

在这页幻灯片上

我们列举了Verilog语言以及VHDL语言

设计一个电路的内部特性的时候

设计具体实现的电路的时候

能够用哪些技术手段

大体来说有三大类技术手段

一种是用连续赋值语句

描述一个简单的电路

第二种是用过程描述一个相对复杂的电路

第三种是用元件例化语句

描述一个别人已经设计好的电路

或者换句话说

我们可以把别人设计好的电路

直接拿过来用到我们的电路里面

所以这是我们用硬件描述语言

设计电路的三个手段

在用过程的手段里面

在过程里又可以用到这四种语法

来实现过程内部的电路

或者说内部的电路细节

包含阻塞赋值、非阻塞赋值

if语句和case语句

从这里面我们可以看到

一共有七个关键字

也就是说

用Verilog语法去设计电路的时候

一共有这七个关键字就能够实现电路了

加上前面我们所描述的

定义端口、定义信号

一共加起来

也就不超过二十个关键字

用这些手段就能够完成

任意复杂度的电路的设计

从另一个角度来说

不管多复杂的电路

我们只需要用不超过20个关键字

就可以把它设计出来了

如果你觉得用这些语法知识

还不能够把电路表述出来

那一定就是你的设计思路

或者说设计方法上有问题了

我们首先来看一下连续赋值语句

连续赋值语句

通常是用来实现组合逻辑电路

看一下这一页幻灯片

在这个电路里

在这个代码里

我们先看一下电路的外特性

因为我们刚刚接触硬件描述语言

所以

碰到简单的电路

我也会从头分析

到后面的例子

我们就只看核心部分了

就不再一一的去讲了

这个电路模块的名字叫test

它有3个输入输出端

其中有两个out1和out2是输出信号

in是输入信号

在这里面

后边这部分描述了电路的内特性

我们用了assign语句

连续赋值语句

我们来看一下第一个例子

是把输入信号求反后赋给输出信号out2

这相当于是一个非门

在这里面

因为举的例子非常简单

所以就只用了一个非门来表示

实际上这个等号后面可以是

一个任意复杂的布尔函数

换句话说

这条assign语句可以实现任意复杂度的

产生一个输出信号的组合逻辑电路

这么一句话就够了

第二个例子

一个比较复杂的结构

这个语法结构和C语言的描述方式是类似的

或者说完全一样的

根据sel信号的值来判断

如果sel信号是1

有效的时候把i1送给out

如果是0的话

把i0送给out

从电路的角度来说

这条语句相当于描述了一个多路选择器

这就是assign语句的比较典型的两个例子

总结一下:assign语句可以用来实现

比较简单的组合逻辑电路

有时候有一些特例

我们在定义电路内部信号的时候

可以直接把assign语句

跟信号定义结合在一起

这样代码写起来或看起来会更简洁一些

但实际上在工程里

不太建议这么使用

工程里强调的是做事情非常规则

信号定义wire a就放在这

然后电路的功能放在下面

这样

所有的代码看起来都非常的规整

当你的代码从几十行

变成几百行甚至上千行的时候

工程上的规范性就非常重要了

我们再来看一下更多的assign的例子

前面这几个例子

前面这两个例子已经讲过了

就不多说了

看一下稍微复杂一点的例子

如果我们有多个信号

需要用不同的assign去写的时候

我们可以看到

可以把多个语句写在一起

中间用逗号隔开

这也是assign的一种风格

当然在我们这门课里面

或者说我个人不推荐这种风格

我希望大家在写代码的时候

都按照规矩一行一行的写清楚

代码写得很简洁

或者代码写的行数少

从工程的角度来说

没有任何实际的意义

工程人员或者说我们作为项目而言

我们只关心最终设计出来的芯片的面积大小

如果你做出来的芯片只有1000门

代码写了1万行

不是问题

如果你的代码写了1000行

但是做出来电路有10万门100万门

那就是问题了

后面两行是一个比较复杂的例子

我们来看一下

在这一行里

在倒数第二行里

是把a b cin三个信号加起来以后

产生一个输出

这个输出

因为位宽变宽了

位宽一定会比a和b的位宽更宽

所以输出(可以)分别赋到两个信号

低位赋给了s

高位赋给了cout

这也是一种使用方式

换句话说

assign语句产生电路

可以根据输出结果的位宽

赋给几个不同的信号

最后一个例子

我们来看一下

最后的例子

是从原始信号byte里面取出了它的第7位

也就是它的最高位第7位

我们可以假设这个信号是一个8位信号

我们把最高位取出来以后

用大括号给它扩展成两倍

相当于是把最高位又扩展了两位

再和原始的数据合并成一个新的矢量

新的更宽的矢量

如果原始的byte是一个8位信号

合并完的信号就变成了一个10位的信号

这个10位信号的最高两位

和原来信号的第八位是一样的

变成一个新的10位信号赋给out

那工程上这是什么意思呢

相当于把一个8位的有符号数

它的符号位扩展了一下

把8位信号变成了一个10位信号

相当于把有符号数

把8位有符号数变成了10位的有符号数

这也是工程里面常见的一种形式

好 回过头来

我们忘了刚开始的这条assign语句

这条语句跟前面的例子稍微有一点点不同

我们在assign前面加了一个#2

在这里面 #2表示延时两个时间单位

我们看一下右边这张图

就是它实现的一个效果

这个输出信号相对输入信号

经过两个时间单位以后才变化

这个时间单位到底是多少

要结合整段Verilog代码

在刚开始定义的延时单位

我们后面讲到测试的时候会讲延时的概念

这就是assign语句几种实际的应用的例子

在这些例子里

我们看到

对信号的操作

或者说信号的运算

我们举了例子

有加减等等这些运算

这些运算

实际上对应的都是一些电路

在Verilog语言里面定义了哪些运算

我们这都给大家列出来了

大概有这些类型的运算

第一类是算术运算

算术操作

加减乘除取模等等

在这里面我们如果写代码的时候

每用到一个运算符号

实际上在工程里面相当于

是出现了一个小的电路模块

这个电路模块

实现一个加法器、一个减法器

一个乘法器或者一个取模电路等等

我们在代码里面

如果要用到除法的时候一定要特别的慎重

大家可以回想一下

除法

如果是除2、除4、除8等等

这些除以2的n次方这样的运算

大家想一想

是什么效果

相当于是把一个有一定位宽的数

右移了若干位

除2的话

相当于是右移一位

除4的话

相当于是右移两位

但如果说让你去设计一个除3的电路

或者说除5的电路

电路是什么效果呢

会变得非常非常的难实现

所以我们在做除法的时候

如果你想要用到除法符号的时候

一定要想清楚

如果只是去做电路的仿真

去模拟一下

你可以除以任何的数

但如果是想设计出一个具体电路

那只能允许除以2的幂次方

第二类是关系操作

可以用大于、小于、大于等于等等这些操作

和C语言相类似

表述方式也和C语言相类似

原因是因为Verilog语言和C语言是非常相似的

这些操作也会映射出具体的电路

我们的代码里面(如果)写了个大于号

它变成最终的电路的时候

就会出现一个比较器

再往下是一些逻辑运算的操作

包括与或非等等

以及位操作和归约操作

具体这些操作是什么意思

我们后面结合实际的例子来看

和C语言类似

我们还有移位操作和条件操作

移位操作

我们刚才说了

表示把一个信号可以右移多少位

或者是左移多少位

在电路里对应的是相当于从信号里

取出若干位出来

还有就是连接和复制操作

在刚才的例子里已经用的比较多了

具体每一个操作的语法是什么样子

在我们这门课里面

不会特别去强调

因为大家可以从各种网络上的资源

从参考书里面去找到

所以我这只是给大家归类总结了一下

有这些操作可以去使用

方便我们的电路设计

下面我们再来看一下逻辑操作

位操作和规约操作

它们的差异

举个例子

如果是a是这么一个数(1011)

b是这么一个数(0010)

如果是位操作

它对应的是两个二进制数的逐位操作的过程

比如说a或上b

就是a和b的每一位相或所得到的结果

也就是说位操作

是按输入的数据

逐位去进行运算

归约操作的结果

只会出一个比特的结果

比如说这个a前面加一个或

表示把a的每一位都做相同的或运算

最后得到输出

第三个是逻辑操作

逻辑操作相当于是把a和b的值

按照这个要求去运算

比如说a或上b

表示判断a、b里边是不是都是非零的值

然后得到一个逻辑条件

这种操作

通常用在条件判断语句里面

去判断条件是不是发生了

我们这里面再来看一下

实际我们用到这些操作

它的物理意义,是什么物理意义

刚才我们已经提到了

每一个操作

它对应的都是一个电路

我们来看一下实际是什么情况

以左边这段代码为例

c是由a、b相加得到的

这样一条assign语句对应的代码

所得到的电路就是这样一个电路

我们看一下右面的电路

a和b相加以后得到c

所以实际上会映射出一个加法器

bigger信号是由a大于b产生的

a大于b就会映射出一个比较器

这个比较器的输出就是bigger信号

然后eq信号是由a、b的相等判断的

逻辑操作得到的

所以eq信号由一个等于判断的比较器

产生的输出信,是eq信号

这是我们左面这段代码

直接通过翻译以后映射出来的原始电路

右下角这张图是实际在EDA软件里面

产生出来的具体的电路结构

从这里面我们可以看到每一个操作

每一个信号操作

都会实际映射出一个子电路出来

这个子电路有可能会非常的复杂

也有可能会很简单

只是一根连线

所以还是刚才我们提到的这句话

在Verilog设计的时候

我们虽然写的是类似于C语言的程序

但是大家的脑子里面要想的是

这段程序背后对应的是一个什么样的电路

这个概念是一定要有的

有了这个概念以后脑子里

才会始终绷着一根弦

我写的这段代码

它对应的电路是什么样子

脑子里有了这个电路以后

我们才会去想

我怎么才能去改变电路结构

或者说改变代码以后

用一个更好的电路结构去实现它

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-1-4assign语句笔记与讨论

也许你还感兴趣的课程:

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