4-16译码器和8-3优先编码器的实现
实验目的
通过两个实验:理解由小逻辑单元组合成更大逻辑单元的概念,掌握模块例化的语法,了解使能信号的运用;熟悉8-3优先编码器的工作原理,并与3-8译码器进行比较联系。
(一)4-16译码器实现思路
使用两片3-8 DECODER和任意逻辑门实现一个4-16译码器(增加一个使能信号)
74138(3-8译码器)Function Tables:
(二)8-3优先编码器实现思路
声明输出信号V为有效,当数据输入I0+I1+I2+I3+I4+I5+I6+I7=1 时,V=1
实验内容
(一) 4-16译码器
1.实验流程:
(1)分析实验目的,使用两片3-8 DECODER,在top design中需要调用3-8译码器模块两次,两次调用的输出分别为4-16译码器输出的高八位和低八位。
(2)两次调用的输出是否有效通过G1,G2A,G2B(74138的使能信号)决定,其中G1即4-16译码器四位输入信号的一位,本次实验取最高位为G1,低三位为调用3-8译码器时的输入信号。G2A与G2B可通过拨号开关输入(本次实验采用该方式),也可直接赋值为低电平(赋值为0)。
(3)分析整理好思路后画出真值表,根据真值表进行后续编程操作。
(4)用verilog语言在vivado环境下编写源文件,基于3-8译码器实现4-16译码器。
(5)综合、实现、生成bitstream文件后,将bit文件下载到NEXYS4 DDR开发板上测试功能(六个指定的拨动开关代表输入,上拨值为1,下拨值为0;16个指定的led灯代表输出,灯亮代表H高电平1,不亮代表L低电平0。)
2.Verilog代码分析:
(1)Design source(.v文件):
① top.v:
module top416(
input [3:0]D,
input EN1,//G2A
input EN2,//G2B
output [15:0]U//16输出
);
wire S3;
wire[2:0]M;
wire[7:0]YL,YH;
assign S3=D[3];
assign M=D[2:0];
ThrEightymq m381(S3,EN1,EN2,M,YL);
ThrEightymq m382(~S3,EN1,EN2,M,YH);
assign U[7:0]=YL;
assign U[15:8]=YH;
endmodule
②3-8.v:
module ThrEightymq(
input G1,
input G2A,
input G2B, //Enable
input [2:0]S, //input
output reg [7:0]Y //output
);
wire G2;
assign G2=G2A|G2B;
always@(*)
begin
case({G1,G2})
2'b10:
begin
case(S)
3'b000 : Y = 8'b11111110;
3'b001 : Y = 8'b11111101;
3'b010 : Y = 8'b11111011;
3'b011 : Y = 8'b11110111;
3'b100 : Y = 8'b11101111;
3'b101 : Y = 8'b11011111;
3'b110 : Y = 8'b10111111;
3'b111 : Y = 8'b01111111;
default: Y = 8'b00000000;
endcase
end
default: Y=8'b11111111;
endcase
end
endmodule
.v分析:
Ⅰtop.v文件:
①input一个四位向量D作为4-16译码器的输入信号,其中最高位在调用74138(3-8)译码器时映射到G1,低三位映射到3-8译码器的输入信号。另外input两个使能信号EN1,EN2,在调用3-8译码器模块时分别映射到G2A和G2B。
②output一个十六位向量U作为4-16译码器的输出信号,1代表高电平,0代表低电平,分别