文档详情

Verilog HDL程序设计语句和描述方式 .ppt

发布:2024-11-11约2.09万字共187页下载文档
文本预览下载声明

程序(2):采用for循环语句实现。

moduleshift_regist2(Q,D,rst,clk);

output[7:0]Q;

inputD,rst,clk;

reg[7:0]Q;

integeri;

always@(posedgeclk)

if(!rst)Q=8b000000;

else

for(i=7;i0;i=i-1)

begin

Q[i]=Q[i-1];

Q[0]=D;

end

endmodule图3.2-9例3.2-19综合后的结果

结构描述方式就是将硬件电路描述成一个分级子模块系统,通过逐层调用这些子模块构成功能复杂的数字逻辑电路和系统的一种描述方式。在这种描述方式下,组成硬件电路的各个子模块之间的相互层次关系以及相互连接关系都需要得到说明。3.3结?构?化?建?模由于任何硬件电路在结构上都是由一级级不同层次的若干功能单元组成的,所以结构描述方式很适合用来对电路的结构特点进行说明,这也是“结构描述方式”这种叫法的由来。结构描述方式的描述目标是电路的层次结构,组成硬件电路的各层功能单元将被描述成各个级别的子模块。根据所调用子模块的不同抽象级别,可以将模块的结构描述方式分成如下三类:

(1)模块级建模:通过调用由用户设计生成的低级子模块来对硬件电路结构进行说明,这种情况下的模块由低级模块的实例组成。

(2)门级建模:通过调用VerilogHDL内部的基本门级元件来对硬件电路的结构进行说明,这种情况下的模块由基本门级元件的实例组成。(3)开关级建模:通过调用VerilogHDL内部的基本开关元件来对硬件电路的结构进行说明,这种情况下的模块由基本开关级元件的实例组成。3.3.1模块级建模

模块级建模就是通过调用由用户自己描述产生的module模块来对硬件电路结构进行说明,并设计出电路。上一章已经对模块的概念进行了说明,下面主要讲述如何调用模块进行模块级建模。

模块级建模方式可以把一个模块看做由其它模块像积木一样搭建而成的。模块中被调用模块属于低一层次的模块,如果当前模块不再被其它模块所调用,那么这个模块一定是所谓的顶层模块。在对一个硬件系统的描述中,必定有而且只能有一个顶层模块。1.模块调用方式

在VerilogHDL中,模块可以被任何其它模块调用,这种调用实际上是将模块所描述的电路复制并连接。一个模块可以调用多个模块,这些模块可以是相同的,也可以是不同的,语法要求在于同一模块中被调用模块的实例名不同。模块调用的基本语法格式是:

模块名参数值列表实例名(端口名列表);其中,“模块名”是在module定义中给定的模块名,它指明了被调用的是哪一个模块;“参数值列表”是可选项,它是将参数值传递给被调用模块实例中的各个参数;“实例名”是模块被调用到当前模块的标志,用来索引层次化模块建模中被调用模块的位置;“端口名列表”是被调用模块实例各端口相连的外部信号。例3.3-1一个简单的模块调用的例子。

moduleand_2(a,b,c); //2输入与门模块

inputa,b;

outputc;

assignc=ab;

endmodule

modulelogic(in1,in2,q); //顶层模块

inputin1,in2;

outputq;

and_2 U1(in1,in2,q); //模块的调用

endmodule该例采用模块调用的方式实现了简单的逻辑运算,包括2个模块,其中第一个and_2是自定义的2输入与门模块,为底层模块;而第二个模块logic是顶层模块,用来调用and_2模块。其中“and_2U1(in1,in2,q);”是模块实例语句,实现对2输入模块的调用,采用的是端口的位置对应方式。其中in1、in2、q分别与2输入与门模块中的a、b、c相连接。

如果同一个模块在当前模块中被调用几次,则需要用不同的实例名加以标识,但可在同一条模块调用语句中被定义,只要各自的实例名和端口名列表相互间用逗号隔开即可,其基本语法格式是:

模块名参数值列表实例名1(端口名列表1),

参数值列表实例名2(端口名列表2),

...

参数值列表实例名n(端口名列表n);

在上面的格式当中,“模块名”就是被调用的模块,“参数值列表”是可选项,“实例名”代表生成的模块实例,实例名必须各不相同,“端口名列表”指明了模块

显示全部
相似文档