精华内容
下载资源
问答
  • 数值比较器实验

    2020-12-09 14:56:37
    实验原理 数值比较器的用途是比较两个二进制数的大小 对于两个一位二进制数A和B比较,可用表7-1所列真值表来描述。 表7-1 比较器真值表 输入 输出 A (甲数) B (乙数) L (大于) E (等于) S (小于) 0 0 1 1 0 1 0 1 0...
  • verilog——74HC85四位数值比较器并扩展为16位数值比较器 74HC85的仿真 设计思路 根据数据比较的原理写出真值表,如下图 代码 设计模块

    74HC85的仿真

    设计思路

    根据数据比较的原理写出真值表,如下图
    真值表

    代码

    设计模块

    //filename:74HC85.V
    module _74HC85 (
    input [2:0]I,
    input [3:0] A,B,
    output reg [2:0] L);
    /*参数说明:
    I为扩展输入端,是来自高位的比较结果,扩展输入端与其他数值比较器的输出连接,以便组成位数更多的数值比较器。
    AB:为需要比较的两个四位二进制数值。
    L为输出结果。L2=1时,表示a大于b;L1=1时,表示a小于b,;L0=1时,表示a等于b。
    */
    always@(*) 
    begin
        if(I==3'b100)    L=3'b100;
        else if(I==3'b010)    L=3'b010; //扩展输入端的优先级最高,最先判断。
        else
        begin
    	if(A[3]>B[3])    L=3'b100;
    	else if(A[3]<B[3])    L=3'b010;   //高位优先级高,先进行判断。
    	else
    	begin
    	    if(A[2]>B[2])    L=3'b100;
    	    else if(A[2]<B[2])    L=3'b010;
    	    else
    	    begin
    		if(A[1]>B[1])    L=3'b100;
    	        else if(A[1]<B[1])    L=3'b010;
    		else
    		begin
    		    if(A[0]>B[0])    L=3'b100;
    	    	    else if(A[0]<B[0])    L=3'b010;
    		    else    L=3'b001;
    		end
    	    end
    	end
        end
    end
    endmodule
    

    测试模块

    //filename:tb_74HC85.v
    `timescale 10ns/1ns
    module tb_74HC85();
    reg [2:0]I;
    reg [3:0] A,B;
    wire [2:0] L;
    
    _74HC85 U(I,A,B,L);
    
    initial 
    	$monitor($time,"\tI=%b,A=%b,B=%b,L=%b",I,A,B,L);
    initial begin
    	I=3'b100;A=4'b0000;B=4'b1111;   //扩展输入端A大于b为真。
    	#5;
    	I=3'b001;A=4'b0000;B=4'b1111;  //扩展输入端A等于b为真。
    	#5;
    	I=3'b010;A=4'b1111;B=4'b0000;   //扩展输入端A小于b为真。
    	#5;	
    	I=3'b001;A=4'b1111;B=4'b0000;  //扩展输入端A等于b为真。
    	#5;
    	I=3'b001;A=4'b0100;B=4'b0010;//扩展输入端A等于b为真。
    	#5;
    	I=3'b001;A=4'b0001;B=4'b0001;//扩展输入端A等于b为真。
    	#5;	
    	$stop;
    end
    endmodule
    

    仿真结果

    在这里插入图片描述
    在这里插入图片描述

    扩展为16位比较器

    设计思路

    1)采用串联方式扩展数值比较器的位数。
    高四位的比较结果应作为低四位的条件,即高四位比较器的输出端应分别于低四位比较器的扩展输入端连接。原理图如下,图中数值高位低位的存储地址与我设计的不同,按照我的设计,应该将图中的0-7顺序改成7-0;
    2)采用并联方式扩展数值比较器的位数。
    当位数较多且要满足一定的速度要求时,采用并联方式。并联方式采用两级比较方法。将16位按高低位次序分成四组,每组四位,各组的比较比较是并行进行的。将每组的比较数据再经四位比较器进行比较后得出结果。原理图如下,
    在这里插入图片描述

    串行代码实现

    设计模块

    //filename:74HC85.V
    module _74HC85 (
    input [2:0]I,
    input [3:0] A,B,
    output reg [2:0] L);
    /*参数说明:
    I为扩展输入端,是来自高位的比较结果,扩展输入端与其他数值比较器的输出连接,以便组成位数更多的数值比较器。
    AB:为需要比较的两个四位二进制数值。
    L为输出结果。L2=1时,表示a大于b;L1=1时,表示a小于b,;L0=1时,表示a等于b。
    */
    always@(*) 
    begin
        if(I==3'b100)    L=3'b100;
        else if(I==3'b010)    L=3'b010; //扩展输入端的优先级最高,最先判断。
        else
        begin
    	if(A[3]>B[3])    L=3'b100;
    	else if(A[3]<B[3])    L=3'b010;   //高位优先级高,先进行判断。
    	else
    	begin
    	    if(A[2]>B[2])    L=3'b100;
    	    else if(A[2]<B[2])    L=3'b010;
    	    else
    	    begin
    		if(A[1]>B[1])    L=3'b100;
    	        else if(A[1]<B[1])    L=3'b010;
    		else
    		begin
    		    if(A[0]>B[0])    L=3'b100;
    	    	    else if(A[0]<B[0])    L=3'b010;
    		    else    L=3'b001;
    		end
    	    end
    	end
        end
    end
    endmodule
    
    module _16com(
    input [15:0] A16,B16,
    input [2:0] I,
    output [2:0] F);
    wire [2:0] F3,F2,F1;
    wire [3:0] AC3,BC3,AC2,BC2,AC1,BC1,AC0,BC0;
    /*
    参数说明:
    输入:
    AB为需要进行比较的两个16位二进制数;
    I为扩展输入端。
    输出:
    F为输出结果。F2=1时,表示a大于b;F1=1时,表示a小于b,;F0=1时,表示a等于b。
    */
    
    /*将16位以四位一组,分到四个74HC85上*/
    genvar k; // 定义循环变量。
    for(k=15;k>=12;k=k-1) 
    begin
        assign AC3[k-12]=A16[k];
        assign BC3[k-12]=B16[k];
    end
    for(k=11;k>=8;k=k-1) 
    begin
        assign AC2[k-8]=A16[k];
        assign BC2[k-8]=B16[k];
    end
    for(k=7;k>=4;k=k-1) 
    begin
        assign AC1[k-4]=A16[k];
        assign BC1[k-4]=B16[k];
    end
    for(k=3;k>=0;k=k-1) 
    begin
        assign AC0[k]=A16[k];
        assign BC0[k]=B16[k];
    end
    //高位的比较结果作为低位的条件,高四位比较器的输出端应分别与低四位比较器的扩展输入端相连。
    _74HC85 C3(I,AC3,BC3,F3);
    _74HC85 C2(F3,AC2,BC2,F2);
    _74HC85 C1(F2,AC1,BC1,F1);
    _74HC85 C0(F1,AC0,BC0,F);
    
    endmodule
    
    

    测试模块

    //filename:tb_74HC85.v
    `timescale 10ns/1ns
    module tb_16com();
    reg [2:0]I;
    reg [15:0] A16,B16;
    wire [2:0] F;
    
    _16com U(A16,B16,I,F);
    
    initial 
    	$monitor($time,"\tI=%b,A=%b,B=%b,F=%b",I,A16,B16,F);
    initial begin
    	I=3'b001;A16=16'b1111_1111_1111_1111;B16=16'b1111_1111_1111_1110; //扩展输入端中A等于b为真,A大于b的情况。
    	#5;
    	I=3'b001;A16=16'b0111_1111_1111_1111;B16=16'b1111_1111_1111_1111;//扩展输入端中A等于b为真,A小于b的情况。
    	#5;
    	I=3'b001;A16=16'b1111_1111_1111_1111;B16=16'b1111_1111_1111_1111;//扩展输入端中A等于b为真,A等于B的情况。
    	#5;
    	I=3'b100;A16=16'b0111_1111_1111_1111;B16=16'b1111_1111_1111_1111;//扩展输入端中A大于b为真的情况。
    	#5;
    	I=3'b010;A16=16'b1111_1111_1111_1111;B16=16'b0111_1111_1111_1111;//扩展输入端中A小于b为真的情况。
    	#5;
    	$stop;
    end
    endmodule
    

    串行仿真

    在这里插入图片描述
    在这里插入图片描述

    并行代码

    设计模块

    //filename:74HC85.V
    module _74HC85 (
    input [2:0]I,
    input [3:0] A,B,
    output reg [2:0] L);
    always@(*) 
    begin
        if(I==3'b100)    L=3'b100;
        else if(I==3'b010)    L=3'b010;
        else
        begin
    	if(A[3]>B[3])    L=3'b100;
    	else if(A[3]<B[3])    L=3'b010;
    	else
    	begin
    	    if(A[2]>B[2])    L=3'b100;
    	    else if(A[2]<B[2])    L=3'b010;
    	    else
    	    begin
    		if(A[1]>B[1])    L=3'b100;
    	        else if(A[1]<B[1])    L=3'b010;
    		else
    		begin
    		    if(A[0]>B[0])    L=3'b100;
    	    	    else if(A[0]<B[0])    L=3'b010;
    		    else    L=3'b001;
    		end
    	    end
    	end
        end
    end
    endmodule
    
    module _16com(
    input [15:0] A16,B16,
    input [2:0] I,
    output [2:0] F);
    wire [2:0] F3,F2,F1,F0;
    wire [3:0] AC3,BC3,AC2,BC2,AC1,BC1,AC0,BC0,AC,BC;
    /*
    参数说明:
    输入:
    AB为需要进行比较的两个16位二进制数;
    I为扩展输入端。
    输出:
    F为输出结果。F2=1时,表示a大于b;F1=1时,表示a小于b,;F0=1时,表示a等于b。
    */
    
    /*将16位以四位一组,分到四个74HC85上*/
    genvar k;
    for(k=15;k>=12;k=k-1) 
    begin
        assign AC3[k-12]=A16[k];
        assign BC3[k-12]=B16[k];
    end
    for(k=11;k>=8;k=k-1) 
    begin
        assign AC2[k-8]=A16[k];
        assign BC2[k-8]=B16[k];
    end
    for(k=7;k>=4;k=k-1) 
    begin
        assign AC1[k-4]=A16[k];
        assign BC1[k-4]=B16[k];
    end
    for(k=3;k>=0;k=k-1) 
    begin
        assign AC0[k]=A16[k];
        assign BC0[k]=B16[k];
    end
    //将16位按高低为次序分成四组,每组四位各组的比较是并行进行的。
    _74HC85 C3(3'b001,AC3,BC3,F3);
    _74HC85 C2(3'b001,AC2,BC2,F2);
    _74HC85 C1(3'b001,AC1,BC1,F1);
    _74HC85 C0(3'b001,AC0,BC0,F0);
    //将每组的比较结果在经四位比较器进行比较后得出结果。
    assign AC[3]=F3[2];
    assign AC[2]=F2[2];
    assign AC[1]=F1[2];
    assign AC[0]=F0[2];
    
    assign BC[3]=F3[1];
    assign BC[2]=F2[1];
    assign BC[1]=F1[1];
    assign BC[0]=F0[1];
    
    _74HC85 C4(I,AC,BC,F);
    endmodule
    

    测试模块

    同串行

    仿真结果

    经验证,同前。

    问题总结

    1.16位比较器编写过程中出现了参数不对照的问题,后来发现是实参的位置错了,导致与形参不匹配。下次一定要注意,形参和实参的匹配。
    2.在实际单片机,CPU的IO口等实际应用中,数学上的高位通常分配到低位地址,所以数学上的1000,对应计算机上的数组为A= {0,0,0,1},A【0】=1,表示数值最高位上的1存放在低位地址中(A[0])。因此我本次设计的16位比较器虽然能够实现功能,但是应用性 低。
    3.书上两种四片16位比较器的扩展输入端直接取3‘b001,不能进一步级联构成更多位比较器,再此做出改进。

    展开全文
  • 数值比较器

    2020-11-29 15:59:36
    目录1 一位数值比较器2相关集成芯片3 位数拓展 1 一位数值比较器 逻辑图: 2相关集成芯片 4位CMOS集成数值比较器 74HC85 3 位数拓展 ① 串联方式: ② 并联方式:

    数值比较器:对两个具有相同位数的二进制数A,B进行比较的逻辑电路。

    1. 一位数值比较器

    真值表
    在这里插入图片描述

    2. 集成四位数值比较器【74HC85】

    (1)逻辑符号:
    在这里插入图片描述

    • I I I:接受另一片7485比较器的比较结果。
    • A 3 A 2 A 1 A 0 , B 3 B 2 B 1 B 0 A_3A_2A_1A_0,B_3B_2B_1B_0 A3A2A1A0B3B2B1B0:两个相比较的二进制数。
    • F F F:输出比较结果。

    (2)功能表:
    在这里插入图片描述
    可以看出, A 3 A 2 A 1 A 0 A_3A_2A_1A_0 A3A2A1A0 B 3 B 2 B 1 B 0 B_3B_2B_1B_0 B3B2B1B0比不出大小时才会用到I的比较结果。

    (3)位数拓展:

    ① 串联方式
    在这里插入图片描述

    • 工作原理: 先对低四位进行比较,将比较结果输给高位的I端备用,再比较高四位的大小,谁大则输出相应的F高电平,如果高四位比不出大小,再用第四位的比较结果。

    ② 并联方式
    在这里插入图片描述

    • 工作原理: 分成若干个4位进行比较,每4位得到一个比较结果,大的为1,小的为0,再把比较结果组成的二进制数进行比较,即可得到答案。
    • 优点: 运算速度更快
    展开全文
  • verilog实现多位数值比较器

    万次阅读 2012-02-16 08:04:30
    module compare3 ( Y ,A ,B );    input [3:0] A ;  input [3:0] B ;    output [2:0] Y ;  reg [2:0] Y ;    always @ ( A or B )  begin   if ( A > B )   Y ... else


     
     module compare3 ( Y ,A ,B );
     
     input [3:0] A ;
     input [3:0] B ;
     
     output [2:0] Y ;
     reg [2:0] Y ;
     
     always @ ( A or B )
         begin 
             if ( A > B ) 
                 Y <= 3'b001;
             else if ( A == B)
                 Y <= 3'b010;
             else 
                 Y <= 3'b100;
           end
     endmodule

    展开全文
  • Verilog HDL 之 多位数值比较器 原理  在数值系统中,特别是在计算机中都具有运算功能,种简单的运算就是比较它们的大小。数值比较器就是对两数A、B进行比较,以判断其大小的逻辑电路。  表1.1 多位...

    Verilog HDL 之 多位数值比较器

    一、原理

      在数值系统中,特别是在计算机中都具有运算功能,一种简单的运算就是比较它们的大小。数值比较器就是对两数A、B进行比较,以判断其大小的逻辑电路。

                      表1.1 多位比较器真值表

    二、实现

    在设计文件中输入Verilog代码

    复制代码
     1   `timescale 1 ns / 1 ps
     2 
     3 module compare3 ( Y ,A ,B );
     4 
     5 input [3:0] A ;
     6 wire [3:0] A ;
     7 input [3:0] B ;
     8 wire [3:0] B ;
     9 
    10 output [2:0] Y ;
    11 reg [2:0] Y ;
    12 
    13 always @ ( A or B )
    14     begin 
    15         if ( A > B ) 
    16             Y <= 3'b001;
    17         else if ( A == B)
    18             Y <= 3'b010;
    19         else 
    20             Y <= 3'b100;
    21       end
    22 endmodule
    复制代码
    展开全文
  • Verilog HDL 之 多位数值比较器 原理  在数值系统中,特别是在计算机中都具有运算功能,种简单的运算就是比较它们的大小。数值比较器就是对两数A、B进行比较,以判断其大小的逻辑电路。  表1.1 多位...
  • 该方案利用电路三要素理论,分别推导出构成三值绝热门控串行数值比较器的三值绝热文字电路和一位三值绝热数值比较器的元件级函数表达式及相应的电路结构.PSPCIE模拟结果表明,所设计的电路逻辑功能正确,具有绝热...
  • 数字电路18(数值比较器

    千次阅读 2019-10-24 10:23:06
  • 4无符号比较器设计

    千次阅读 2021-04-14 22:04:00
    在数字电路中,经常需要对两个位数相同的二进制数进行比较,以判断它们的相对大小或者是否相等,用来实现这功能的逻辑电路就称为数值比较器,简称比较器。 二、logisim表示 原理: 4位比较器原理 4比较 a3a2a1a0...
  • Verilog代码`timescale 1ns / 1ps ////////////////////////////////////////////////////////////////////////////////// // Company: // Engineer: // // Create Date: 15:34:29 04/21/2018 ...
  • 掌握比较器,数值运算电路的原理和设计方法,学会正确使用集成数值比较和数值运算器件 掌握要点 集成比较器,加法器的使用 3 实验内容 1〉测试比较器输入二进制数据与输出信号的关系 2〉测试加法器输入二进制数据...
  • 文章目录A 比较器和奇偶校检器A.a 数值比较器A.b 奇偶检验器 A 比较器和奇偶校检器 A.a 数值比较器 数值比较器(Digital ... 多位数值比较器工作原理 在比较两个多位数的大小时,必须自高而低的逐位比 较,而且只有...
  • 编码的工作原理

    万次阅读 2019-11-12 09:03:37
    首先简述一下编码的工作原理 编码可按以下方式来分类。 1、按码盘的刻孔方式不同分类 (1)增量型:就是每转过单位的角度就发出个脉冲信号(也有发正余弦信号, 编码(图1) 然后对其进行细分,斩波出...
  • 在数字系统中,总是需要对一些数据进行比较,比较两个数值甚至多个数值的大小,然后进行排序,于是,数值比较器(Comparator)的逻辑电路便应运而生。  比较器呢,比较简单,那就让我们从底层硬件代码看看到底有...
  • 讨论了比较器子系统(Comparator Subsystem, CMPSS)的使用方法,并提供了例程。
  • 计算机组成原理---运算

    千次阅读 2019-06-16 22:13:14
    运算 数据的表示与运算 进制之间的转换 定点数据的表示码:原码、反码、补码以及之间的关联与区别,运算,溢出监测 位移预算,原码定点数加减运算、补码定点数的加减运算、定点数乘除运算、溢出概念和判别方法 ...
  • 》中谈到如何将长地址URL转换为短地址URL,其中谈到了比较理想的解决方案就是使用发号生成个唯一的整数ID,然后转换为62进制,作为短地址URL。 其中使用到了ID发号,可能很多小伙伴还不懂什么是ID发号...
  • 关于计算机组成原理
  • 编码计数原理与电机测速原理——多图解析

    千次阅读 多人点赞 2021-02-10 19:21:40
    编码,是种用来测量机械旋转或位移的传感器。它能够测量机械部件在旋转或直线运动时的位移位置或速度等信息,并将其转换成系列电信号。 编码分类 按监测原理分类 光电编码 光电编码,是种通过光电转换...
  • SVM分类器原理详解

    万次阅读 2017-03-04 20:54:38
    SVM分类器原理详解 标签: svm文本分类java 2015-08-21 11:51 2399人阅读 评论(0) 收藏 举报  分类: 数据挖掘 文本处理(16) 机器学习 分类算法(10)  目录(?)[+] ...
  • ADC模数转换工作原理及分类

    万次阅读 多人点赞 2016-06-02 13:45:41
    现在的软件、无线电、数字图像采集都需要有高速的A/D采样保证有效性和精度,一般的测控系统也希望在精度上有所突破,人类数字化的浪潮推动了A/D转换不断变革,而A/D转换是人类实现数字化的...ADC的工作原理 模数转
  • 信号选择功能为从两路信号中二选作为输出信号,信号选择功信号输出控制方式有自动高选、自动低选、通过外部开关量/电平信号控制选择一路输入信号输出四种方式,然后将选出的信号与输入信号、...
  • 计算机组成原理运算的编程实现

    千次阅读 2016-06-12 20:21:33
    1、加深对计算机中运算的基本概念、运算方法和基本原理的理解。 2、提高学生对计算机编程语言掌握的熟练程度。二、实验内容 运用种编程语言实现计算器的基本功能。 思考: 1、计算机中数据是如何表示的? 2...
  • 光电耦合器原理及应用介绍

    千次阅读 2011-11-02 11:53:04
    、 光电耦合器原理及组成 1,原理。光电耦合器,通常简称为光耦。其基本原理是以光作为媒介,来传输电信号。在一些特殊的应用场合,会要求输入/输出端实现电气隔离,这样就不能使用传统的电子器件来传输电信号,...
  • 示波的基本原理:带宽

    千次阅读 2018-02-04 19:32:26
    示波最重要的单一特性,即带宽在频率域提供范围标示。 带宽是大多数工程师选择示波时首先考虑的技术指标。带宽以Hz衡量,根据频率决定信号范围,以便能精确显示及进行测试。 带宽不足,则示波将不能显示出实际...
  • 第1种方法:限幅滤波法(又称程序判断滤波法) A方法: 根据经验判断,确定两次采样允许的最大偏差值(设为A),每次检测到新值时判断: 如果本次值与上次值之差&...第2种方法:中值滤波法 A方法...
  • 计算机组成原理:运算方法和运算

    万次阅读 多人点赞 2017-11-26 21:18:11
    本文内容:定点运算,浮点运算,定点运算和浮点运算

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 63,796
精华内容 25,518
关键字:

一位数值比较器原理