七段译码器芯片 VHDL 代码 - 消隐、测灯、零消隐功能
LIBRARY IEEE; --引用IEEE库 USE IEEE.STD_LOGIC_1164.ALL;--STD_LOGIC数据类型定义在此程序包中 USE IEEE.STD_LOGIC_ARITH.ALL;--该程序包定义了一些不同类型数据之间相互转化的函数 USE IEEE.STD_LOGIC_UNSIGNED.ALL;--该程序包定义了与unsigned数据类型相关的函数
ENTITY ymxsdl_1 IS--七段译码器芯片实体描述,该芯片含有3个控制管脚,4位二进制数据输入端及接至共阳数码管A-G笔划的输出管脚 PORT( XY: IN STD_LOGIC;--消隐端,低有效 TEST: IN STD_LOGIC;--测灯端,低有效 ZXY: IN STD_LOGIC;--零消隐,低有效 D,C,B,A: IN STD_LOGIC;--4位二进制数据输入管脚,D-A从高到低 Y:OUT STD_LOGIC_VECTOR(6 DOWNTO 0));--输出端,接至七段共阳数码管,6-0对应A-G笔划 END ENTITY ymxsdl_1;
ARCHITECTURE A OF ymxsdl_1 IS--七段译码器芯片结构体描述 SIGNAL TMP:STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL TEMP:STD_LOGIC_VECTOR(6 DOWNTO 0);--引入信号TEMP,最后赋值给Y BEGIN TMP<=D&C&B&A; PROCESS(XY,TEST,ZXY) BEGIN IF(XY='0') THEN--测灯和消隐控制管脚,消隐优先,既当消隐端为低电平时,无论测灯端是何信号,均实现消隐功能 TEMP<='1111111'; ELSIF(TEST='0') THEN--在消隐信号为高电平的情况下,测灯信号只要为低电平,实现测灯功能 TEMP<='0000000'; ELSIF(TMP='0000' ) THEN--在测灯和消隐信号均为高电平的情况下 IF(ZXY='0')THEN--当零消隐控制端为低电平的情况下 TEMP<='1111111';--实现零消隐功能 ELSE--在零消隐控制端为高电平的情况下,正常将十六进制数0译码成共阳数码管上显示数字0 TEMP<='0000001'; END IF; ELSIF(TMP='0001') THEN--在共阳数码管上显示1,对应十六进制数1 TEMP<='1001111'; ELSIF(TMP='0010') THEN--在共阳数码管上显示2,对应十六进制数2 TEMP<='0010010'; ELSIF(TMP='0011') THEN--在共阳数码管上显示3,对应十六进制数3 TEMP<='0000110'; ELSIF(TMP='0100') THEN--在共阳数码管上显示4,对应十六进制数4 TEMP<='1001100'; ELSIF(TMP='0101') THEN--在共阳数码管上显示5,对应十六进制数5 TEMP<='0100100'; ELSIF(TMP='0110') THEN--在共阳数码管上显示6,对应十六进制数6 TEMP<='0100000'; ELSIF(TMP='0111') THEN--在共阳数码管上显示7,对应十六进制数7 TEMP<='0001111'; ELSIF(TMP='1000') THEN--在共阳数码管上显示8,对应十六进制数8 TEMP<='0000000'; ELSIF(TMP='1001') THEN--在共阳数码管上显示9,对应十六进制数9 TEMP<='0000100'; ELSIF(TMP='1010') THEN--在共阳数码管上显示A,对应十六进制数10 TEMP<='0001000'; ELSIF(TMP='1011') THEN--在共阳数码管上显示B,对应十六进制数11 TEMP<='1100000'; ELSIF(TMP='1100') THEN--在共阳数码管上显示C,对应十六进制数12 TEMP<='0110001'; ELSIF(TMP='1101') THEN--在共阳数码管上显示D,对应十六进制数13 TEMP<='1000010'; ELSIF(TMP='1110') THEN--在共阳数码管上显示E,对应十六进制数14 TEMP<='0110000'; ELSIF(TMP='1111') THEN--在共阳数码管上显示F,对应十六进制数15 TEMP<='0111000'; END IF; END PROCESS; Y<=TEMP; END ARCHITECTURE A;
将VHDL转换为Verilog内容:module ymxsdl_1 ( XY, TEST, ZXY, D, C, B, A, Y );
input XY; input TEST; input ZXY; input D; input C; input B; input A; output reg [6:0] Y;
reg [3:0] TMP; reg [6:0] TEMP;
always @(XY or TEST or ZXY or D or C or B or A) begin if(XY == 0) begin TEMP <= 7'b1111111; end else if(TEST == 0) begin TEMP <= 7'b0000000; end else if(TMP == 4'b0000) begin if(ZXY == 0) begin TEMP <= 7'b1111111; end else begin TEMP <= 7'b0000001; end end else if(TMP == 4'b0001) begin TEMP <= 7'b1001111; end else if(TMP == 4'b0010) begin TEMP <= 7'b0010010; end else if(TMP == 4'b0011) begin TEMP <= 7'b0000110; end else if(TMP == 4'b0100) begin TEMP <= 7'b1001100; end else if(TMP == 4'b0101) begin TEMP <= 7'b0100100; end else if(TMP == 4'b0110) begin TEMP <= 7'b0100000; end else if(TMP == 4'b0111) begin TEMP <= 7'b0001111; end else if(TMP == 4'b1000) begin TEMP <= 7'b0000000; end else if(TMP == 4'b1001) begin TEMP <= 7'b0000100; end else if(TMP == 4'b1010) begin TEMP <= 7'b0001000; end else if(TMP == 4'b1011) begin TEMP <= 7'b1100000; end else if(TMP == 4'b1100) begin TEMP <= 7'b0110001; end else if(TMP == 4'b1101) begin TEMP <= 7'b1000010; end else if(TMP == 4'b1110) begin TEMP <= 7'b0110000; end else if(TMP == 4'b1111) begin TEMP <= 7'b0111000; end end
assign Y = TEMP;
endmodule
原文地址: https://www.cveoy.top/t/topic/pAZd 著作权归作者所有。请勿转载和采集!