题目六:霓虹灯电路设计(平台实现)★
1)使用平台上的8个七段数码管进行显示,即围绕平台上的8个数码管转圈;
2)要求同时显示的段数为1、2、3段可选;
3)可进行顺向、逆向显示(通过某一开关键进行选择);
4)按下复位键后,重新开始旋转;
5)多种点亮方式自选,如全亮等。
环境:Win10 + Quartus II 9.0 (32-Bit)
EDA是什么?
EDA的中文名是电子设计自动化。EDA是指利用计算机辅助设计(CAD)软件,来完成超大规模集成电路(VLSI)芯片的功能设计、综合、验证、物理设计(包括布局、布线、版图、设计规则检查等)等流程的设计方式。
通过此次霓虹灯电路设计我初步了解到EDA技术,可能说EDA技术你可能不知道它是什么,但如果说芯片技术你可能就会有所了解,芯片的设计离不开EDA技术。没有EDA软件,高端芯片的设计你将无从下手。
EDA技术基本被美国三家公司垄断:Cadence、Synopsis和Mentor Graphic。EDA公司的商业模式分为两类:license证书授权与IP核(具有知识产权的集成电路芯核Intellectual Property的简称)。2014年,华为一次性花费3000万美元去购买Cadence公司的证书。由此可见,EDA技术在国内的落后以及其在现在这个信息时代的重要性。
设计步骤:
要完成这个作业,首先要了解数码管的使用:
一块EDA板子有8个数码管,每一个数码管都有8个段(包括小数点)。
如以下图,SEL 7-0分别表示数码管1-8,下面为Pin(引脚号)号。
如以下图,ABCDEFGH分别表示1-8个段,其中H为小数点。ABCDEFGH右边为Pin(引脚号)号。
详细如下图:
数码管用‘0’来控制开,用’1‘开控制关。
每个数码管中的段用‘1’来控制亮。
由于本题不同的功能之间都是大同小异,所以作者只展示一段绕圈的思想及实现,理解了这个一段绕圈的思想,相信你们对霓虹灯电路设计就能得心应手。
1段绕圈。思想为如果是顺时针设置为正方向的话,利用时钟信号和信号量计时,在一定的时间间隔内选打开择你想顺时针转圈的第一个始段所在的数码管并打开它(‘0’是打开,‘1’是关闭)。然后选择第二个要点亮的段所在的数码管,依次这样的操作即可得到1段灯管绕8个数码管的动态转圈。
VHDL代码(1段功能):
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY test11 is
Port(clk:In STD_LOGIC;
ledag:OUT STD_LOGIC_VECTOR(7 downto 0);--8 segments
Bt:OUT STD_LOGIC_VECTOR(7 downto 0);--8 digital tubes
key7:in bit;
i7:buffer bit);
end test11;
Architecture arc of test11 is
Signal cnt8: integer range 0 to 2100;
Signal a:integer range 0 to 24;
Signal k7:integer range 0 to 100;
Begin
P2:process(clk)
Begin
if clk'event and clk='1' then
if cnt8=2050 then
cnt8<=0;
else cnt8<=cnt8+1;
if key7='0' then
if k7=100 then
i7 <= i7 xor '1';--When K7 is equal to 100, the key state changes once
k7<=0;
else k7<=k7+1;
end if;
end if;
end if;
end if;
if i7='0' then
case cnt8 is
when 0=> Bt<="11111111";a<=0;
when 100=> Bt<="11111110";a<=1;
when 200=> Bt<="11111101";a<=2;
when 300=> Bt<="11111011";a<=3;
when 400=> Bt<="11110111";a<=4;
when 500=> Bt<="11101111";a<=5;
when 600=> Bt<="11011111";a<=6;
when 700=> Bt<="10111111";a<=7;
when 800=> Bt<="01111111";a<=8;
when 900=> Bt<="01111111";a<=9;
when 1000=> Bt<="01111111";a<=10;
when 1100=> Bt<="01111111";a<=11;
when 1200=> Bt<="10111111";a<=12;
when 1300=> Bt<="11011111";a<=13;
when 1400=> Bt<="11101111";a<=14;
when 1500=> Bt<="11110111";a<=15;
when 1600=> Bt<="11111011";a<=16;
when 1700=> Bt<="11111101";a<=17;
when 1800=> Bt<="11111110";a<=18;
when 1900=> Bt<="11111110";a<=19;
when 2000=> Bt<="11111110";a<=20;
when others=>NULL;
end case;
end if;
if i7='0' then
case a is
when 0=>ledag<="00000000";
when 1=>ledag<="10000000";
when 2=>ledag<="10000000";
when 3=>ledag<="10000000";
when 4=>ledag<="10000000";
when 5=>ledag<="10000000";
when 6=>ledag<="10000000";
when 7=>ledag<="10000000";
when 8=>ledag<="10000000";
when 9=>ledag<="00000100";
when 10=>ledag<="00001000";
when 11=>ledag<="00010000";
when 12=>ledag<="00010000";
when 13=>ledag<="00010000";
when 14=>ledag<="00010000";
when 15=>ledag<="00010000";
when 16=>ledag<="00010000";
when 17=>ledag<="00010000";
when 18=>ledag<="00010000";
when 19=>ledag<="00100000";
when 20=>ledag<="01000000";
when others=>NULL;
end case;
end if;
end process P2;
end arc;
效果图(应该是顺时针动态以1段绕圈跑灯)
完整代码
链接:https://pan.baidu.com/s/1eqdfHf93877ZlLBqe04Xrw
提取码:vans
原创不易,转载需说明!