《VerilogHDL常用组合电路设计.ppt》由会员分享,可在线阅读,更多相关《VerilogHDL常用组合电路设计.ppt(34页珍藏版)》请在三一办公上搜索。
1、常用组合电路设计指导,主要内容,MUX设计加法器电路译码器设计 7段显示译码器设计 编码器设计,组合逻辑电路定义,组合逻辑含义:电路任一时刻的输出状态只决定于该时刻各输入状态的组合,而与电路的原状态无关。组合电路就是由门电路组合而成,电路中没有记忆单元,没有反馈通路。,组合逻辑建模方法,建模思路:用语言表述出来:针对输入,总有确定的输出,输入一变化,输出就随之变化建模规范:1.过程(进程)之外,本来就是并行,直接建模 2.过程(进程)之内:a.所有输入变化立刻变化。b.针对输入,输出有确定值,Verilog 过程及译码电路,always 过程语句always定义的过程块是一个电路,电路从上电开
2、始就会一直执行;(从代码一开始就执行,执行完了再回到过程块的最初来执行,周而复始,不会停止,直到代码执行完毕),多路选择器(MUX),用case语句实现多路选择器,一般要求选择信号之间是关联的;Case的多路选择器一般是并行的操作。,/*mux4_1.v参考设计(1)*/module mux4_1(a,b,c,d,sel,dout);input a,b,c,d;input 1:0 sel;output dout;reg dout;always(a or b or c or d or sel)begincase(sel)2b00:dout=a;2b01:dout=b;2b10:dout=c;2b
3、11:dout=d;endcase endendmodule,/*mux4_1.v参考设计(2)*/module mux4_1(a,b,c,d,sel,dout);input a,b,c,d;input 1:0 sel;output dout;reg dout;always(a or b or c or d or sel)beginif(sel=2b00)dout=a;else if(sel=2b01)dout=b;else if(sel=2b10)dout=c;elsedout=d;endendmodule,/*mux4_1.v参考设计(3)*/module mux4_1(a,b,c,d,s
4、el,dout);input a,b,c,d;input 1:0 sel;output dout;wire dout;assign dout=(sel=2b00)?a:(sel=2b01)?b:(sel=2b10)?c:d;endmodule,半加器电路,真值表,半加器,能对两个一位二进制数相加,求得其和值及进位的逻辑电路称为半加器。半加器的特点是:只考虑两个一位二进制数的相加,而不考虑来自低位进位的运算电路,称为半加器。任务7中设计的一位加法器级为半加器。,加法器电路,根据上述的真值关系,可以得到两个布尔代数表达式如下:根据上述表达式,按照原理图的方法设计加法器,原理图如图1所示。图1 一位
5、加法器原理图,半加器电路原理图,根据上述的真值关系,可以得到两个布尔代数表达式如下:,根据上述表达式,按照原理图的方法设计加法器,原理图如图1所示。,图1 一位加法器原理图,/*adder.v参考设计(1)*/module adder(a1,a2,b,c);input a1,a2;output b;output c;wire b,c;assign b=a1a2;assign c=aendmodule,/*adder.v参考设计(2)*/module adder(a1,a2,b,c);input a1,a2;output b;output c;wire b,c;assign c,b=a1+a2;
6、endmodule,全加器,一位二进制数相加不仅要考虑本位的加数与被加数,还要考虑低位的进位信号,而输出包括本位和以及向高位的进位信号,这就是通常所说的全加器。一位全加器是构成多位加法器的基础,应用非常广泛。一位全加器有三个输入端(两个加数Ai和Bi,以及低位的进位Ci-1),输出有两个(加法和Si、加法向高位的进位Ci),全加器电路框图如图2所示,真值表如表2所示。,全加器,图2 全加器框图,表2 全加器真值表,全加器,一位全加器,/*一位全加器的数据流建模(1):*/module fa_adder(a,b,cin,sum,count)input a,b,cin;output sum,cou
7、nt;reg sum,count;reg t1,t2,t3;always(a or b or cin)begin sum=(ab)cin;t1=a end endmodule,Always块内赋值必须定义为reg,Begin和end之间语句是顺序执行,/*一位全加器的行为建模(2):*/module fa_behav1(a,b,cin,sum,count)input a,b,cin;output sum,count;reg sum,count;always(a or b or cin)begin count,sum=a+b+cin;end endmodule,直接采用“”来描述,低位放在sum
8、变量中,进位放在count中,两位全加器设计,译码器(decode),译码器是组合逻辑电路的一个重要器件,一般分为变量译码和显示译码两类。变量译码通常是一种较少输入、较多输出的器件,分为2n译码和8421BCD码译码两类。因为译码相信号之间是关联的,因此译码器一般用case语句实现;,3-8译码器,3-8译码器是一种2n译码器,其功能是把二进制编码的3位数经过译码变为8路输出,一次只有一个输出为选通有效。,表1 3-8译码器器真值表,/*dec3_8.v参考设计*/module dec3_8(ain,dout);input 2:0 ain;output 7:0 dout;reg 7:0 dou
9、t;always(ain)begincase(ain)3b000:dout=8b0000_0001;3b001:dout=8b0000_0010;3b010:dout=8b0000_0100;3b011:dout=8b0000_1000;3b100:dout=8b0001_0000;3b101:dout=8b0010_0000;3b110:dout=8b0100_0000;3b111:dout=8b1000_0000;default:dout=8b0000_0000;endcase endendmodule,七段显示译码器设计,一、目的(1)设计一个BCD码-7段线译码器;(2)学习用Veri
10、log HDL进行逻辑描述;(3)熟悉case语句的用法。,二.设计要求,七段显示译码器可直接驱动七段数码管,七段数码管结构如下图所示:考虑设计一个7段译码器,用于驱动共阴极接地的七段数码管,并规定用1表示数码管中线段的点亮状态,0表示线段的熄灭状态,LED数码管结构图,参考设计,module bin27seg(data_in,data_out);input 3:0 data_in;output 6:0 data_out;reg 6:0 data_out;always(data_in)begin,case(data_in)4b0001:data_out=7b0000110;4b0010:dat
11、a_out=7b1011011;4b0011:data_out=7b1001111;4b0100:data_out=7b1100110;4b0101:data_out=7b1101101;4b0110:data_out=7b1111101;4b0111:data_out=7b0000111;4b1000:data_out=7b1111111;4b1001:data_out=7b1101111;4b1010:data_out=7b1110111;4b1011:data_out=7b1111100;4b1100:data_out=7b0111001;4b1101:data_out=7b101111
12、0;4b1110:data_out=7b1111001;4b1111:data_out=7b1110001;default:data_out=7b0111111;endcase end endmodule,编码器(encode),考虑设计一个8位输入、3位输出的优先级编码器,如图所示,为了使用上的方便,还要考虑到如果输入是无效的,则输出为高阻态。其中D0D7表示编码器8位输出的高低电平,A2A0表示3位二进制代码,并规定用X表示输入为任意状态,用Z表示输出为高阻态。,优先级编码器框图,Verilog HDL参考设计,module encode8_3(d,a);input 7:0 d;output2:0 a;reg 2:0 a;always(a)begin if(d7=1b0)a=3b000;else if(d6=1b0)a=3b001;else if(d5=1b0)a=3b010;else if(d4=1b0)a=3b011;,else if(d3=1b0)a=3b100;else if(d2=1b0)a=3b101;else if(d1=1b0)a=3b110;else if(d0=1b0)a=3b111;else a=3bzzz;endendmodule,