1、VHDL点阵显示 课 程:基于FPGA的点阵显示控制器的设计学 院: 电 气 信 息 工 程 学 院 专 业: 测控技术与仪器 班 级: 姓 名: 学 号: 合作者姓名: 日 期: 一、引言随着我国经济的高速发展,对公共场合发布信息的需求日益增长,利用LED点阵滚动显示汉字的出现正好适应了这一市场需求,已经成为信息传播的一种重要手段。采用传统方法设计的汉字滚动显示器,通常需要使用单片机、存储器和制约逻辑电路来进行PCB板级的系统集成。尽管这种方案有单片机软件的支持较为灵活,但是由于受硬件资源的限制,未来对设计的变更和升级,总是难以避免要付出较多研发经费和较长投放市场周期的代价。随着电子设计自动
2、化(EDA)技术的进展,基于可编程FPGA器件进行系统芯片集成的新设计方法,也正在快速地到代基于PCB板的传统设计方式。因此,基于FPGA和VHDL语言实现在8*8点阵上的汉字静态或一屏显示问题。二、课题要求(1)技术要求1根据电路特点,用层次设计概念。将此设计任务分成若干模块,规定每一模块的功能和各模块之间的借口,透视加深层次化设计概念;2软件的原件管理深层含义,以及模块元件之间的连接概念,对于不同目录下的同一设计,如何熔合;3适配划分前后的仿真内容有何不同概念,仿真信号对象有何不同,有更深一步了解。熟悉了FPGA设计的调试过程中手段的多样化;4按适配划分后的管脚定位,同相关功能块硬件电路接
3、口连线;(2)功能要求1在8*8点阵上显示汉字2可以静态显示或一屏显示3利用拨码开关来实现静态显示与一屏显示切换(3)本人的工作三、设计方案(1)工作原理 8*8点阵原理:按照要求可知,点阵模块,共由8*8=64个发光二极管组成,如何在该点阵模块上显示汉字是本实验的关键。先将要显示的每幅图像画在8*8共64个小方格的矩形框中,再在有笔划下落处的小方格里填上“1”,五笔划处填上“0”,这样就形成了与这个汉字所对应的二进制数据在该矩形矿上的分布以“正”为例,点阵分布为:1000000010000001111100011000000111111111100010011000100110000000(
4、2)原理框图四、单元电路设计,仿真结果与分析(1)静态显示“正”library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_Unsigned.all;use ieee.std_logic_ARITH.all;ENTITY peng isport(clk,en:in std_logic; lie:out std_logic_vector(7 downto 0); -列 com:out std_logic_vector(7 downto 0);-行End peng;Architecture a of peng issignal st1:s
5、td_logic_vector(7 downto 0);signal osc:std_logic;signal osd:std_logic;signal d_ff:std_logic_vector(27 downto 0);signal data:std_logic_vector(7 downto 0);signal d0,d1,d2,d3,d4,d5,d6,d7:std_logic_vector(7 downto 0);signal lie0,lie1,lie2,lie3,lie4,lie5,lie6,lie7:std_logic_vector(7 downto 0);Begincom=da
6、ta;lie=st1;d0=10000000;d1=10000001;d2=11110001;d3=10000001;d4=11111111;d5=10001001;d6=10001001;d7=2e8)then d_ff(27 downto 0)=0000000000000000000000000000;else d_ff(27 downto 0)=d_ff+1;end if;osc=not d_ff(10);end process first;second:process(osc)begin if(osc=1 and oscevent and en=0)then if st1(7 down
7、to 0)=00000000or st1(7 downto 0)=01111111then st1(7 downto 0)=11111110;data=d0; elsif st1(7 downto 0)=11111110then st1(7 downto 0)=11111101;data=d1; elsif st1(7 downto 0)=11111101then st1(7 downto 0)=11111011;data=d2; elsif st1(7 downto 0)=11111011then st1(7 downto 0)=11110111;data=d3; elsif st1(7 d
8、ownto 0)=11110111then st1(7 downto 0)=11101111;data=d4; elsif st1(7 downto 0)=11101111then st1(7 downto 0)=11011111;data=d5; elsif st1(7 downto 0)=11011111then st1(7 downto 0)=10111111;data=d6; elsif st1(7 downto 0)=10111111then st1(7 downto 0)=01111111;data=d7; end if;end if;end process second;end
9、a;(2)一屏显示“上下五千年”Library ieee;Use ieee.std_logic_1164.all;Use ieee.std_logic_unsigned.all;Use ieee.std_logic_arith.all;Entity weng isPort( Clk,en:in std_logic; lie:out std_logic_vector(7 downto 0);-列 Com:out std_logic_vector(7 downto 0);-行End weng;Architecture a of weng issignal st1:std_logic_vector(
10、7 downto 0);signal osc:std_logic;signal osd:std_logic;signal d_ff:std_logic_vector(27 downto 0);signal data:std_logic_vector(7 downto 0);signal d0,d1,d2,d3,d4,d5,d6,d7:std_logic_vector(7 downto 0);signal lie0,lie1,lie2,lie3,lie4,lie5,lie6,lie7:std_logic_vector(6 downto 0);begincom=data;lie=st1;D0=10
11、000000when lie0(6 downto 0)=0000000else00000001when lie0(6 downto 0)=0000001else10000000when lie0(6 downto 0)=0000010else00010000when lie0(6 downto 0)=0000011else00100100when lie0(6 downto 0)=0000100else00000000;D1=10000000when lie0(6 downto 0)=0000000else00000001when lie0(6 downto 0)=0000001else100
12、01001when lie0(6 downto 0)=0000010else00010100when lie0(6 downto 0)=0000011else00111011when lie0(6 downto 0)=0000100else00000000;D2=10000000when lie0(6 downto 0)=0000000else00000001when lie0(6 downto 0)=0000001else10001001when lie0(6 downto 0)=0000010else00010100when lie0(6 downto 0)=0000011else0010
13、1010when lie0(6 downto 0)=0000100else00000000;D3=11111111when lie0(6 downto 0)=0000000else11111111when lie0(6 downto 0)=0000001else11111111when lie0(6 downto 0)=0000010else11111100when lie0(6 downto 0)=0000011else00101010when lie0(6 downto 0)=0000100else00000000;D4=10010000when lie0(6 downto 0)=0000
14、000else00001001when lie0(6 downto 0)=0000001else10001001when lie0(6 downto 0)=0000010else00010010when lie0(6 downto 0)=0000011else11111110when lie0(6 downto 0)=0000100else00000000;D5=10010000when lie0(6 downto 0)=0000000else00010001when lie0(6 downto 0)=0000001else10001001when lie0(6 downto 0)=00000
15、10else00010001when lie0(6 downto 0)=0000011else00101010when lie0(6 downto 0)=0000100else00000000;D6=10010000when lie0(6 downto 0)=0000000else00100001when lie0(6 downto 0)=0000001else11111000when lie0(6 downto 0)=0000010else00010000when lie0(6 downto 0)=0000011else00101010when lie0(6 downto 0)=000010
16、0else00000000;D7=2e8)thend_ff(27 downto 0)=0000000000000000000000000000;elsed_ff(27 downto 0)=d_ff+1;end if;osc=not d_ff(10);osd=not d_ff(26);end process first;second:process(osc)beginif(osc=1 and oscevent and en=0)then if st1(7 downto 0)=00000000or st1(7 downto 0)=01111111then st1(7 downto 0)=11111
17、110;data=d0; elsif st1(7 downto 0)=11111110then st1(7 downto 0)=11111101;data=d1; elsif st1(7 downto 0)=11111101then st1(7 downto 0)=11111011;data=d2; elsif st1(7 downto 0)=11111011then st1(7 downto 0)=11110111;data=d3; elsif st1(7 downto 0)=11110111then st1(7 downto 0)=11101111;data=d4; elsif st1(7
18、 downto 0)=11101111then st1(7 downto 0)=11011111;data=d5; elsif st1(7 downto 0)=11011111then st1(7 downto 0)=10111111;data=d6; elsif st1(7 downto 0)=10111111then st1(7 downto 0)=01111111;data=d7; end if;end if;end process second;third:process(osd)beginif(osd=1 and osdevent and en=0)thenif lie0(6 dow
19、nto 0)=0000100then lie0(6 downto 0)=0000000;else lie0(6 downto 0)clk,en=a(1),com=h1,lie=l1);u2:weng port map(clk=clk,en=a(0),com=h2,lie=l2);hang=h1 or h2;lie=l1 or l2;end architecture one;六、调试结果创建工程在Quartus II 中新建一个VHDL File文件,将vhdl代码输入这个文件,并保存到工作目录,名为zong.vhd。利用new preject wizard 工具创建一个工程,工程名为zong,
20、顶层文件实体名为zong,并将上面创建的zong.vhd文件加入到工程中。编译前设置(1)选择目标芯片。用assignmemts-settings命令,弹出settings对话框,选择目标芯片为EP2C5T144C8。(2)选择工作方式,编程方式,及闲置引脚状态单击上图中的device&pin options按钮,弹出device&pin options窗口。在configuration项中,其下方的Generate compressed bitstreams处打勾,这样就能产生用于EPCS的POF压缩配置文件。在Configuration 选项页,选择配置器件为EPCS1,其配置模式选择为a
21、ctive serial。图3选择编程方式全程编译设置好前面的内容之后,就可以进行编译了。选择Processing菜单中start compilation,在窗口的下方processing栏中显示编译信息。图5 全程编译成功完成完成后在工程管理窗口左是角显示了工程zong 的层次结构和其中结构模块耗用的逻辑宏单元数。此栏的右边是编译处理流程,包括数据网表建立、逻辑综合、适配、配置文件装配和时序分析等。时序仿真(1)新建一个矢量波形文件,同时打开波形编辑器。设置仿真时间为50us,保存波形文件为zong.vwf。(2)将工程zong的端口信号名选入波形编辑器中图6 选择仿真控制仿真器参数设置。选
22、择菜单Assignment中的Settings,在Settings窗口下选择Simulator,在右侧的simulation mode项下选择timing,即选择时序仿真,并选择仿真激励文件名zong.vwf。现在所有设置进行完毕,在菜单processing项下选择start simulation,直到出现simulation was successful,仿真结束 。仿真文件simulation report 通常会自动弹出,否则选择processingsimulation report 。 程序调试的时候,要将整个系统程序分成不同的功能块进行调试,最后再加以整合。元器件清单器件名称数量杜邦线19根电阻10K欧姆3个1K欧姆8个200欧姆19个三极管90128个90138个芯片FPGA1个开关3个8*8点阵1个硬件电路与FPGA的连接硬件电路所需接至FPGA的管脚名称对应可用FPGA管脚H124H226H328H431H540H642H744H847L151L253L357L459L563L665L769L871K4
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1