Verilog HDL常用组合电路设计指导

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

常用组合电路设计指导温国忠主要内容MUX设计加法器电路译码器设计7段显示译码器设计编码器设计组合逻辑电路定义组合逻辑含义:电路任一时刻的输出状态只决定于该时刻各输入状态的组合,而与电路的原状态无关。组合电路就是由门电路组合而成,电路中没有记忆单元,没有反馈通路。组合逻辑建模方法建模思路:用语言表述出来:针对输入,总有确定的输出,输入一变化,输出就随之变化建模规范:1.过程(进程)之外,本来就是并行,直接建模2.过程(进程)之内:a.所有输入变化立刻变化。b.针对输入,输出有确定值Verilog过程及译码电路always过程语句always定义的过程块是一个电路,电路从上电开始就会一直执行;(从代码一开始就执行,执行完了再回到过程块的最初来执行,周而复始,不会停止,直到代码执行完毕)多路选择器(MUX)用case语句实现多路选择器,一般要求选择信号之间是关联的;Case的多路选择器一般是并行的操作。/******************************************\mux4_1.v参考设计(1)\******************************************/modulemux4_1(a,b,c,d,sel,dout);inputa,b,c,d;input[1:0]sel;outputdout;regdout;always@(aorborcordorsel)begincase(sel)2’b00:dout=a;2’b01:dout=b;2’b10:dout=c;2’b11:dout=d;endcaseendendmodule/******************************************\mux4_1.v参考设计(2)\******************************************/modulemux4_1(a,b,c,d,sel,dout);inputa,b,c,d;input[1:0]sel;outputdout;regdout;always@(aorborcordorsel)beginif(sel==2’b00)dout=a;elseif(sel==2’b01)dout=b;elseif(sel==2’b10)dout=c;elsedout=d;endendmodule/******************************************\mux4_1.v参考设计(3)\******************************************/modulemux4_1(a,b,c,d,sel,dout);inputa,b,c,d;input[1:0]sel;outputdout;wiredout;assigndout=(sel==2’b00)?a:(sel==2’b01)?b:(sel==2’b10)?c:d;endmodule半加器电路真值表加法器a1a2bca1a2bc0000011010101101半加器能对两个一位二进制数相加,求得其和值及进位的逻辑电路称为半加器。半加器的特点是:只考虑两个一位二进制数的相加,而不考虑来自低位进位的运算电路,称为半加器。任务7中设计的一位加法器级为半加器。加法器电路根据上述的真值关系,可以得到两个布尔代数表达式如下:根据上述表达式,按照原理图的方法设计加法器,原理图如图1所示。图1一位加法器原理图半加器电路原理图根据上述的真值关系,可以得到两个布尔代数表达式如下:212121aacaaaab根据上述表达式,按照原理图的方法设计加法器,原理图如图1所示。图1一位加法器原理图/******************************************\adder.v参考设计(1)\******************************************/moduleadder(a1,a2,b,c);inputa1,a2;outputb;outputc;wireb,c;assignb=a1^a2;assignc=a&b;endmodule/******************************************\adder.v参考设计(2)\******************************************/moduleadder(a1,a2,b,c);inputa1,a2;outputb;outputc;wireb,c;assign{c,b}=a1+a2;endmodule全加器一位二进制数相加不仅要考虑本位的加数与被加数,还要考虑低位的进位信号,而输出包括本位和以及向高位的进位信号,这就是通常所说的全加器。一位全加器是构成多位加法器的基础,应用非常广泛。一位全加器有三个输入端(两个加数Ai和Bi,以及低位的进位Ci-1),输出有两个(加法和Si、加法向高位的进位Ci),全加器电路框图如图2所示,真值表如表2所示。全加器全加器ABCi-1SCi图2全加器框图表2全加器真值表全加器1111iiiiiiiiiiiiCBACBACBACBAS)()(11iiiiiiCBACBA1iiiCBA1111iiiiiiiiiiiiCBACBACBACBACiiiiiiiBACACB11一位全加器/*****************************************\一位全加器的数据流建模(1):\*****************************************/modulefa_adder(a,b,cin,sum,count)inputa,b,cin;outputsum,count;regsum,count;regt1,t2,t3;always@(aorborcin)beginsum=(a^b)^cin;t1=a&cin;t2=b&cin;t3=a&b;count=(t1|t2)|t3;endendmoduleAlways块内赋值必须定义为regBegin和end之间语句是顺序执行/*****************************************\一位全加器的行为建模(2):\****************************************/modulefa_behav1(a,b,cin,sum,count)inputa,b,cin;outputsum,count;regsum,count;always@(aorborcin)begin{count,sum}=a+b+cin;endendmodule直接采用“+”来描述,低位放在sum变量中,进位放在count中两位全加器设计译码器(decode)译码器是组合逻辑电路的一个重要器件,一般分为变量译码和显示译码两类。变量译码通常是一种较少输入、较多输出的器件,分为2n译码和8421BCD码译码两类。因为译码相信号之间是关联的,因此译码器一般用case语句实现;3-8译码器3-8译码器是一种2n译码器,其功能是把二进制编码的3位数经过译码变为8路输出,一次只有一个输出为选通有效。表13-8译码器器真值表输入输出A1A2A3S1S2S3S4S5S6S7S70001000000000101000000010001000000110001000010000001000101000001001100000001011100000001/******************************************\dec3_8.v参考设计\******************************************/moduledec3_8(ain,dout);input[2:0]ain;output[7:0]dout;reg[7:0]dout;always@(ain)begincase(ain)3’b000:dout=8’b0000_0001;3’b001:dout=8’b0000_0010;3’b010:dout=8’b0000_0100;3’b011:dout=8’b0000_1000;3’b100:dout=8’b0001_0000;3’b101:dout=8’b0010_0000;3’b110:dout=8’b0100_0000;3’b111:dout=8’b1000_0000;default:dout=8’b0000_0000;endcaseendendmodule七段显示译码器设计一、目的(1)设计一个BCD码-7段线译码器;(2)学习用VerilogHDL进行逻辑描述;(3)熟悉case语句的用法。二.设计要求七段显示译码器可直接驱动七段数码管,七段数码管结构如下图所示:考虑设计一个7段译码器,用于驱动共阴极接地的七段数码管,并规定用1表示数码管中线段的点亮状态,0表示线段的熄灭状态LED数码管结构图参考设计modulebin27seg(data_in,data_out);input[3:0]data_in;output[6:0]data_out;reg[6:0]data_out;always@(data_in)begincase(data_in)4'b0001:data_out=7'b0000110;4'b0010:data_out=7'b1011011;4'b0011:data_out=7'b1001111;4'b0100:data_out=7'b1100110;4'b0101:data_out=7'b1101101;4'b0110:data_out=7'b1111101;4'b0111:data_out=7'b0000111;4'b1000:data_out=7'b1111111;4'b1001:data_out=7'b1101111;4'b1010:data_out=7'b1110111;4'b1011:data_out=7'b1111100;4'b1100:data_out=7'b0111001;4'b1101:data_out=7'b1011110;4'b1110:data_out=7'b1111001;4'b1111:data_out=7'b1110001;default:data_out=7'b0111111;endcaseendendmodule编码器(encode)考虑设计一个8位输入、3位输出的优先级编码器,如图所示,为了使用上的方便,还要考虑到如果输入是无效的,则输出为高阻态。其中D0~D7表示编码器8位输出的高低电平,A2~A0表示3位二进制代码,并规定用X表示输入为任意状态,用Z表示输出为高阻态。优先级编码器框图D1D2D3A2A1A0D7D6D5D4D08-3线编码器VerilogHDL参考设计moduleencode8_3(d,a);input[7:0]d;output[2:0]a;reg[2:0]a;always@(a)beginif(d[7]==1’b0)a=3’b000;elseif(d[6]==1’b0)a=3’b001;elseif(d[5]==1’b0)a=3’b010;elseif(d[4]==1’b0)a=3’b011;elseif(d[3]==1’b0)a=3’b100;elseif(d[2]==1’b0)a=3’b101;elseif(d[1]==1’b0)a=3’b110;elseif(d[0]==1’b0)a=3’b111;elsea=3’bzzz;endendmodule

1 / 34
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功