当前位置:首页 > 数字电路实验报告
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
5
这段代码,我用的assign语句,对wire类型进行赋值,因为在TTL电路之中并没有用到寄存器,而且这是一个典型的组合逻辑电路,所以并没有只用reg寄存器类型的变量。 其中的每一个赋值都和上述的TTL电路相对应。其中num为输入的数据,mistake为造错的输入,hmnum为由输入数据所得到的的海明码,misnum为造错之后线路上的值,ckhmnum为根据海明码和数据生成的用于纠错的海明码,而erbit为根据ckhmnum所得到的哪一位错误的信息,最后根据这信息将错误的位进行改正。 下面是根据verilog编译仿真后的波形图
如图,当造错数据只与原数据有一位错(1000,0100,0010,0001)时,输出的数据和输入的数据是一样的,通过海明码将错误的一位数据进行了修正。没有错误的时候(0000),输出数据和输入数据也是一样的。 实验小结:
这个实验让我熟悉了本实验所用的软件的使用方法,如何利用quartus软件,画电路图,并且编译仿真,以及利用verilog HDL编写简单的组合逻辑电路,以及利用quartus软件对编写的verilog程序进行编译,仿真,以及基本的数字电路设计调试方法,本实验让我受益匪浅。
6
实验二 十六进制译码计数器的设计
实验目的:
1.掌握设计组合逻辑电路的方法
2.不同器件,不同设计方法的比较
3掌握数码显示与译码器电位间的关系,掌握小规模可编程芯片的应用,掌握GAL
方程的设计
实验要求:
用GAL 方程设计方法进行实验,并用MAX+PLUAS进行原理图形设计并仿真验证 实验器件:
计算机及相关软件,实验教学板,GAL16V8芯片,插线等 实验原理:
G f VCC a b a a b 1 2 3 4 5 A b a c c f b d g d e e c e f f h d g g 6 7 8 9 10 10 h h h e d VCC c h
七段发光二极管管脚说明 共阴型 共阳型
7
由七段管的管脚图可以列出真值表
输入信号 A 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 B 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 C 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 D 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 数码 a 1 0 1 1 0 1 1 1 1 1 1 0 0 0 1 b 1 1 1 1 1 0 0 1 1 1 1 0 0 1 0 七段数码管管脚信号 c 1 1 0 1 1 1 1 1 1 1 1 1 0 1 0 d 1 0 1 1 0 1 1 0 1 1 0 1 1 1 1 e 1 0 1 0 0 0 1 0 1 0 1 1 1 1 1 f 1 0 0 0 1 1 1 0 1 1 1 1 0 0 1 g 0 0 1 1 1 1 1 0 1 1 1 1 1 1 1 0 1 2 3 4 5 6 7 8 9 A B C D E
8
共分享92篇相关文档