verilog仿真——3线-8线译码器74X138

任务

  1. 实现74X138的程序设计
  2. 用74X139和74X138构成5线-32线译码器

74LS139 为两个2线-4 线译码器

74X138

思路

参考译码器芯片的功能,进行输入端口到输出端口的对应,并实现相关输入控制端口的特性。

程序设计

//filename:74X138.v
module decoder74X138(
	input E1_n,E2_n,E3,
	input [2:0] A,
	output reg [7:0] Y_n
);
/*电路功能描述
 1.(*)表示 always 块中所有输入信号都是敏感信号
 2.Y 必须定义成 reg 型
*/
/*端口功能描述
E1_n,E2_n,E3:使能端,其中E1_n,E2_n低电平有效,E3高电平有效
A:输入编码端口
Y_n:3-8译码器输出数据,低电平有效
*/
always @(*) begin
	if(!E1_n&&!E2_n&&E3)begin
		case(A)
			3'b111:Y_n=8'b0111_1111;
			3'b110:Y_n=8'b1011_1111;
			3'b101:Y_n=8'b1101_1111;
			3'b100:Y_n=8'b1110_1111;
			3'b011:Y_n=8'b1111_0111;
			3'b010:Y_n=8'b1111_1011;
			3'b001:Y_n=8'b1111_1101;
			3'b000:Y_n=8'b1111_1110;
		endcase
	end
	else begin
		Y_n=8'b1111_1111;
	end
end
endmodule

仿真

//filename:tb_74X138.v
`timescale 1ns/1ns
module tb_74X138;
reg E1_n,E2_n,E3;
reg [2:0] A;
wire [7:0] Y_n;
//实例化74X138
decoder74X138 decoder74X138_inst(
.E1_n(E1_n),
.E2_n(E2_n),
.E3(E3),
.A(A),
.Y_n(Y_n)
);
initial begin
	E1_n=1;E2_n=0;E3=1;A=3'b000;
	#1
	E1_n=0;E2_n=1;E3=1;A=3'b000;
	#1
	E1_n=0;E2_n=0;E3=0;A=3'b000;
	#1
	E1_n=0;E2_n=0;E3=1;A=3'b000;
	#1
	E1_n=0;E2_n=0;E3=1;A=3'b001;
	#1
	E1_n=0;E2_n=0;E3=1;A=3'b010;
	#1
	E1_n=0;E2_n=0;E3=1;A=3'b011;
	#1
	E1_n=0;E2_n=0;E3=1;A=3'b100;
	#1
	E1_n=0;E2_n=0;E3=1;A=3'b101;
	#1
	E1_n=0;E2_n=0;E3=1;A=3'b110;
	#1
	E1_n=0;E2_n=0;E3=1;A=3'b111;
	#1
	;
end
endmodule

74LS139

思路

根据功能表进行设计

74LS139功能表

程序设计

//filename:74LS139.v
module decoder74LS139(
	input GS,
	input [1:0] A,
	output reg [3:0] Y_n
);
/*电路功能描述
2-4译码器
 1.(*)表示 always 块中所有输入信号都是敏感信号
 2.Y 必须定义成 reg 型
*/
/*端口功能描述
G:使能端,高电平有效
A:输入编码端口
Y_n:输出数据,低电平有效
*/
always @(*) begin
	if(GS)begin
		case(A)
			2'b11:Y_n=4'b0111;
			2'b10:Y_n=4'b1011;
			2'b01:Y_n=4'b1101;
			2'b00:Y_n=4'b1110;
		endcase
	end
	else begin
		Y_n=4'b1111;
	end
end
endmodule

仿真

//filename:tb_74LS139.v
`timescale 1ns/1ns
module tb_74LS139;
reg GS;
reg [1:0] A;
wire [3:0] Y_n;
//实例化74LS139
decoder74LS139 decoder74LS139_inst(
.GS(GS),
.A(A),
.Y_n(Y_n)
);
initial begin
	GS=0;A=2'b00;
	#1
	GS=1;A=2'b00;
	#1
	GS=1;A=2'b01;
	#1
	GS=1;A=2'b10;
	#1
	GS=1;A=2'b11;
	#1
	;
end
endmodule

5线-32线译码器

思路

4个74X138做为输出,分别为X3,X2,X1,X0

而1片74LS139做为最高2位的选择,分别对应4片74X138

程序设计

//filename:decoder5to32.v
module decoder5to32(
	input G,
	input [4:0] A,
	output reg [31:0] Y_n
);
/*电路功能描述
5-32译码器
 1.(*)表示 always 块中所有输入信号都是敏感信号
 2.Y 必须定义成 reg 型
*/
/*端口功能描述
G:使能端,高电平有效
A:输入编码端口
Y_n:输出数据,低电平有效
*/
wire [3:0] L;
wire [31:0] Lo_n;
supply1 VCC;
supply0 GND;
//实例化74LS139:2-4译码器做为选片
decoder74LS139 LS(
.G(G),
.A(A[4:3]),
.Y_n(L)
);
//实例化4片74X138:3-8译码器做为输出信号
decoder74X138 X3(
.E1_n(L[3]),
.E2_n(GND),
.E3(VCC),
.A(A[2:0]),
.Y_n(Lo_n[31:24])
);
decoder74X138 X2(
.E1_n(L[2]),
.E2_n(GND),
.E3(VCC),
.A(A[2:0]),
.Y_n(Lo_n[23:16])
);
decoder74X138 X1(
.E1_n(L[1]),
.E2_n(GND),
.E3(VCC),
.A(A[2:0]),
.Y_n(Lo_n[15:8])
);
decoder74X138 X0(
.E1_n(L[0]),
.E2_n(GND),
.E3(VCC),
.A(A[2:0]),
.Y_n(Lo_n[7:0])
);
always @(*) begin
	Y_n=Lo_n;
end
endmodule

仿真

//filename:tb_74X138.v
`timescale 1ns/1ns
module tb_74X138;
reg E1_n,E2_n,E3;
reg [2:0] A;
wire [7:0] Y_n;
//实例化74X138
decoder74X138 decoder74X138_inst(
.E1_n(E1_n),
.E2_n(E2_n),
.E3(E3),
.A(A),
.Y_n(Y_n)
);
initial begin
	E1_n=1;E2_n=0;E3=1;A=3'b000;
	#1
	E1_n=0;E2_n=1;E3=1;A=3'b000;
	#1
	E1_n=0;E2_n=0;E3=0;A=3'b000;
	#1
	E1_n=0;E2_n=0;E3=1;A=3'b000;
	#1
	E1_n=0;E2_n=0;E3=1;A=3'b001;
	#1
	E1_n=0;E2_n=0;E3=1;A=3'b010;
	#1
	E1_n=0;E2_n=0;E3=1;A=3'b011;
	#1
	E1_n=0;E2_n=0;E3=1;A=3'b100;
	#1
	E1_n=0;E2_n=0;E3=1;A=3'b101;
	#1
	E1_n=0;E2_n=0;E3=1;A=3'b110;
	#1
	E1_n=0;E2_n=0;E3=1;A=3'b111;
	#1
	;
end
endmodule
	

Leave a comment

Your email address will not be published. Required fields are marked *