我是靠谱客的博主 激情菠萝,最近开发中收集的这篇文章主要介绍实现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、实现代码

//文件名称:_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、测试代码

//文件名称: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、实现代码

以串联拓展为例:

//文件名称:_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、测试代码

//文件名称: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的功能以及16位数值比较器VerilogHDL程序设计与仿真作业6:所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部