入门基础之模块建模

上传人:lcm****20 文档编号:47572656 上传时间:2018-07-03 格式:PDF 页数:9 大小:506.11KB
返回 下载 相关 举报
入门基础之模块建模_第1页
第1页 / 共9页
入门基础之模块建模_第2页
第2页 / 共9页
入门基础之模块建模_第3页
第3页 / 共9页
入门基础之模块建模_第4页
第4页 / 共9页
入门基础之模块建模_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《入门基础之模块建模》由会员分享,可在线阅读,更多相关《入门基础之模块建模(9页珍藏版)》请在金锄头文库上搜索。

1、模块模块级建模级建模 模块模块的定义的定义 模块的语法结构如下: module () 声明语句 模块组项 函数和任务定义 specify 块 endmodule 针对上述格式作如下说明: :是给模块取的名字,它是模块的标识符 :是由输入端口、输出端口、双向端口的端口表达式按一定次序组成的 一个列表,它用来指明模块所具有的端口。模块可以利用这些端口与其他外部模块进行 通信 声明语句:用来对模块端口类型(输入、输出或双向端口) 、模块内部数据的类型(寄存 器变量、 存储器和线网类型) 以及模块内参数进行说明。 模块中将用到的声明语句如下: parameter: 参数声明语句 input:输入端口声

2、明语句 output:输出端口声明语句 inout:双向端口声明语句 net-type:线网型数据声明语句 register-type:寄存器类型变量声明语句 time:时间类型变量声明语句 integer:整数类型变量声明语句 real:实数类型变量声明 event:有名事件声明语句 模块组项:模块功能的描述体部分,用来对模块的功能特点进行描述,在这一部分可以 出现具有行为描述性质的语句结构(initial 过程块、always 过程块),也可以出现结构描 述语句(模块实例语句、门级元件实例语句、开关级元件实例语句) 。如果在这个“模块 组项”中只使用了结构描述语句,那么该模块就是一个“结构

3、描述模块”。 函数和任务定义:用来对模块组项内使用的一些函数和任务进行定义。由于函数和任务 都是行为描述性质的程序结构,所以在“结构描述模块”中不能使用函数或任务。 Specify 块:用于对模块输入、输出端口之间的路径延时时间量进行说明,同时还可以进 行时序检验 模块模块的的端口端口 模块模块端口列表端口列表 模块端口列表可以是隐式端口名形式和显式端口名形式。 (1) 隐隐式端口名形式式端口名形式 其格式为: (,) 其中各个指明了各个模块端口与模块内部变量的连接关系, 一个可以是: 模块内某个变量的标识符 模块内某个矢量变量的某一位 模块内某个矢量变量的某几位 上面三种形式的组合 在隐式端

4、口名形式的端口列表中, 没有显式地为各个模块端口指定端口名, 这时各个模块端 口的端口名将按照如下规则得到隐式定义: 如果给出的端口表达式是一个变量标识符(上面端口表达式形式的第一种情况) ,则该 端口表达式对应的端口名被默认地定义为该标识符本身 如果给出的端口表达式不是一个变量标识符(上面端口表达式形式的后三种情况) ,则 对应的端口将处于“无名状态”(不存在端口名) 例:例: module ex1(a,b,z) input a,b; output z; endmodule module ex2(a1,a0,0) input 1:0 a; output z; module ex3(a,b,z

5、) input a,b; output z; endmodule 在上述例子中,所有的模块都采用了隐式端口名形式的模块端口列表 其中 ex1 的端口列表由三个标识符 a、b、z 组成,它指明模块 ex1 的三个端口将分别于模块 的三个内部变量 a、b 和 z 相连接,此时这三个端口将拥有隐式定义的端口名 a、b 和 z 模块 ex2 中的前两个端口表达式 a1和 a0是矢量变量 a 的两个位,这表明 ex2 的前两个端 口分别连到变量 a 的两个位上, 由于这两个端口表达式不是标识符的形式, 故这两个端口没 有端口名。同理 ex3 中第一个端口没有端口名 (2) 显显式端口名形式式端口名形式

6、其格式为: (.(),.(),.() 在上述格式中, 列表中的每一项都包含着一个端口名和一个端口表达式, 在每个端口名的前 面都要加一个点号“.”来表明它是一个端口名; 而端口表达式则应位于端口名后面的圆括号内。 在这种端口名列表形式下, 列表中的每一项都说明了一个端口: 其中的为每一个端 口指定了一个端口名, 端口表达式则指明了该端口与模块内部的连接关系。 与隐式端口名的 情况一样,这里的端口表达式也可以是前面给出的四种端口表达式之一。 模块定义中的端口列表也可以是由显式和隐式端口名形式的端口项共同组成的。 端口端口声明语句声明语句 端口声明语句一共有以下三种: input 输入端口声明语句

7、 output 输出端口声明语句 inout 双向端口声明语句 端口声明语句的作用对象必须是与模块端口相连的模块内部变量, 而不能是端口名 (端口名 与内部变量标识符同名的情况除外) 。端口名的作用(在进行模块调用时)是作为模块端口 的标志来实现与外部信号的连接, 在模块内部这些端口名是不可见的。 模块内部对端口进行 的输入输出操作是通过端口表达式中出现的那些内部变量进行的 (这些变量与对应的端口相 连) ,所以在模块内部必须对这些内部变量的输入输出特性进行说明。 模块模块的的调用调用 模块实例模块实例语句语句 其基本的语法格式如下: () 对上述格式做如下说明: 就是在进行模块定义时(mod

8、ule 语句中)为被调用模块指定的模块名 是可选项,它是由一些参数值组成的一张有序列表,这些参数值将被传递 给被调用模块实例内的各个参数 是为本次模块调用后所生成的模块实例所取的一个名称,它可以用来对所生成 的模块实例进行唯一标识。如果在某个模块内出现了多次模块调用,则各次调用所指定 的实例名必须不相同,即在同一模块内不能出现两个相同的实例名。同一个上级模块可 以对多个下级模块进行调用,也可以对一个下级模块进行多次调用。这样就可以在同一 电路中生成多个一模一样的电路结构单元,而这些电路单元就是每次模块调用后生成的 模块实例。所以为了对这些相同的电路结构单元进行区分,为它们取的模块实例名应该 是

9、各不相同的。实例名和模块名的区别是:模块名标志着不同的模块,用来区分电路单 元的不同种类;而实例名则标志着不同的模块实例,用来区分电路系统中的不同硬件电 路单元。 是由外部信号端子组成的一张有序列表,这些外部信号端子代表着与模块 实例各端口相连的外部信号。所以它指明了模块实例与外部电路的连接情况。 如果需要在当前模块内对同一被调用模块进行多次调用,可以采用如下的模块实例语句 格式: () () . () 例例 module ffnand(q,qbar,present,clear); output q,qbar;/电路输出端口声明 input present,clear;/电路输入端口声明 /调

10、用 Verilog 内基本元件 nand nand g1(q,qbar,present), g2(qbar,q,clear); endmodule module ffnand_wave; wire out1,out2; reg int1,int2; parameter d=10; ffnand ff(out1,out2,in1,in2);/调用下级模块 initial begin #d in1=0; int2=1; #d in1=1; #d in2=0; #d in2=1; end endmodule 模块调用模块调用时的端口对应方式时的端口对应方式 在进行模块调用时, 模块实例语句中的用来指

11、明模块式例端口与外部电路的连 接状况。端口连接表是由被称为“外部信号端子”的以一些表达式组成的,其中的各个信号端 子将分别与对应的端口相连。 在端口连接表中, 可以采用如下两种方式来指定模块实例端口与外部信号端子之间的连接关 系: (1) 端口名称关联方式 格式如下: (.(),.(),.() ) 其中的信号端子可以是下面列出的任何一种类型: 寄存器型变量或线网型数据标识符 矢量数据的某一位 矢量数据的某几位 前述几种数据类型的合并 数值表达式(输入端口) 在端口名关联方式下,端口连接表内显式地表明了与每个外部信号端子相连的模块端口名。 即所代表的端口将与相连接 例例 module twobi

12、ts_full_adder(data0,data1,carry_in,result,carry_out); input1:0 data0,data1; input carry_in; output 1:0 result; output carry_out; wire w1; onebit_full_adder U1(.a(data00),.b(data10),.cin(carry_in),.s(result0),.cout(w1), U2(.a(data01),.b(data11),.cin(w1),.s(result1),.cout(carry_out); Endmodule / modul

13、e onebit_full_adder(a,b,cin,s,cout);/1 位全加器 input a,b,cin; output s,cout; assign s=(ab)cin;/本位和输出 assign cout=(a/进位输出 endmodule 逻辑图如下: 在端口名称关联方式下,如果端口连接表内某一项的信号端子是默认的(在“信号端子”的位 置处只出现一对空括号“()”) ,则这一项的端口名所代表的端口将处于悬空状态,例如下 面这条模块实例语句中: onebit_full_adder U1(.a(data00),.b(),.cin(carry_in),.s(result0),.cou

14、t(w1) 端口连接表第二项的信号端子是默认的(空括号) ,这种情况表明端口将处于悬空状态。 如果被调用模块的某个端口不具有端口名(该端口处于无名状态) ,则对该模块调用时不能 采用端口名关联方式,而只能采用下面将介绍的方式带调用。 (2) 端口位置关联方式 其调用格式如下: (,) 其中各个“信号端子”可取的类型与前面讲述的“端口名称关联方式”时的情况相同。 在端口位置关联方式下,各个信号端子按一定的次序出现在端口连接表中,这些信号端子将与在(模块定义时给出的) “端口列表”中出现的各个模块端口依次相连,端口连接 表中的第一个信号端子将与端口列表中的第一个模块端口相连接,第二个信号端子将与

15、端口列表中的第二个模块端口相连接,以此类推。 若端口连接表中某一项的“信号端子”,则表示这一项所对应的模块端口未被连接 模块调用模块调用时的时的阵列调用阵列调用方式方式 当需要对同一模块进行重复性的多次调用时,我们可以采用如下方式调用模块: 阵列左边边界:阵列右边边界() 其中,“阵列左边边界”和“阵列右边边界”是两个常量表达式,它们用来指定调用后生成 的模块实例阵列的大小。 例例: module data_change(out,ina,inb); input 3:0 ina,inb; output 3:0 out; wire 3:0 out,ina,inb; nand nand_arrey3:0 (out,ina,inb);/阵列调用方式的模块实例语句 endmodule / module nand(ina,inb,nand_out); input ina,inb; output nand_out; assign nand_out=(ina

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 其它办公文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号