我是靠谱客的博主 激情菠萝,这篇文章主要介绍实现74HC85的功能以及16位数值比较器VerilogHDL程序设计与仿真作业6:,现在分享给大家,希望可以做个参考。

VerilogHDL程序设计与仿真作业6:

——实现74HC85的功能以及16位数值比较器

文章目录

  • VerilogHDL程序设计与仿真作业6:
        • ——实现74HC85的功能以及16位数值比较器
    • 一、实验目的
    • 二、实现74HC85的功能
      • 1、设计思路
      • 2、实现代码
      • 3、测试代码
      • 4、仿真
    • 三、用74HC85组成16位数值比较器
      • 1、设计思路
      • 2、实现代码
      • 3、测试代码
      • 4、仿真

一、实验目的

  • 实现74HC85的功能
  • 用74HC85组成16位数值比较器

二、实现74HC85的功能

1、设计思路

  • 74HC85的功能表
    在这里插入图片描述

  • 74HC85的逻辑符号

在这里插入图片描述

2、实现代码

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
//文件名称:_74HC85.v //fuchaoxinHUST12052020 module _74HC85(I_geq,I_leq,I_eq,A,B,F_geq,F_leq,F_eq); input [3:0] A,B; input I_geq,I_leq,I_eq; output reg F_geq, F_leq, F_eq; /*说明: 输入端:I是用于级联的输入信号,[3:0] A,B是输入的待比较数字; 输出端:F是大小比较后输出的信号,也可当作级联下一级的输入信号。 */ always @(*) begin // 默认比较时A在前B在后 if (A[3]>B[3]) begin F_geq=1; F_leq=0; F_eq=0; end else if (A[3]<B[3]) begin F_geq=0; F_leq=1; F_eq=0; end else begin if (A[2]>B[2]) begin F_geq=1; F_leq=0; F_eq=0; end else if (A[2]<B[2]) begin F_geq=0; F_leq=1; F_eq=0; end else begin if (A[1]>B[1]) begin F_geq=1; F_leq=0; F_eq=0; end else if (A[1]<B[1]) begin F_geq=0; F_leq=1; F_eq=0; end else begin if (A[1]>B[1]) begin F_geq=1; F_leq=0; F_eq=0; end else if (A[1]<B[1]) begin F_geq=0; F_leq=1; F_eq=0; end else begin if (I_geq==1&&I_leq==0&&I_eq==0) begin F_geq=1; F_leq=0; F_eq=0; end else if (I_geq==0&&I_leq==1&&I_eq==0) begin F_geq=0; F_leq=1; F_eq=0; end else if (I_eq==1) begin F_geq=0; F_leq=0; F_eq=1; end else if (I_geq==1&&I_leq==1&&I_eq==0) begin F_geq=0; F_leq=0; F_eq=0; end else if (I_geq==0&&I_leq==0&&I_eq==0) begin F_geq=1; F_leq=1; F_eq=0; end end end end end // 四位不全相等时I无效,四位都相等时I有效 // 该方法比较繁琐,可以写一位比较器再进行四个级联 end endmodule

3、测试代码

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
//文件名称:Test_74HC85.v //fuchaoxinHUST12052020 `timescale 10ns/1ns module Test_74HC85; reg [3:0] A,B; reg I_geq,I_leq,I_eq; wire F_geq, F_leq, F_eq; _74HC85 U0(I_geq,I_leq,I_eq,A,B,F_geq,F_leq,F_eq);//实例化元件 initial $monitor($time,":t I_geq=%b, I_leq=%b, I_eq=%b, A=%b, B=%b F_geq=%b, F_leq=%b, F_eq=%b n",I_geq,I_leq,I_eq,A,B,F_geq,F_leq,F_eq); //监视器的显示内容 initial begin // I无效 即四位不全相等 A=4'b1000; B=4'b0100; #5 A=4'b0100;B=4'b1000; #5 A=4'b0110;B=4'b0111; #5 // I有效 即四位都相等 I_geq=0; I_leq=0; I_eq=1; A=4'b0110; B=4'b0110; #5 I_geq=1; I_leq=0; I_eq=0; A=4'b0001; B=4'b0001; #5 I_geq=0; I_leq=0; I_eq=0; A=4'b0010; B=4'b0010; #5 $stop;//停止模拟仿真 end endmodule

4、仿真

  • 波形

在这里插入图片描述

  • 监控器

在这里插入图片描述

三、用74HC85组成16位数值比较器

1、设计思路

  • 将四个四位数值比较器通过级联的方式组成16位数值比较器;
  • 16位数值比较器(串联拓展方式)

在这里插入图片描述

2、实现代码

以串联拓展为例:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
//文件名称:_74HC85.v //文件名称:Compare_16.v //fuchaoxinHUST12052020 module _74HC85(I_geq,I_leq,I_eq,A,B,F_geq,F_leq,F_eq); input [3:0] A,B; input I_geq,I_leq,I_eq; output reg F_geq, F_leq, F_eq; /*说明: 输入端:I是用于级联的输入信号,[3:0] A,B是输入的待比较数字; 输出端:F是大小比较后输出的信号,也可当作级联下一级的输入信号。 */ always @(*) begin // 默认比较时A在前B在后 if (A[3]>B[3]) begin F_geq=1; F_leq=0; F_eq=0; end else if (A[3]<B[3]) begin F_geq=0; F_leq=1; F_eq=0; end else begin if (A[2]>B[2]) begin F_geq=1; F_leq=0; F_eq=0; end else if (A[2]<B[2]) begin F_geq=0; F_leq=1; F_eq=0; end else begin if (A[1]>B[1]) begin F_geq=1; F_leq=0; F_eq=0; end else if (A[1]<B[1]) begin F_geq=0; F_leq=1; F_eq=0; end else begin if (A[1]>B[1]) begin F_geq=1; F_leq=0; F_eq=0; end else if (A[1]<B[1]) begin F_geq=0; F_leq=1; F_eq=0; end else begin if (I_geq==1&&I_leq==0&&I_eq==0) begin F_geq=1; F_leq=0; F_eq=0; end else if (I_geq==0&&I_leq==1&&I_eq==0) begin F_geq=0; F_leq=1; F_eq=0; end else if (I_eq==1) begin F_geq=0; F_leq=0; F_eq=1; end else if (I_geq==1&&I_leq==1&&I_eq==0) begin F_geq=0; F_leq=0; F_eq=0; end else if (I_geq==0&&I_leq==0&&I_eq==0) begin F_geq=1; F_leq=1; F_eq=0; end end end end end // 四位不全相等时I无效,四位都相等时I有效 // 该方法比较繁琐,可以写一位比较器再进行四个级联 end endmodule //四位比较器 module Compare_16(I_geq,I_leq,I_eq,A,B,F_geqq,F_leqq,F_eqq); input I_geq,I_leq,I_eq; input [15:0] A,B; output F_geqq,F_leqq,F_eqq; /*说明: 输入端: 输出端: */ //中间变量定义 wire [3:0] A_0,B_0,A_1,B_1,A_2,B_2,A_3,B_3; wire [3:0] F_geq,F_leq,F_eq; //循环赋值 genvar i; for(i=3;i>=0;i=i-1) assign A_0[i]=A[i], B_0[i]=B[i]; for(i=7;i>=4;i=i-1) assign A_1[i-4]=A[i], B_1[i-4]=B[i]; for(i=11;i>=8;i=i-1) assign A_2[i-8]=A[i], B_2[i-8]=B[i]; for(i=15;i>=12;i=i-1) assign A_3[i-12]=A[i], B_3[i-12]=B[i]; //先后执行四位数值比较 _74HC85 U0(I_geq,I_leq,I_eq,A_0,B_0,F_geq[0],F_leq[0],F_eq[0]); _74HC85 U1(F_geq[0],F_leq[0],F_eq[0],A_1,B_1,F_geq[1],F_leq[1],F_eq[1]); _74HC85 U2(F_geq[1],F_leq[1],F_eq[1],A_2,B_2,F_geq[2],F_leq[2],F_eq[2]); _74HC85 U3(F_geq[2],F_leq[2],F_eq[2],A_3,B_3,F_geq[3],F_leq[3],F_eq[3]); //输出 assign F_geqq=F_geq[3]; assign F_leqq=F_leq[3]; assign F_eqq =F_eq [3]; endmodule

3、测试代码

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
//文件名称:Test_Compare_16.v //fuchaoxinHUST12052020 `timescale 10ns/1ns module Test_CD4532; reg I_geq,I_leq,I_eq; reg [15:0] A,B; wire F_geqq,F_leqq,F_eqq; Compare_16 U0(I_geq,I_leq,I_eq,A,B,F_geqq,F_leqq,F_eqq);//实例化元件 initial $monitor($time,":t I_geq=%b, I_leq=%b, I_eq=%b, A=%b, B=%b, F_geqq=%b, F_leqq=%b, F_eqq=%b n", I_geq,I_leq,I_eq,A,B,F_geqq,F_leqq,F_eqq); //监视器的显示内容 initial begin //使能信号为0时 I_geq=0; I_leq=0; I_eq=1; A=16'b0010_0000_0000_0000; B=16'b0010_0000_0000_0100; #5 I_geq=0; I_leq=0; I_eq=1; A=16'b1000_0000_0000_0000; B=16'b0100_0000_0000_0000; #5 I_geq=0; I_leq=0; I_eq=1; A=16'b0100_0000_0000_0000;B=16'b0100_0000_0000_0000; #5 //使能信号为1时 I_geq=0; I_leq=0; I_eq=1; A=16'b0001_0000_0000_0000; B=16'b1000_0000_0000_0000; #5 I_geq=0; I_leq=0; I_eq=1; A=16'b0000_0000_0100_0000; B=16'b0100_0000_0000_0000; #5 I_geq=0; I_leq=0; I_eq=1; A=16'b0000_0000_0000_0001; B=16'b1000_0000_0000_0000; #5 $stop;//停止模拟仿真 end endmodule

4、仿真

  • 波形

在这里插入图片描述

  • 监视器

在这里插入图片描述

最后

以上就是激情菠萝最近收集整理的关于实现74HC85的功能以及16位数值比较器VerilogHDL程序设计与仿真作业6:的全部内容,更多相关实现74HC85内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(66)

评论列表共有 0 条评论

立即
投稿
返回
顶部