译码器:扩展控制
输入3位二进制,输出为8个二进制位
A2 A1 A0 , Y0 Y1 Y2...Y8
被选中为低电位0
片选端、使能端,控制信号,是否被激活
译码器还具有两个控制端,为G1 G2,当G1为1且G2为0时,译码器按左侧真值表输出;否则全1
设计:
- 行为级(高级、抽象)
- 数据流描述(RTL描述)
- 结构描述(元件例化)
- Verilog HDL代码
输入信号:3位编码输入端A、B、C
使能输入端G1,G2
输出信号:8位编码输出端Y[7:0]
/*******声明*******
文件名称
创建日期
功能描述:输入为3位二进制码,输出为8个二进制位
硬件平台:E4CE6R22N FPGA开发板
版本号:V1.0
*******************/
module decoder38(A,B,C,G1,G2,Y);//decoder38 为工程名,顶层实体名,文件名❗一致
inputA,B,C;//3位2进制编码输入端,按键按下为0,C为最高位
inputG1,G2;
output[7:0]Y;//8位编码输出端,接LED8-LED1,输出0为亮
reg[7:0]Y;//reg只能做输出,不能接收信号,不能用于A/G
always@(A or B or C or G1 or G2)//电平触发 组合逻辑特征
begin
if(G1==0)Y=8'b11111111;// 如果G1为0,则Y输出11111111
else if(G2==1)Y=8'b11111111; //如果G2为0,则Y输出11111111
case({C,B,A})
3'b000:Y[7:0]=8'b11111110;
3'b001:Y[7:0]=8'b11111101;
3'b010:Y[7:0]=8'b11111011;
3'b011:Y[7:0]=8'b11110111;
3'b100:Y[7:0]=8'b11101111;
3'b101:Y[7:0]=8'b11011111;
3'b110:Y[7:0]=8'b10111111;
3'b111:Y[7:0]=8'b01111111;
endcase
end
endmodule
- 数据流描述
module decoder38(A,B,C,G1,G2,Y);
input A,B,C;
input G1,G2;
output [7:0]Y;
wire [7:0]Y; //被赋值量必须为wire型
wire S;//S门控信号
assign S=G1&~G2
assign Y=……
endmodule
①assign连续赋值语句,被赋值语句的信号数据类型必须是wire型
②位连接运算符{}很有用,注意被连接量中间用逗号隔开
③过长语句可回车分成几行,编译系统可分辨
- 例化门元件
decoder38(A,C,B,G1,G2,Y);
input A,B,C;
input G1,G2;
output[7:0]Y;
wire [7:0]Y;
wire NC,NB,NA,NG2,S;
not u0(NG2,G2); //反相器
not u1(NA,A); //反相器
not u2(NB,B); //反相器
not u3(NC,C); //反相器
and u4(S,G1,NG2); //二输入与门
nand u5(Y[0],NC,NB,NA,S); //四输入与非门,输出Y
nand u6(Y[1],NC,NB,NA,S);
nand u7(Y[2],NC,NB,NA,S);
nand u8(Y[3],NC,NB,NA,S);
nand u9(Y[4],C,NB,NA,S);
nand u10(Y[5],C,NB,A,S);
nand u11(Y[6],C,B,NA,S);
nand u12(Y[7],C,B,A,S);
endmoule