我是靠谱客的博主 义气高山,最近开发中收集的这篇文章主要介绍数字电路篇三,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

3.2组合逻辑电路的应用

常用的组合逻辑电路有编码器、译码器、数据选择器、数值比较器和加法器等,下面介绍一下这些常用电路的工作原理和使用方法。

3.2.1、编码器

各种遥控器、密码输入都属于编码器,编码器有互斥编码器和优先编码器之分。

互斥编码器:任何时刻只允许一个输入信号有效,否则将产生错误输出。

以8-3互斥编码器为例,所谓8-3编码器就是实现三位二进制代码对八个信号进行编码的电路,对应着8个输入和3个输出。由此写出真值表如图所示,真值表转换成表达式的方法:将输出为1的几个变量相加,如图所示的真值表转换成表达式为:

根据真值表画出电路图如图所示:

verilog代码如下所示:

//---------------------------------------------------------------------------
//--	文件名		:	Digital_Encoder.v
//--	作者		:	ZIRCON
//--	描述		:	编码器模块
//--	修订历史	:	2017-1-1
//---------------------------------------------------------------------------
module Digital_Encoder
(
	/* 输入端口 */
   I,
	/* 输出端口 */
	A
);

//---------------------------------------------------------------------------
//--	外部端口声明
//---------------------------------------------------------------------------
input    [7:0]  I;	//输入端口
output   [2:0]  A;	//输出端口

//---------------------------------------------------------------------------
//--	内部端口声明
//---------------------------------------------------------------------------
reg      [2:0]  A;	//输入端口

//---------------------------------------------------------------------------
//--	逻辑功能实现	
//---------------------------------------------------------------------------
/* 组合电路,实现编码器 */
always @ (*)
begin
    case(I)
		 8'b0000_0001 : A = 3'b000;
		 8'b0000_0010 : A = 3'b001;
		 8'b0000_0100 : A = 3'b010;
		 8'b0000_1000 : A = 3'b011;
		 8'b0001_0000 : A = 3'b100;
		 8'b0010_0000 : A = 3'b101;
		 8'b0100_0000 : A = 3'b110;
		 8'b1000_0000 : A = 3'b111;
		 default:       A = 3'b000;
    endcase
end

endmodule

优先编码器:允许多个输入信号同时有效,输出是对优先级别高的输入信号进行编码。

verilog代码为:

//---------------------------------------------------------------------------
//--	文件名		:	Digital_Priority_Encoder.v
//--	作者		:	ZIRCON
//--	描述		:	优先编码器模块
//--	修订历史	:	2017-1-1
//---------------------------------------------------------------------------
module Digital_Priority_Encoder
(
	/* 输入端口 */
   I,
	/* 输出端口 */
	A
);

//---------------------------------------------------------------------------
//--	外部端口声明
//---------------------------------------------------------------------------
input  	[7:0]  	I;		//输入端口
output 	[2:0]  	A;		//输出端口

//---------------------------------------------------------------------------
//--	内部端口声明
//---------------------------------------------------------------------------
reg		[2:0]  	A;		//输出端口

//---------------------------------------------------------------------------
//--	逻辑功能实现	
//---------------------------------------------------------------------------
/* 组合电路,实现优先编码器 */
always @ (*)
begin
    if(I[7] == 1'b0)      	A = 3'b000;
    else if(I[6] == 1'b0) 	A = 3'b001;
    else if(I[5] == 1'b0) 	A = 3'b010;
    else if(I[4] == 1'b0)  A = 3'b011;
    else if(I[3] == 1'b0) 	A = 3'b100;
    else if(I[2] == 1'b0) 	A = 3'b101;
    else if(I[1] == 1'b0) 	A = 3'b110;
    else if(I[0] == 1'b0)	A = 3'b111;
    else              		A = 3'b000;
end

endmodule

 和前面的比较输入部分只要优先级高的(从I7到I0优先级从高到低),只要优先级高的为1后面的都不看了。常见的优先编码器有74LS148

 

3.2.2、译码器

译码器是编码器的逆过程,通常用于计算机中对存储单元的地址的译码。n个二进制选择线的译码器最多可译码转换成2^n个数据。

以3-8译码器为例,有3个输入,8个输出,3-8译码器的真值表如图所示:

 逻辑函数表达式为:

译码器的电路图如图所示:

verilog代码为:

//---------------------------------------------------------------------------
//--	文件名		:	Digital_Decoder.v
//--	作者		:	ZIRCON
//--	描述		:	译码器模块
//--	修订历史	:	2017-1-1
//---------------------------------------------------------------------------
module Digital_Decoder
(
	/* 输入端口 */
   A,
	/* 输出端口 */
	I
);

//---------------------------------------------------------------------------
//--	外部端口声明
//---------------------------------------------------------------------------
input   	[2:0]   A;	//输入端口
output   [7:0]   I;	//输出端口

//---------------------------------------------------------------------------
//--	内部端口声明
//---------------------------------------------------------------------------
reg		[7:0]   I;	//输出端口

//---------------------------------------------------------------------------
//--	逻辑功能实现	
//---------------------------------------------------------------------------
/* 组合电路,实现译码器 */
always @ (*)
begin
    case(A)
		 3'b000 : I = 8'b01111111;
		 3'b001 : I = 8'b10111111;
		 3'b010 : I = 8'b11011111;
		 3'b011 : I = 8'b11101111;
		 3'b100 : I = 8'b11110111;
		 3'b101 : I = 8'b11111011;
		 3'b110 : I = 8'b11111101;
		 3'b111 : I = 8'b11111110;
		 default: I = 8'b11111111;
    endcase
end

endmodule

常见的3-8译码器有74LS138:

译码器的应用有七段显示译码器,数码管就为七个发光二极管,利用不同发光段的组合显示出0-9十个十进制数,驱动七段数码管显示的译码器称为BCD七段显示译码器。数码管如图所示:

改译码器有4输入7输出,输入为待显示的BCD码,输出接到七段数码管的对应接线端,真值表如图所示:

 输入信号为0000时,输出为abcdefg = 1111110,点亮的abcdefg发光二极管刚好显示为0。

3.2.3、数据选择器

数据选择器就是从多个输入的逻辑信号中选择一个逻辑信号输出,数据选择器也被称为多路复用器,相当于多个输入的单刀多掷开关。

以8-1数据选择器为例,功能示意图如图所示:

译码器的输出控制8个开关的通断,8-1数据选择器的真值表如图所示:

逻辑表达式为:

 verilog代码为:

//---------------------------------------------------------------------------
//--	文件名		:	Digital_Selector.v
//--	作者		:	ZIRCON
//--	描述		:	选择器模块
//--	修订历史	:	2017-1-1
//---------------------------------------------------------------------------
module Digital_Selector
(
	/* 输入端口 */
	A,D0,D1,D2,D3,D4,D5,D6,D7,
	/* 输出端口 */
	Y
);

//---------------------------------------------------------------------------
//--	外部端口声明
//---------------------------------------------------------------------------
input          	D0,D1,D2,D3,D4,D5,D6,D7;	//输入端口
input   	[2:0]   	A;		//输入端口
output	[7:0]   	Y;		//输出端口

//---------------------------------------------------------------------------
//--	内部端口声明
//---------------------------------------------------------------------------
reg		[7:0]  	Y;		//输出端口

//---------------------------------------------------------------------------
//--	逻辑功能实现	
//---------------------------------------------------------------------------
/* 组合电路,实现选择器 */
always @ (*)
begin
	case(A)
		3'b000 : Y = D0;
		3'b001 : Y = D1;
		3'b010 : Y = D2;
		3'b011 : Y = D3;
		3'b100 : Y = D4;
		3'b101 : Y = D5;
		3'b110 : Y = D6;
		3'b111 : Y = D7;
		default: Y = 1'b0;
	endcase
end

endmodule

常见的8-1数据选择器有74LS151,真值表如图所示:

参考:锆石教程

最后

以上就是义气高山为你收集整理的数字电路篇三的全部内容,希望文章能够帮你解决数字电路篇三所遇到的程序开发问题。

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

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

评论列表共有 0 条评论

立即
投稿
返回
顶部