七段译码器芯片VHDL代码与Verilog代码转换 | 共阳数码管显示 | 消隐、测灯、零消隐控制
{"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 IS--七段译码器芯片实体描述,该芯片含有3个控制管脚,4位二进制数据输入端及接至共阳数码管A-G笔划的输出管脚\nPORT(\n\t\t XY: IN STD_LOGIC;--消隐端,低有效\n\t\tTEST: IN STD_LOGIC;--测灯端,低有效\n\t\t ZXY: IN STD_LOGIC;--零消隐,低有效\n\t D: IN STD_LOGIC_VECTOR(3 DOWNTO 0);--4位二进制数据输入管脚,D-A从高到低\n\t\t\tY:OUT STD_LOGIC_VECTOR(6 DOWNTO 0));--输出端,接至七段共阳数码管,6-0对应A-G笔划\nEND ENTITY ymxsdl;\n\nARCHITECTURE A OF ymxsdl IS--七段译码器芯片结构体描述\nSIGNAL TEMP:STD_LOGIC_VECTOR(6 DOWNTO 0);--引入信号TEMP,最后赋值给Y\nBEGIN\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(D="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(D="0001") THEN--在共阳数码管上显示1,对应十六进制数1\n\t\t\tTEMP<="1001111";\n\t\tELSIF(D="0010") THEN--在共阳数码管上显示2,对应十六进制数2\n\t\t\tTEMP<="0010010";\n\t\tELSIF(D="0011") THEN--在共阳数码管上显示3,对应十六进制数3\n\t\t\tTEMP<="0000110";\n\t\tELSIF(D="0100") THEN--在共阳数码管上显示4,对应十六进制数4\n\t\t\tTEMP<="1001100";\n\t\tELSIF(D="0101") THEN--在共阳数码管上显示5,对应十六进制数5\n\t\t\tTEMP<="0100100";\n\t\tELSIF(D="0110") THEN--在共阳数码管上显示6,对应十六进制数6\n\t\t\tTEMP<="0100000";\n\t\tELSIF(D="0111") THEN--在共阳数码管上显示7,对应十六进制数7\n\t\t\tTEMP<="0001111";\n\t\tELSIF(D="1000") THEN--在共阳数码管上显示8,对应十六进制数8\n\t\t\tTEMP<="0000000";\n\t\tELSIF(D="1001") THEN--在共阳数码管上显示9,对应十六进制数9\n\t\t\tTEMP<="0000100";\n\t\tELSIF(D="1010") THEN--在共阳数码管上显示A,对应十六进制数10\n\t\t\tTEMP<="0001000";\n\t\tELSIF(D="1011") THEN--在共阳数码管上显示B,对应十六进制数11\n\t\t\tTEMP<="1100000";\t\n\t\tELSIF(D="1100") THEN--在共阳数码管上显示C,对应十六进制数12\n\t\t\tTEMP<="0110001";\t\n\t\tELSIF(D="1101") THEN--在共阳数码管上显示D,对应十六进制数13\n\t\t\tTEMP<="1000010";\n\t\tELSIF(D="1110") THEN--在共阳数码管上显示E,对应十六进制数14\n\t\t\tTEMP<="0110000";\t\n\t\tELSIF(D="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(\n\tinput wire XY,\n\tinput wire TEST,\n\tinput wire ZXY,\n\tinput wire [3:0] D,\n\toutput wire [6:0] Y\n);\n\nassign Y = TEMP;\n\nreg [6:0] TEMP;\n\nalways @(XY,TEST,ZXY,D)\nbegin\n\tcase ({XY,TEST,ZXY,D})\n\t\t{1'b0,1'b1,1'b1,4'b0000}: TEMP = 7'b1111111;\n\t\t{1'b1,1'b0,1'b1,4'b0000}: TEMP = 7'b0000000;\n\t\t{1'b1,1'b1,1'b0,4'b0000}: TEMP = 7'b1111111;\n\t\t{1'b1,1'b1,1'b1,4'b0000}: TEMP = 7'b0000001;\n\t\t{1'b1,1'b1,1'b1,4'b0001}: TEMP = 7'b1001111;\n\t\t{1'b1,1'b1,1'b1,4'b0010}: TEMP = 7'b0010010;\n\t\t{1'b1,1'b1,1'b1,4'b0011}: TEMP = 7'b0000110;\n\t\t{1'b1,1'b1,1'b1,4'b0100}: TEMP = 7'b1001100;\n\t\t{1'b1,1'b1,1'b1,4'b0101}: TEMP = 7'b0100100;\n\t\t{1'b1,1'b1,1'b1,4'b0110}: TEMP = 7'b0100000;\n\t\t{1'b1,1'b1,1'b1,4'b0111}: TEMP = 7'b0001111;\n\t\t{1'b1,1'b1,1'b1,4'b1000}: TEMP = 7'b0000000;\n\t\t{1'b1,1'b1,1'b1,4'b1001}: TEMP = 7'b0000100;\n\t\t{1'b1,1'b1,1'b1,4'b1010}: TEMP = 7'b0001000;\n\t\t{1'b1,1'b1,1'b1,4'b1011}: TEMP = 7'b1100000;\n\t\t{1'b1,1'b1,1'b1,4'b1100}: TEMP = 7'b0110001;\n\t\t{1'b1,1'b1,1'b1,4'b1101}: TEMP = 7'b1000010;\n\t\t{1'b1,1'b1,1'b1,4'b1110}: TEMP = 7'b0110000;\n\t\t{1'b1,1'b1,1'b1,4'b1111}: TEMP = 7'b0111000;\n\t\tdefault: TEMP = 7'b0000000;\n\t\tendcase\n\tend\n\nendmodule
原文地址: https://www.cveoy.top/t/topic/pAYZ 著作权归作者所有。请勿转载和采集!