VHDL用户自定义元件U.ppt
《VHDL用户自定义元件U.ppt》由会员分享,可在线阅读,更多相关《VHDL用户自定义元件U.ppt(61页珍藏版)》请在三一办公上搜索。
1、第4章用户自定义元件(UDP),4.1 UDP4.2 组合逻辑电路UDP 4.3 时序逻辑电路UDP,4.1什么是UDP?,在 Verilog 结构模型中,可以使用:二十多个门级原器件。用户定义的原语。UDP 可用于ASIC 库单元设计和小规模芯片和中规模芯片设计。可以使用 UDP 扩大预定义原器件的范围。UDP 是自包含的,不能调用其他的模块。UDP 既可以用来代替时序逻辑元件,也可以代替组合逻辑元件。使用真值表来描述 UDP 的行为。调用 UDP 的方式与调用嵌入的原器件的方式相同。,UDP的定义UDP的定义是由一个独立的定义模块构成的,该模块由关键词“primitive”和“endpri
2、mitive”界定。UDP定义模块的语法格式:,primitive(,);输出端口类型说明(output);输入端口类型说明(input);输出端寄存器变量说明(reg);元件初始状态说明(initial);table;endtableendprimitive,对上述的语法格式,需要说明如下几点:(1)UDP定义模块不能出现在其它模块定义之内,UDP定义模块和其它模块具有相同的语法结构地位,它的定义必须独立于其它模块结构成分。所以UDP定义模块必须出现在其它模块定义之外,同时它也可以出现在独立的文件中。,【例4-1】UDP定义模块的正确位置。module MODULE1;/模块MODULE1定
3、义的开始/模块MODULE1描述体endmodule/模块MODULE1定义的结束primitive MY_GATE(out,a,b);/UDP元件MY_GATE定义模块的开始/UDP元件MY_GATE定义的描述体endprimitive/UDP元件MY_GATE定义模块的结束module MODULE2;/模块MODULE2定义的开始/模块MODULE2 描述体endmodule/模块MODULE2定义的结束在例4-1中,UDP元件MY_GATE的定义模块与其它两个模块MODULE1和MODULE2并列出现,相互独立;,【例4-2】UDP定义模块的错误位置。module MODULE1;/模
4、块MODULE1定义的开始/模块MODULE1描述体primitive MY_GATE(out,a,b);/UDP元件MY_GATE定义模块的开始/UDP元件MY_GATE定义的描述体endprimitive/UDP元件MY_GATE定义模块的结束endmodule/模块MODULE1定义的结束而在例4-2中,UDP定义模块却包含在另一个模块MODULE1结构之中,这种情况是不允许的。,(2)在UDP定义模块的第一行,关键词“primitive”标志着定义模块的开始;其后出现的“元件名”是为被定义UDP元件所取的一个名字;后面出现的端口列表指明了UDP元件的输入输出端口,该端口列表由若干个端口
5、组成,其中只能有一个输出端口并且该输出端口必须是端口说明表中的第一项,而UDP的输入端口数目可以是一个或多个,一般对时序电路的UDP最多允许有9个输入端,对组合电路的UDP最多允许有10个输入端。必须注意在定义UDP元件时所有输入端口和输出端口都只能是1位的(标量)。,(3)输出端口类型说明是对UDP元件的输出端口进行说明,这和普通模块定义中的输出端口说明一样是通过关键词“output”来进行的,比如:output out;就说明了端口out 是一个输出端口。(4)输入端口类型说明是对UDP元件的输入端口进行说明,这和普通模块定义中的输入端口说明一样是通过关键词“input”来进行的,比如:i
6、nput a,b;就说明了端口a和端口b 是两个输入端口。,(5)输出端寄存器变量说明是在对时序逻辑UDP元件进行定义时,为了对输出端口寄存器变量类型进行说明而引入的。寄存器变量用于描述时序电路UDP中的内部状态。要注意只有在被定义的元件是时序逻辑元件时才能将输出端口定义成寄存器类变量。寄存器变量说明用关键词“reg”实现,比如:reg out;就将UDP输出端口 out定义为一个寄存器变量。,(6)元件初始状态说明也是为进行时序电路UDP的定义而引入的,它的作用是对时序电路上电时刻(即0时刻)的初始状态进行定义,只允许有0、1、x三种状态。缺省为x态。元件初始状态说明用“initial”过程
7、块来实现,比如:initial out=x;就将时序逻辑UDP元件的初始状态定义为“x”。,(7)由关键词“table”和“endtable”界定的多个table表项构成了UDP元件定义模块内的一个输入输出真值表。在table表项中只允许出现0、1、x三种逻辑值,不允许出现高阻态“z”。组合电路UDP定义模块和时序电路UDP定义模块内的table表项格式是不同的。table表项构成了UDP元件输入、输出以及内部状态(时序逻辑电路情况)间的一张“逻辑真值表”。对不同逻辑功能的UDP元件进行定义时的差别将体现在不同的table表项描述上。,(8)关键词“endprimitive”出现在定义模块的末
8、尾,它标志着UDP定义模块的结束。下面给出对四选一MUX进行UDP定义描述的一个例子。,【例4-3】将四选一MUX定义成UDP元件。primitive mux4_l(out,in1,in2,in3,in4,ctrl1,ctrl2);output out;input in1,in2,in3,in4,ctrl1,ctrl2;table/in1 in2 in3 in4 ctrl1 ctrl2 out 注释行,用于保证表项中各项的正确排列顺序0?0 0:01?0 0:1?0?0 1:0?1?0 1:1?0?1 0:0?1?1 0:1?0 1 1:0?1 1 1:1endtableendprimitiv
9、e,注意:不能将控制端口定义成一个二位的输入端口,即不能采用如下定义方式:,【例4-4】错例。primitive mux4_l(out,in1,in2,in3,in4,ctrl);/错例output out;input in1,in2,in3,in4;input 21 ctrl;/错,在UDP定义中的端口只能是一位宽度的标量类型table/in1 in2 in3 in4 ctrl out 0?00:01?00:1?0?01:0?1?01:1?0?10:0?1?10:1?0 11:0?1 11:1endtableendprimitive,UDP 只能有一个输出端,而且必须是端口的说明列表的第一项
10、。UDP 可以有多个输入端,最多允许有 10 个。UDP 所有端口变量必须是标量,不允许使用双向端口。UDP 不支持 Z 逻辑值。在仿真的开始,UDP 的输出可以使用 initial 语句初始化为一个已知值。UDP 不能被综合。,UDP特征,UDP 只能有一个输出。如果设计时的输出多于一个,则需要把其它的原器件连接到 UDP 输出,或同时使用多个 UDP。UDP 输入端最多可以有 10 个,但是当输入的个数多于 5 个时,内存的需要将大大的增加。下页表列出了输入数目不同时,每个输入所需要的内存。,UDP特征,4.2 组合逻辑电路UDP对组合逻辑电路UDP元件的描述相当于直接把电路的逻辑真值表搬
11、到UDP描述的table表中。组合逻辑电路UDP定义时的table表项的格式为::,对于上述table表项格式,必须注意:(1)各个输入输出逻辑值只能是 0,1,x 和?中的一个,不能取高阻态“z”。(2)输出端口在primitive定义语句的端口表项中列第一的位置,而输出端逻辑值在table表项内则是位于最后一项。(3)在表项中要用空格分隔开不同的输入端逻辑值,各个输入端口在table表项中的排列顺序必须与它们在“primitive”定义语句中端口表项内的排列顺序保持严格一致。,(4)table表项中的输入部分与输出部分之间要用一个冒号隔开。(5)为了明确观察输入输出相互关系和各项排列顺序是
12、否正确,通常在table表项的第一栏中插人一条注释语句,比如例43中的注释行:/in1 in2 in3 in4 ctrl1 ctrl2 out,UDP元件的逻辑功能是由UDP定义模块内关键词“table”和“endtable”之间的table表的内容所决定的,table表相当于构成了UDP元件输入输出的一个真值表。在进行模拟时,当模拟器发现UDP的某个输入发生改变时,将会自动进入table表查找相匹配的table表项,再把查到的输出逻辑值赋给输出端口。如果在UDP定义模块的table表中找不到与当前输入相匹配的table表项,则输出端将取不定态“x”。所以,在进行UDP元件描述时,应当将尽可能
13、多的输入状态设置到table表项中。,以设计一个一位的全加器为例,表4.1是它的本位和与进位的逻辑真值表,由于一个UDP元件只允许有一个一位的输出,所以要分别定义两个UDP元件来实现全加器的本位和与进位。把它们的真值表分别移植到两个UDP描述的table表中,就得到了例4-5所示的全加器的UDP描述。,【例4-5】全加器的UDP描述。/进位的UDP定义primitive carry(cout,cin,a,b);output cout;input a,b,cin;table/cout 对应的table表项/cinab:cout000:0;001:0;010:0;011:1:100:0:101:1
14、;11 0:1;111:1;endtableendprimitive,/本位和的UDP定义primitive summ(sum,cin,a,b);output sum;input a,b,cin;table/sum对应的table表项/cin a b:sum0 0 0:0;0 0 1:1;0 1 0:1;0 1 1:0:1 0 0:1:1 0 1:0;1 1 0:0;1 1 1:1;endtableendprimitive,在例4-5的table表没有考虑到输入为x时的情况,因此在某个输入为x时,模拟器找不到对应的table表项,输出将为cout=x,sum=x。而实际上对于进位cout而言,
15、只要三个输入项(cin,a和b)中有二个值为1,则不管第三个的值是什么(0,1或x),cout一定为1;反之,如果输入中有二个为0,则cout也一定为0。为了表示出进位的这一特征,可以在cout对应的UDP定义table表内用?来替代第三个值对应表项,得到例4-6的定义描述。,【例4-6】考虑了输入状态“x”后的全加器进位cout的UDP描述。/进位的UDP定义primitive carry(cout,cin,a,b);output cout;input a,b,cin;table/cout 对应的table表项,较例45的情况有所精简/cin a b:cout0 0?:0;0?0:0;?0
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VHDL 用户 自定义 元件
链接地址:https://www.31ppt.com/p-6524420.html