PB10011数字逻辑实验报告.docx
《PB10011数字逻辑实验报告.docx》由会员分享,可在线阅读,更多相关《PB10011数字逻辑实验报告.docx(35页珍藏版)》请在冰点文库上搜索。
![PB10011数字逻辑实验报告.docx](https://file1.bingdoc.com/fileroot1/2023-4/28/2216fa32-d68a-4c15-9ca6-a125a8a82eb4/2216fa32-d68a-4c15-9ca6-a125a8a82eb41.gif)
PB10011数字逻辑实验报告
数字电路实验
实验报告
USTC10级11系
目录
●预习实验十进制代码——8421码转换电路2
●实验一海明码校验逻辑实验4
●实验二十六进制译码计数器设计9
●实验三时序脉冲分频分配延迟与整形电路13
●实验四八位数据串入—并出逻辑设计实验17
●实验五8位程序计数器21
●实验六16位运算器实验23
●实验七2K×8存储器27
预习实验十进制代码——8421码转换电路
实验目的:
1.熟悉和了解实验环境;
2.了解芯片的工作特点和使用方法;
3.了解实验的电路调试方法。
实验要求:
学生自己根据逻辑图填写逻辑表达式
独立完成电路调试
验证输入与输出的关系
根据上图写下表达式:
B8=D9+D8
B4=D4+D5+D6+D7
B2=D2+D3+D6+D7
B1=D1+D3+D5+D7+D9
实验设计:
实际实验时是用实验台上的芯片实现的,现用maxplus设计仿真并采用verilog仿真。
8421码转换电路
Verilog语言描述:
moduletrans8421(D,B);
input[9:
1]D;
output[4:
1]B;
B[4]=D[9]+D[8];
B[3]=D[4]+D[5]+D[6]+D[7];
B[2]=D[2]+D[3]+D[6]+D[7];
B[1]=D[1]+D[3]+D[5]+D[7]+D[9];
endmodule
实验小结:
作为数字逻辑实验的开始,这个实验主要目的在于使得大家熟悉实验操作流程,建立基本的数字逻辑实验思维。
因为是第一次的预备试验,所以对软件的上手和实验思维的培养,为以后的实验打下了基础,指明了实验的流程和方法。
也让我对数字电路实验产生了浓厚的兴趣。
实验一海明码校验逻辑实验
实验目的:
(1)掌握总线信息出错时发现错误和纠正错误的原理
(2)掌握奇偶校验的原理
(3)掌握海明校验的编码原理以及设计和调试方法
实验器材:
Max-Plus-II软件
实验原理:
1.一种代码具有检错和校错能力的必要条件:
L-1=C+D;
解释:
L为码组中的最小码距,C为可校错的位数,D为可检错的位数,且D≥C。
(定义:
码字——表示一个数(或字符)的若干位二进制代码;
码元——码字中的每位二进制数;
码组——满足一定规则的码字的集合;
最小码距——一个码组中任何两个码字之间不同码元的最小个数)
L
1
2
3
4
5
D
0
1
2
1
3
2
4
3
2
C
0
0
0
1
0
1
0
1
2
2.8421海明校验码
8421海明校验码是由8421码加三位校验位组成。
设8421码为I4I3I2I1,三位校验码为P3P2P1,则8421海明码为下列七位代码:
位序
7
6
5
4
3
2
1
8421海明码
I4
I3
I2
P3
I1
P2
P1
其中:
P3=I4⊕I3⊕I2,P2=I4⊕I3⊕I1,P1=I4⊕I2⊕I1
完整的8421海明码为
N
7
6
5
4
3
2
1
0
0
0
0
0
0
0
0
1
0
0
0
0
1
1
1
2
0
0
1
1
0
0
1
3
0
0
1
1
1
1
0
4
0
1
0
1
0
1
0
5
0
1
0
1
1
0
1
6
0
1
1
0
0
1
1
7
0
1
1
0
1
0
0
8
1
0
0
1
0
1
1
9
1
0
0
1
1
0
0
校验过程:
接收到海明码后计算校验和:
S3=I4⊕I3⊕I2⊕P3,S2=I4⊕I3⊕I1⊕P2,S1=I4⊕I2⊕I1⊕P1
若S3S2S1=000,说明收到的代码是正确的,否则由S3S2S1指出出错位。
实验要求:
(1)设计信息位为4位的内存的海明校验逻辑电路,在读内存储器时,具有一位出错报错和纠正一位错误的功能。
(2)为了难其正确性,在读出信息的通路上,要串入造错用逻辑,位数自定。
实验设计:
1.使用maxplus设计仿真
海明码设计电路图
2.使用verilog描述仿真
源代码如下:
modulehaming(l,w,o,s);
input[4:
1]l,w;
output[4:
1]o;
output[3:
1]s;
reg[7:
0]y;
wire[4:
1]lw;
wire[3:
1]p;
//makeerrors
assignlw[1]=l[1]^w[1];
assignlw[2]=l[2]^w[2];
assignlw[3]=l[3]^w[3];
assignlw[4]=l[4]^w[4];
assignp[1]=l[1]^l[2]^l[4];
assignp[2]=l[1]^l[3]^l[4];
assignp[3]=l[2]^l[3]^l[4];
assigns[1]=p[1]^lw[1]^lw[2]^lw[4];
assigns[2]=p[2]^lw[1]^lw[3]^lw[4];
assigns[3]=p[3]^lw[2]^lw[3]^lw[4];
//3-8decorder
always@(s)
begin
case(s)
3'd0:
y=8'b00000001;
3'd1:
y=8'b00000010;
3'd2:
y=8'b00000100;
3'd3:
y=8'b00001000;
3'd4:
y=8'b00010000;
3'd5:
y=8'b00100000;
3'd6:
y=8'b01000000;
3'd7:
y=8'b10000000;
endcase
end
assigno[1]=y[3]^lw[1];
assigno[2]=y[5]^lw[2];
assigno[3]=y[6]^lw[3];
assigno[4]=y[7]^lw[4];
endmodule
仿真波形如下:
l[3:
0]是输入数据,
w[3:
0]是造错码,
oi[3:
0]是纠错后输出,
s[2:
0]是错误的位置
调试验证:
在muxplus2中进行画图仿真和verilog语言仿真的调试。
实验小结:
在实际实验中,这是第一次使用maxplus软件进行设计仿真的实验,作为仿真设计软件的入门实验,在实验中我们慢慢学会了如何调用器件、如何进行布线、编译、仿真。
这为熟悉软件的使用打下了基础。
实验二十六进制译码计数器设计(GAL型)
实验目的:
(1)掌握组合逻辑电路设计的方法
(2)对比用不同的器件,不同设计方法之间的比较
(3)掌握数码关与译码器的电位关系
实验器材:
计算机及相关软件,实验教学板,GAL16V8芯片,插线等。
实验原理:
一、数码管是一种子常用器件,当你显示十进制数时,是有很多电路供你选用,一般根据所使用的数码管是共阳极还是共阴极来选择对应芯片的.七段发光二极管(LED)数码显示器的字形与七段荧光数码管一样,外观为平面型.它的a,b,c,d,e,f,g段是用发光二极管显示的,并且分为共阳极和共阴极两种.共阳极是七个发光二极管的阳极接在一起,接到高电平(正电源)上,阴极接到译码器的输出端,哪个发光二极管的阴极为低电平,哪个发光二极管就亮,而阴极为高电平的发光二极管就不亮.共阴极是七个发光二极管的阴极接到一起,,接到低电平处,哪个发光二极管的阳极接高电平,哪个发光二极管就亮,否则就不亮.这种数码特点是电源电压为5V,与TTL电源一致共阳弄数码管内部结构。
二、LED数码管的内部显示如图所示:
三、GAL芯片
74LS47芯片可以实现数字显示的功能,且操作方便,只需要按照芯片说明文档接线即可,但由于74LS47芯片自身设计的现实方式不好,驱动显示的数字中A~E显示地不够直观,而GAL芯片编程十分自由,故重新自己定义数码管的显示。
实验设计:
1.设计16位数码显示。
设I3,I2,I1,I0分别表示输入的四位(从高位到低位),不同的组合代表不同的数字,要在LED上显示出来。
I3
I2
I1
I0
显示
a
b
c
d
e
f
g
0
0
0
0
0
1
1
1
1
1
1
0
0
0
0
1
1
0
1
1
0
0
0
0
0
0
1
0
2
1
1
0
1
1
0
1
0
0
1
1
3
1
1
1
1
0
0
1
0
1
0
0
4
0
1
1
0
0
1
1
0
1
0
1
5
1
0
1
1
0
1
1
0
1
1
0
6
1
0
1
1
1
1
1
0
1
1
1
7
1
1
1
0
0
0
0
1
0
0
0
8
1
1
1
1
1
1
1
1
0
0
1
9
1
1
1
1
0
1
1
1
0
1
0
A
1
1
1
0
1
1
1
1
0
1
1
B
0
0
1
1
1
1
1
1
1
0
0
C
1
0
0
1
1
1
0
1
1
0
1
D
0
1
1
1
1
0
1
1
1
1
0
E
1
0
0
1
1
1
1
1
1
1
1
F
1
0
0
0
1
1
1
(*开始设计时,认为高电平为灯管亮)
画出a,b,c,d,e,f,g各个的卡诺图,得出它与I3,I2,I1,I0的逻辑关系:
2、16进制计数器GAL代码
PLD16V8
counter16CHIP
lsp2011.11.2
LAB406V1.0
CLKNCNCNCNCNCNCNCNCGND
NCQ4Q3Q2Q1NCNCNCNCVCC
Q1:
=Q1*/Q3+Q1*/Q2+Q1*/Q4+/Q1*Q2*Q3*Q4
Q2:
=Q2*/Q3+Q2*/Q4+/Q2*Q3*Q4
Q3:
=/Q3*Q4+Q3*/Q4
Q4:
=/Q4
DESCRIPTION
3、7段码显示驱动GAL代码
PLD16V8
DECODER16CHIPS
lsp2011.11.2
LAB406V1.0
Q1Q2Q3Q4NCNCNCNCNCGND
NCABCDEFGNCVCC
G=/Q1*/Q2*/Q3+/Q1*Q2*Q3*Q4+Q1*Q2*/Q3*/Q4
F=/Q1*/Q2*Q4+/Q1*/Q2*Q3+/Q1*Q3*Q4+Q1*Q2*/Q3*Q4
E=/Q1*Q4+/Q2*/Q3*Q4+/Q1*Q2*/Q3
D=Q2*Q3*Q4+/Q1*/Q2*/Q3*Q4+/Q1*Q2*/Q3*/Q4+Q1*/Q2*Q3*/Q4
C=Q1*Q2*/Q4+Q1*Q2*Q3+/Q1*/Q2*Q3*/Q4
B=/Q1*Q2*/Q3*Q4+Q2*Q3*/Q4+Q1*/Q2*Q3*Q4+Q1*Q2*/Q3*/Q4+Q1*Q2*Q3*Q4
A=/Q1*/Q2*/Q3*Q4+/Q1*Q2*/Q3*/Q4+Q1*/Q2*Q3*Q4+Q1*Q2*/Q3*Q4
DESCRIPTION
4、用verilog描述,代码如下:
modulevdisp(clk,Q,a,b,c,d,e,f,g);
inputclk;
output[4:
1]Q;
outputa,b,c,d,e,f,g;
reg[4:
1]Q;
always@(posedgeclk)
begin
if(Q==4'b1111)Q<=0;
elseQ<=Q+1;
end
assigna=~Q[4]*~Q[3]*~Q[2]*Q[1]|~Q[4]*Q[3]*~Q[2]*~Q[1]|Q[4]*~Q[3]*Q[2]*Q[1]|Q[4]*Q[3]*~Q[2]*Q[1];
assignb=~Q[4]*Q[3]*~Q[2]*Q[1]|Q[3]*Q[2]*~Q[1]|Q[4]*~Q[3]*Q[2]*Q[1]|Q[4]*Q[3]*~Q[2]*~Q[1]|Q[4]*Q[3]*Q[2]*Q[1];
assignc=Q[4]*Q[3]*~Q[1]|Q[4]*Q[3]*Q[2]|~Q[4]*~Q[3]*Q[2]*~Q[1];
assignd=Q[3]*Q[2]*Q[1]|~Q[4]*~Q[3]*~Q[2]*Q[1]|~Q[4]*Q[3]*~Q[2]*~Q[1]|Q[4]*~Q[3]*Q[2]*~Q[1];
assigne=~Q[4]*Q[1]|~Q[3]*~Q[2]*Q[1]|~Q[4]*Q[3]*~Q[2];
assignf=~Q[4]*~Q[3]*Q[1]|~Q[4]*~Q[3]*Q[2]|~Q[4]*Q[2]*Q[1]|Q[4]*Q[3]*~Q[2]*Q[1];
assigng=~Q[4]*~Q[3]*~Q[2]|~Q[4]*Q[3]*Q[2]*Q[1]|Q[4]*Q[3]*~Q[2]*~Q[1];
endmodule
仿真波形为
在上述波形中,clk不断输入脉冲,Q是其十六进制计数后的输出。
abcdefg是7段位输出,表示数码显示部分。
实验小结:
(1)通过本次实验,我了解到了一些组合逻辑电路设计的方法.并且意识到TTL芯片与GAL芯片的一些差异.当电路较为复杂时,用GAL芯片比用TTL芯片好,它会使工程会变得简单许多。
(2)通过本次实验,我了解到原来程序可以烧进芯片中,对计算机硬件方面多了一些兴趣,意识到作为一个计算机系的学生,不仅仅是要知道编程等方面的软件知识,也应该了解计算机的硬件.
实验三时序脉冲分频分配延迟与整形电路
实验目的:
掌握同步时序电路和分频,延迟整形的原理和设计方法,进一步提高实践能力。
实验器材:
MaxPlusII软件
实验要求:
在仿真软件上设计电路进行仿真,要求得到如下图所示的波形
图3.1分频实验波形图
其中CP为时钟输入源,Q3为CP的五分频波形,Q4是在Q3基础上的二分频波形,Q4b是Q4的相反波形,Q5是Q3的四分频(Q4的二分频)。
其余类似。
实验要求:
(1)脉冲源为10兆,要求得到主脉冲1兆,即周期T=1us脉宽500ns(占空比1:
1)
(2)在主脉冲CP下产生单拍脉冲CPO
(3)在主脉冲CP下产生三个周期T1-T2,每个周期包括2个主脉冲的分频分配器,输出系统波为CP1-CP2
(4)有CP1得到延迟200ns,波宽为200ns的脉冲CP1
(5)由CP2得波宽为700ns的脉冲CP2.
实验设计:
·五分频设计
现态
次态
Q3n
Q2n
Q1n
Q3n+1
Q2n+1
Q1n+1
0
0
0
0
0
1
0
0
1
0
1
0
0
1
0
0
1
1
0
1
1
1
0
0
1
0
0
0
0
0
计算得
·四分频设计
采用系统提供的74LS74,不再自己设计。
·三周期设计
现态
次态
T3n
T2n
T1n
T3n+1
T2n+1
T1n+1
0
0
1
0
1
0
0
1
0
1
0
0
1
0
0
0
0
1
计算得
·脉冲组合
(*CP和L为逻辑设计图中给定的标记)
3.实际电路图
·五分频
·四分频
·三周期
·综合实验图
分频整形电路设计图
分频电路仿真波形
使用verilog描述仿真
源代码如下:
modulemyfifth_clk(clk_in,clk_out);
inputclk_in;
outputclk_out;
regclk_q1;
regclk_q2;
regclk_out;
always@(posedgeclk_in)
begin
clk_out<=clk_q1&clk_q2;
clk_q2<=clk_q1^clk_q2;
clk_q1<=~clk_q1&~clk_out;
end
endmodule
modulemyhalf_clk(clk_in,clk_out);
inputclk_in;
outputclk_out;
regclk_out;
always@(posedgeclk_in)
clk_out=~clk_out;
endmodule
modulemythree_t(clk_in,clk_out1,clk_out2,clk_out3);
inputclk_in;
outputclk_out1,clk_out2,clk_out3;
regclk_out1,clk_out2,clk_out3;
always@(posedgeclk_in)
begin
clk_out1<=~clk_out1&~clk_out2;
clk_out2<=clk_out1;
clk_out3<=clk_out2;
end
endmodule
moduledivide(clk,Q3,Q4,Q4n,Q5,Q6,Q7,Q8,CP1,CP2,CP3,CP4,CP5,CP6);
inputclk;
outputQ3,Q4,Q4n,Q5,Q6,Q7,Q8,CP1,CP2,CP3,CP4,CP5,CP6;
wireQ4n;
wireQ5n;
assignQ4n=~Q4;
assignQ5n=~Q5;
assignCP1=Q4n&Q5&Q6;
assignCP2=Q4n&Q5n&Q6;
assignCP3=Q4n&Q5&Q7;
assignCP4=Q4n&Q5n&Q7;
assignCP5=Q4n&Q5&Q8;
assignCP6=Q4n&Q5n&Q8;
myfifth_clkfifth_clk(clk,Q3);
myhalf_clkhalf_clk1(Q3,Q4);
myhalf_clkhalf_clk2(Q4,Q5);
mythree_tthree_t(Q5,Q6,Q7,Q8);
endmodule
仿真波形如下:
调试验证:
实验中每完成一个模块就可以仿真一下看得到的波形是否符合要求,如五分频、二分频等可以单独调试验证,以保证后续设计的正确。
实验小结:
本实验涉及模块化设计的理念,尤其在verilog描述语言中存在各模块的调用,通过这次实验,对触发器和计数器的工作原理和应用有了更好的掌握,对时钟概念的理解也更深了。
实验四八位数据串入—并出逻辑设计实验
实验目的:
掌握数据的串行输入与并行输出,从而进一步掌握时序电路及其在计算机中的应用,以培养和提高实践技能。
实验器材:
Max+PlusII软件
实验原理:
实验中可用74164串行接收信号,用74273并行输出;这是总体的设计思路。
接着使用使能控制信号(模拟控制器功能)控制全局信号的接受与输出,可分为,判断信号是否为启动或终止信号,何时进行判断,前者用简单的组合逻辑即可实现,后者使用计数器来实现(TTL芯片74161),最重要的是考虑如何实现由启动与终止信号来控制74273芯片的输出,具体实现参看原理图。
实验基本要求:
10000001作起始位
01111110作停止位
实验设计:
2.实际电路图
·数据判断部分
串入-并出仿真波形
在波形中,当检测到起始位10000001后,则将后面8位输入的数据并行输出,当检测到停止位01111110后停止并行输出。
使用verilog描述仿真
源代码如下:
moduleshift_register_8(clk1,A1,Q1);
inputclk1,A1;
output[7:
0]Q1;
reg[7:
0]Q1;
always@(posedgeclk1)
begin
Q1[7]=Q1[6];
Q1[6]=Q1[5];
Q1[5]=Q1[4];
Q1[4]=Q1[3];
Q1[3]=Q1[2];
Q1[2]=Q1[1];
Q1[1]=Q1[0];
Q1[0]=A1;
end
endmodule
modulecrbc(clk,A,Q);
inputclk,A;
output[7:
0]Q;
reg[2:
0]num;
reg[7:
0]q_check,Q;
regopen;
shift_register_8f1(clk,A,q_check);
always@(posedgeclk)
begin
if(q_check==8'b10000001)
open=1;
else
if(q_check==8'b01111110)
open=0;
end
always@(posedgeclk)
if(open)
begin
if(num==3'b111)
begin
Q=q_check;
num=3'b000;
end
else
num=num+1;
end
else
Q=0;
endmodule
仿真波形如下:
与上述仿真波形类似,clk控制计数,当A是串行输入,Q[7..0]是8位数据的并行输出。
调试验证:
调试分设计的不同阶段进行了几次,先是做出了8位串进并出,然后增加了起始位和停止位的的校验部分。
实验小结:
这次实验不同于前几次的实验.前几次实验都有教材的指导及提示.这次只是提出实验要求,根据实验要求去完成实验.通过本次实验,我熟悉了一个设计性实验的具体设计思想过程及方法.这次实验是在自己与同学们的讨论中完成的,主要是8位数据输入的控制和对输入的数据进行计数。
通过本次实验,我再一次熟悉了模块化思想并最终将各模块合理的衔接到一起的思想方法.更重要的是,通过本次实验,我懂得了人与人之间的交流和互助的重要性.在同学的帮助和提示下,我完成了本次实验.这增添了自己的信心.也培养了一