目录实验一四位海明校验码的逻辑设计2实验二十六进制译码计数器的设计 6 实验三脉冲分频逻辑电路的设计10 实验四八位数据串入并出逻辑设计16 实验五十六位运算器的逻辑设计20 实验六4Kx8bit存储器的设计25实验一四位海明校验码的逻辑设计实验目的:掌握海明校验的编码原理以及设计、调试方法,巩固提高组合逻辑知识,培养实际动手能力。
掌握总线的应用方法。
掌握总线信息出错时发现错我和纠正错我的原理,掌握奇偶校验的原理,掌握海明校验编码原理以及设计、调试方法。
实验要求:(1)设计信息位为4位的内存的海明校验逻辑电路,在读内存储器时,具有一位出错报错和纠正一位错误的功能。
(2)为了难其正确性,在读出信息的通路上,要串入造错用逻辑,位数自定。
(3)奇偶发生器与海明校难器对同一位用一块奇偶校验集成块实验原理:检错和校错由编码理论,任何一种编码是否具有检测和纠错能力,都与编码的最小距离有关,即任何两组合法代码间最少的二进制位数的差异,L-1=D+C(D>=C)L为编码的最小距离,D 表示检测错误的位数;C表示纠正错误的位数。
故,8421码不具备检错能力,这是因为它的最小码距为1,当8421码的码字中有一位出错,而产生的错误代码就有可能是另一个码字,这样,无法判断它是否已出错。
8421海明校验码8421海明校验码由8421码加三位校验码组成.设8421码为I1 I2 I3 I4,三位校验码为:P3 P2 P1,则8421码为下列七位代码:校验码的值由下式确定:P3I4I3I2=⊕⊕ P2I4I3I1=⊕⊕ P1I4I2I1=⊕⊕由此可得8421海明码的最小码距为3 ,故D=1,C=1,可检测并纠正一位错误。
输出时在输出端先求出校验和:S3I4I3I2P3=⊕⊕⊕ S2I4I3I1P2=⊕⊕⊕ S1I4I2I1P1=⊕⊕⊕然后判断S3S2S1,如果代码不出错,则S3S2S1=000,否则由S3S2S1构成的二进制数为1位指出出错位。
实验实现:1.利用Quartus II 工具,画出实验的TTl 电路如下图经过编译仿真之后,仿真波形图如下图:位序 7 6 5 4 3 2 18421海明码I4 I3 I2 P3 I1 P2 P1如图看见,当造错数据只与原数据有一位错(1000,0100,0010,0001)时,输出的数据和输入的数据是一样的,通过海明码将错误的一位数据进行了修正。
而当没有数位错的时候,yes输出的值变为1,表明在传输过程中,数据位并没有出错。
2.海明校验码的verilog实现Verilog代码如下module haiming( num , mistake , out );input [3:0] num;input [3:0] mistake;output [3:0] out;wire [2:0] hmnum;wire [2:0] ckhmnum;wire [3:0] misnum;wire [3:0] erbit;assign hmnum[0] = num[3]^num[1]^num[0],hmnum[1] = num[3]^num[2]^num[0],hmnum[2] = num[3]^num[2]^num[1];assign ckhmnum[0] = misnum[3]^misnum[1]^misnum[0]^hmnum[0], ckhmnum[1] = misnum[3]^misnum[2]^misnum[0]^hmnum[1],ckhmnum[2] = misnum[3]^misnum[2]^misnum[1]^hmnum[2];assign misnum[0] = num[0]^mistake[0],misnum[1] = num[1]^mistake[1],misnum[2] = num[2]^mistake[2],misnum[3] = num[3]^mistake[3];assign erbit[0] = (~ckhmnum[2])&ckhmnum[1]&ckhmnum[0], erbit[1] = ckhmnum[2]&(~ckhmnum[1])&ckhmnum[0],erbit[2] = ckhmnum[2]&ckhmnum[1]&(~ckhmnum[0]),erbit[3] = ckhmnum[2]&ckhmnum[1]&ckhmnum[0];assign out = erbit ^ misnum;endmodule这段代码,我用的assign语句,对wire类型进行赋值,因为在TTL电路之中并没有用到寄存器,而且这是一个典型的组合逻辑电路,所以并没有只用reg寄存器类型的变量。
其中的每一个赋值都和上述的TTL电路相对应。
其中num为输入的数据,mistake为造错的输入,hmnum为由输入数据所得到的的海明码,misnum为造错之后线路上的值,ckhmnum为根据海明码和数据生成的用于纠错的海明码,而erbit为根据ckhmnum所得到的哪一位错误的信息,最后根据这信息将错误的位进行改正。
下面是根据verilog编译仿真后的波形图如图,当造错数据只与原数据有一位错(1000,0100,0010,0001)时,输出的数据和输入的数据是一样的,通过海明码将错误的一位数据进行了修正。
没有错误的时候(0000),输出数据和输入数据也是一样的。
实验小结:这个实验让我熟悉了本实验所用的软件的使用方法,如何利用quartus软件,画电路图,并且编译仿真,以及利用verilog HDL编写简单的组合逻辑电路,以及利用quartus软件对编写的verilog程序进行编译,仿真,以及基本的数字电路设计调试方法,本实验让我受益匪浅。
实验二 十六进制译码计数器的设计实验目的:1.掌握设计组合逻辑电路的方法2.不同器件,不同设计方法的比较3掌握数码显示与译码器电位间的关系,掌握小规模可编程芯片的应用,掌握GAL方程的设计实验要求:用GAL 方程设计方法进行实验,并用MAX+PLUAS 进行原理图形设计并仿真验证 实验器件:计算机及相关软件,实验教学板,GAL16V8芯片,插线等 实验原理:G f V CC a b A 10 hh h e d V CC c h七段发光二极管管脚说明 共阴型 共阳型1 2 3 4 5a b c h d e f g 6 7 8 9 10 a b c d e f g a b c defg由七段管的管脚图可以列出真值表输入信号七段数码管管脚信号A B C D 数码a b c d e f g0 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 10 1 1 1 7 1 1 1 0 0 0 01 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 0 0 0 1 1 0 1 1 1 0 1 D 0 1 1 1 1 0 1 1 1 1 0 E 1 0 0 1 1 1 11 1 1 1 F 1 0 0 0 1 1 1由上述真值表可以得到表达式a = ~(~A&~B&~C&D|~A&B&~C&~D|A&~B&C&D|A&B&~C&~D|A&B&~C&D)b = ~(~A&B&~C&D|~A&B&C&~D|A&~B&C&D|A&B&~C&~D|A&B&C&~D|A&B&C&D)c = ~(~A&~B&C&~D|A&B&~C&~D|A&B&C&~D|A&B&C&D)d = ~(~A&~B&~C&D|~A&B&~C&~D|~A&B&C&D|A&~B&C&~D|A&B&C&D)e = ~(~A&~B&~C&D|~A&~B&C&D|~A&B&~C&~D|~A&B&~C&D|~A&B&C&D|A&~B&~C&D)f = ~(~A&~B&~C&D|~A&~B&C&~D|~A&~B&C&D|~A&B&C&D|A&B&~C&~D|A&B&~C&D)g = ~(~A&~B&~C&~D|~A&~B&~C&D|~A&B&C&D)由此表达式即可得到对应的数码显示实现方法:(1)GAL芯片PLD16V8BASIC DECODECYB 2013.10.20SHIYAN USTC V1.0A B C D NC NC NC NC NC GNDNC NC g0 f0 e0 d0 c0 b0 a0 VCC/a0 = /A*/B*/C*D+/A*B*/C*/D+A*/B*C*D+A*B*/C*/D+A*B*/C*D/b0 = /A*B*/C*D+/A*B*C*/D+A*/B*C*D+A*B*/C*/D+A*B*C*/D+A*B*C*D/c0 = /A*/B*C*/D+A*B*/C*/D+A*B*C*/D+A*B*C*D/d0 = /A*/B*/C*D+/A*B*/C*/D+/A*B*C*D+A*/B*C*/D+A*B*C*D/e0 = /A*/B*/C*D+/A*/B*C*D+/A*B*/C*/D+/A*B*/C*D+/A*B*C*D+A*/B*/C*D/f0 = /A*/B*/C*D+/A*/B*C*/D+/A*/B*C*D+/A*B*C*D+A*B*/C*/D+A*B*/C*D/g0 = /A*/B*/C*/D+/A*/B*/C*D+/A*B*C*DDESCRIPTIONPs:具体的效果在实验的那一天已经由助教检查通过。