《Xilinx FPGACPLD设计初级教程》课件第4章_第1页
《Xilinx FPGACPLD设计初级教程》课件第4章_第2页
《Xilinx FPGACPLD设计初级教程》课件第4章_第3页
《Xilinx FPGACPLD设计初级教程》课件第4章_第4页
《Xilinx FPGACPLD设计初级教程》课件第4章_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第4章VerilogHDL程序的描述方式4.1门级结构描述

4.2行为描述

4.3数据流描述

4.4混合描述

习题4

4.1门级结构描述

4.1.1VerilogHDL内置门元件的介绍

VerilogHDL中有丰富的门级元件,分为基本门和三态门。门级元件如表4.1所示。表4.1VerilogHDL的内置门元件上述门级元件的真值表如表4.2~4.7所示。在VerilogHDL语言中,对上述门级元件的调用格式如下:

门级元件名字<例化的门名字>(<输出端口列表,输入端口列表>);

例如:

andA1(out,in1,in2,in3,in4);//四输入的与门,其与门名字为A1

bufif0TRI1(out,in,enable); //低电平使能的三态门

notN1(out1,out2,in); //buf与not可有多个输入,但只有一个输出表4.2and(与门)和nand(与非门)的真值表表4.3or(或门)和nor(或非门)的真值表表4.4xor(异或门)和xnor(异或非门)的真值表表4.5not(非门)和buf(缓冲器)的真值表表4.6notif1(高电平使能三态非门)和notif0(低电平使能三态非门)的真值表表4.7bufif1(高电平使能三态缓冲器)和bufif0(低电平使能三态缓冲器)的真值表4.1.2门级结构描述实例

要描述一位全加器,用VerilogHDL语言门级结构描述的步骤如下:

(1)建立真值表。表4.8为一位全加器的真值表。表中,a、b、cin为输入端口;sum、cout为输出端口。表4.8一位全加器的真值表

(3)画门级组合原理图。由sum和cout的最简逻辑表达式可得到一位全加器的门级组合原理图(如图4.1所示)。但这种门级结构组合被综合成实际的电路后,可能会出现错误的结果,因为sum为二级输出,而cout为三级输出,这样sum的值总比cout的值输出得快,所以必须对此门级组合进行改进。仔细观察表4.8中输入与输出端口的数据可知,只要三个输入值中有两个或两个以上的值为1,输出cout的值就为1,因此cout的最简逻辑表达式变为:cout=ab+acin+bcin。图4.2为改进后的一位全加器的门级组合原理图。从图中可知,此时的sum和cout值都是二级输出。图4.1一位全加器的门级组合原理图(一)图4.2一位全加器的门级组合原理图(二)用VerilogHDL语言对图4.2所示的门级结构描述如下:

modulefull_add1(a,b,cin,sum,cout);

inputa,b,cin;

outputsum,cout;

wires1,m1,m2,m3;

and(m1,a,b),

(m2,b,cin),

(m3,a,cin);

xor(s1,a,b),

(sum,s1,cin);

or(cout,m1,m2,m3);

endmodule 4.2行为描述

VerilogHDL门级结构的描述方式主要是描述电路由哪些基本元件组成,以及这些基本元件的相互连接关系。VerilogHDL行为描述的方式比较随意,其语法结构非常适合于算法级和RTL级的模型设计。这种行为描述语言具有以下功能:

(1)可描述顺序执行或并行执行的程序结构。

(2)用延迟表达式或事件表达式来明确地控制过程的启动时间。

(3)通过命名的事件来触发其他过程中的激活行为或停止行为。

(4)提供了条件、if-else、case、循环程序结构。

(5)提供了可带参数且非零延续时间的任务(task)程序结构。

(6)提供了可定义新的操作符的函数结构(function)。

(7)提供了用于建立表达式的算术运算符、逻辑运算符、位运算符。

在VerilogHDL语言中,一般采用always过程语句来描述电路的行为特征。例如,用行为描述方式描述4.1节中的一位全加器有以下三种方式:

(1)一位全加器的行为描述方式一:

4.3数 据 流 描 述

数据流描述方式一般采用assign语句进行电路描述。例如,用数据流描述方式描述4.1节中的1位全加器有以下两种方式:

(1)一位全加器的数据流描述方式一:

modulefull_add5(a,b,cin,sum,cout);

inputa,b,cin;

outputsum,cout;

assign{cout,sum}=a+b+cin;

endmodule

(2)一位全加器的数据流描述方式二:

modulefull_add6(a,b,cin,sum,cout);

inputa,b,cin;

outputsum,cout;

assignsum=a^b^cin;

assigncout=(a&b)|(b&cin)|(cin&a);

endmodule 4.4混合描述

例如,用混合描述方式描述4.1节中一位全加器的方式如下:

modulefull_add7(a,b,cin,sum,cout);

inputa,b,cin;

outputsum,cout;

regcout,m1,m2,m3; //在always块中被赋值的变量应定义为reg型

wires1;

xorx1(s1,a,b); //调用门元件

always@(a

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论