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