任务
- 实现74X138的程序设计
- 用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
思路
根据功能表进行设计
程序设计
//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