数电课程设计组合逻辑设计
- 格式:doc
- 大小:206.00 KB
- 文档页数:18
数字逻辑设计及应用课程设计一、组合逻辑设计1、题目使用74LS83构成4位二进制全加\全减器。
具体要求:1)列出真值表;2)画出逻辑图;3)用Verilog HDL进行仿真;2、设计原理a、芯片简介74LS83本身为一个4位全加器,具有A1、A2、A3、A4、B1、B2、B3、B4、C0九个输入端,其中A1、A2、A3、A4、B1、B2、B3、B4是加数和被加数的数据输入端,C0为初始进位。
S1、S2、S3、S4、C4五个输出端口,S1、S2、S3、S4为本位和,C4为进位输出。
FULL ADDERB4C0A1A2B1B2A3B3A4S3S4S2C4S17483inst74LS83逻辑图b 、设计思路由于芯片本身为4位全加器所以加法方面就只要用它自身,只要加入一个控制端来控制它进行加法还是减法和减法的实现原理即可。
在二进制中减法的运算使用其补码(two ’s complement )来进行,把原来的正数转换为负数的补码变成加法运算。
我们知道,从一个数的原码到它的相反数的补码是进行逐位取反再在末位加1,为了实现这一加1运算可以在让电路做减法时把初始进位设为1。
加入一个控制端Adder_Subtraction 来控制电路做加法还是减法,令:Adder_Subtraction=1时电路做加法,Adder_Subtraction=0时电路做减法。
则有如下关系:初始进位端C0=~Adder_Subtraction + Adder_Subtraction & C0(初始进位输入)A1~A4不作变化B1=~B1 & ~Adder_Subtraction | B1 & Adder_SubtractionB2=~B2 & ~Adder_Subtraction | B2 & Adder_SubtractionB3=~B3 & ~Adder_Subtraction | B3 & Adder_SubtractionB4=~B4 & ~Adder_Subtraction | B4 & Adder_Subtraction3、设计结果a、Verilog 程序moduleadder(A1,A2,A3,A4,B1,B2,B3,B4,C0,Adder_Subtraction,S1,S2, S3,S4,C4);input A1,A2,A3,A4,B1,B2,B3,B4,C0,Adder_Subtraction; output S1,S2,S3,S4,C4;wire WIRE_0,WIRE_1,WIRE_2,WIRE_3,WIRE_4,WIRE_23, WIRE_6,WIRE_7,WIRE_9,WIRE_11,WIRE_12,WIRE_13,WIRE_14,WIRE_15,WIRE_16,WIRE_17,WIRE_18,WIRE_19,WIRE_21;\7483 b2v_inst(.B4(WIRE_0),.C0(WIRE_1),.A1(A1),.A2(A2),.B1(WIRE_2),.B2(WIRE_3),.A3(A3),.B3(WIRE_4),.A4(A4),.S3(S3),.S4(S4),.S2(S2),.C4(C4),.S1(S1));assign WIRE_21 = ~B3;assign WIRE_15 = WIRE_23 & WIRE_6; assign WIRE_13 = WIRE_7 & WIRE_23; assign WIRE_18 = Adder_Subtraction & B3; assign WIRE_11 = WIRE_9 & WIRE_23; assign WIRE_14 = Adder_Subtraction & B2; assign WIRE_19 = Adder_Subtraction & C0; assign WIRE_12 = B1 & Adder_Subtraction; assign WIRE_2 = WIRE_11 | WIRE_12; assign WIRE_3 = WIRE_13 | WIRE_14; assign WIRE_7 = ~B2;assign WIRE_0 = WIRE_15 | WIRE_16;assign WIRE_4 = WIRE_17 | WIRE_18; assign WIRE_6 = ~B4;assign WIRE_23 = ~Adder_Subtraction; assign WIRE_9 = ~B1;assign WIRE_1 = WIRE_19 | WIRE_23; assign WIRE_17 = WIRE_21 & WIRE_23; assign WIRE_16 = Adder_Subtraction & B4; endmoduleb、逻辑电路图利用74LS83实现加法减法逻辑电路图adderinstAdder_Subtraction C0A1B1A2B2A3B3A4B4S1S2S3S4C4利用74LS83实现加法减法器的逻辑符号Adder_Subtraction 为加法减法控制端,C0为初始进位输入端,A1~A4、B1~B4为数据输入端,S1~S4为本位和输出端,C4为进位输出端。
加法时:C4S4S3S2S1=A4A3A2A1+B4B3B2B1+C0;减法时:被减数从B1~B4输入,C4S4S3S2S1=A4A3A2A1-B4B3B2B1。
c、波形仿真波形仿真所设计的加法减法器结果4、结果分析对照上图分析,0~30ns之间Adder_Subtraction=1,为做加法。
分别为变化的情况,如图中蓝线所对应数据,C0=0,A4A3A2A1=1101,B4B3B2B1=1101,C4S4S3S2S1=11010;即电路对应中1101+1101=11010,与理论响符。
可以从图中读出,其他也是与理论相符。
再看30ns后的,Adder_Subtraction=0,电路做减法。
分析40ns 时对应的数据,A4A3A2A1=1001,B4B3B2B1=1000,输出部分C4S4S3S2S1=10001,只取四位为0001,即1001-1000=0001,与理论相符,再看50ns处,A4A3A2A1=1110,B4B3B2B1=0010,输出部分C4S4S3S2S1=11100,只取四位为1100,即1110-0010=1100,与理论相符,同样其他情形从波形上看据与理论相符。
综上,此电路可以实现4位加法减法的运算。
二、时序逻辑设计1、题目1011序列发生器和检测器的设计实现设计内容:1)进行需求分析,确定总体框架;2)画出逻辑电路图;3)对设计电路进行仿真;设计要求: 1)设计一个1011序列发生器;2)设计一个1011序列检测器,改序列检测器的输入可以通过人工拨动开关来选择;2、设计原理a、芯片简介74194是一个双向移位寄存器,能够左移和右移。
如下图为,74194逻辑符号,具有SL(R)SI左(右)移串行输入端,A、B、C、D四个数据输入端,S1、S0控制端,异步低电平有效清零端CLRN和一个时钟输入端,输出部分,QA、QB、QC、QD四个状态输出端,为典型的串/并行输入,串/并行输出型移位寄存器。
其中S1、S0控制端作用为,S1、S0=00,保持状态;S1、S0=01,右移状态;S1、S0=10,左移状态;S1、S0=11,同步置数状态,即当S1、S0=11且时钟有效沿到来时QAQBQCQD=ABCD。
SHIFT REG.SLSI SRSI B C CLKCLRN D S1S0A QA QB QC QD74194inst1174194逻辑符号b 、设计原理通过分析状态图来利用移位寄存器完成1011序列发生器。
使用移位寄存器芯片74*194,将初始值设为1011,而后开始移位,并将QA 作为下一输入。
以此实现1011序列的产生,并用QA 作为序列发出端,得到串行输出的1011序列。
由于题目要求,改序列检测器可由人工手动拨动开关选择,联系到74194的置数功能,我们可以将A 、B 、C 、D 四个输入端作为选择要发生序列的输入端,即A 、B、C、D四个输入端接到逻辑开关,拨动快关来决定要发生的序列,但是再同时考虑输出这边,由于为左移,有QA*=QB,QB*=QC,QC*=QD,QD*=SLSI,如此循环,发现如果SLSI=QA则可以往复的发生序列,达到目的。
再看序列检测器这边,同样由一个74194来实现,把前一个序列发生器的序列输出端置入序列检测器的SLSI输入端,S1、CLRN 接高电平,A、B、C、D接低电平,时钟端接一起,S0作为一个检测器的使能端为:Control,当S0=0时为正常检测序列,当S0=1时重置为0。
因为此序列检测器的检测序列要能够变化,构思在检测时看他是否与输入是相同即可,所以在检测器的输出端的每一输出线上分别与相应的输入端做异或运算,若相同则为0,不同则为1,再将这四个异或后的结果用或门连接,取或门输出为输出端Result,即有若序列相同则Result=0,若有任意一位不同则Result=1。
3、设计结果a、Verilog程序moduleSequence(Reset,CLK,A,B,C,D,Control,Sequence,Result);input Reset,CLK,A,B,C,D,Control;output Sequence,Result;wire WIRE_0,WIRE_21,WIRE_3,WIRE_4,WIRE_5,WIRE_6,WIRE_7,WIRE_8,WIRE_9,WIRE_10,WIRE_22,WIRE_23, WIRE_17,WIRE_18,WIRE_19,WIRE_20;assign Sequence = WIRE_10;assign WIRE_21 = 1;assign WIRE_22 = 0;assign WIRE_23 = 1;\74194 b2v_inst(.SLSI(WIRE_0),.B(B),.C(C),.CLK(CLK),.CLRN(WIRE_21),.D(D),.S1(WIRE_21),.S0(Reset),.A(A),.QA(WIRE_10),.QB(WIRE_3),.QC(WIRE_4),.QD(WIRE_5));assign WIRE_0 = WIRE_10;assign Result = WIRE_6 | WIRE_7 | WIRE_8 | WIRE_9;\74194 b2v_inst2(.SLSI(WIRE_10),.B(WIRE_22),.C(WIRE_22),.CLK(CLK),.CLRN(WIRE_23),.D(WIRE_22),.S1(WIRE_23),.S0(Control),.A(WIRE_22),.QA(WIRE_17),.QB(WIRE_20),.QC(WIRE_19),.QD(WIRE_18));assign WIRE_6 = A ^ WIRE_17;assign WIRE_8 = WIRE_18 ^ D;assign WIRE_7 = C ^ WIRE_19;assign WIRE_9 = B ^ WIRE_20;endmoduleb、逻辑原理图利用双74194实现可以手动改变的4位任意序列发生器和序列检测器c、1011序列发生器和序列检测器波形仿真d、改序列成1101后发生器和序列检测器波形仿真e、改序列成1001后发生器和序列检测器波形仿真f、改序列成0001后发生器和序列检测器波形仿真4、结果分析首先对于初始的1011序列发生器和序列检测器的设计中,起初Reset=1,为置入A、B、C、D输入的所要发生的序列,即为1011,然后再Reset=0为发生此序列,从序列输出端Sequence端看出发生了101110111011101…序列,数据检测器Control=0为检测状态,对于每完成一个1011序列Result就相应地在下一个时钟输出一个0,即序列正确,与题目要求以及需求一致。