数字电路课程设计.docx
- 文档编号:23469630
- 上传时间:2023-05-17
- 格式:DOCX
- 页数:23
- 大小:296.60KB
数字电路课程设计.docx
《数字电路课程设计.docx》由会员分享,可在线阅读,更多相关《数字电路课程设计.docx(23页珍藏版)》请在冰豆网上搜索。
数字电路课程设计
·摘要:
二十世纪后半期,随着集成电路和计算机的不断发展,电子技术面临着严峻的挑战。
由于电子技术发展周期不断缩短,专用集成电路(ASIC)的设计面临着难度不断提高与设计周期不断缩短的矛盾.
为了解决这个问题,要求我们必须采用新的设计方法和使用高层次的设计工具.在此情况下,EDA(ElectronicDesignAutomation即电子设计自动化)技术应运而生。
随着电子技术的发展及缩短电子系统设计周期的要求,EDA技术得到了迅猛发展。
EDA技术是以大规模可编程逻辑器件为设计载体,以硬件描述语言为系统逻辑描述的主要表达方式,以计算机、大规模可编程逻辑器件的开发软件及实验开发系统为设计工具,通过有关的开发软件,自动完成用软件的方法设计电子系统到硬件系统的逻辑编译、逻辑化简、逻辑分割、逻辑综合及优化、逻辑布局布线、逻辑仿真,直至对于特定目标芯片的适配编译、逻辑映射、编程下载等工作,最终形成集成电子系统或专用集成芯片的一门新技术。
本设计主要利用VHDL语言在EDA平台上设计一个8*8点阵,它主要是运用发光二极管组成一个汉字,还可以实现汉字的滚动附加功能。
总的程序由几个各具不同功能的单元模块程序拼接而成,其中包括显示静态汉字的子程序和显示动态滚动汉字的子程序。
并且使用QUARTUS II软件进行电路波形仿真,下载到EDA实验箱进行验证。
·关键字:
vhdl语言,eda,点阵。
·一、设计目的:
1.、了解LED点阵显示的基本原理和实现方法。
2、掌握点阵汉字库的编码和从标准字库中提取汉字编码的方法。
3、能设计一个8*8显示汉字的点阵。
·二、课程要求:
1、技术及功能要求:
(1)、在LED上显示静态汉字“中”。
(S1控制)
(2)、在LED上显示动态汉字“王中王”(S2控制)。
2、本人工作:
负责软件部分
·三、设计原理:
·1、8*8点阵的基本工作原理
8X8点阵共由64个发光二极管组成,且每个发光二极管是放置在行线和列线的交叉点上,当对应的某一行置1电平,某一列置0电平,则相应的二极管就亮;如要将第一点点亮,则1脚接高电平a脚接低电平,则第一个点就亮了;如果要将第一行点亮,则脚要接高电平,而(a、b、c、d、e、f、g、h)这些引脚接低电平,那么第一行就会点亮;如要将第一列点亮,则第a脚接低电平,而(1、2、3、4、5、6、7、8)接高电平,那么第一列就会点亮。
8*8点阵的引脚(图一)的是一排阳极,一排阴极。
1,2,3,4,5,6,7,8是行(阳极)
a,b,c,d,e,f,g,h是列(阴极)
图一;
根据要求设计显示的汉字(中),来设计哪些点亮。
动态显示原理:
我们假定一幅图形在第一时刻显示在一个位置(采用列扫描显示),那么如果我们想让其滚动,在第二时刻,其行数据就要有所变化,(假设我们让其左滚)那就是说原来的第二行数据现在要变成第一行数据,依次类推,第八行数据变成第七行数据,而行数据表值中的第九个的数据变成点阵中的第八行数据,依次类推第三时刻,第N时刻…不同的时刻行数据不停的串变,最后就在点阵上看到图形滚动的显示效果。
·2、VHDL程序
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_Unsigned.all;
useieee.std_logic_ARITH.all;
entityzongis
port(a:
instd_logic_vector(1downto0);
clk:
instd_logic;
hang:
outstd_logic_vector(7downto0);
lie:
outstd_logic_vector(7downto0));
endentityzong;
architectureoneofzongis
componentpengis
port(clk,en:
instd_logic;
lie:
outstd_logic_vector(7downto0);--列
com:
outstd_logic_vector(7downto0));
endcomponent;
componentgunis
PORT(
clk,en:
INSTD_LOGIC;
lie:
outSTD_LOGIC_VECTOR(7DOWNTO0);--列
com:
outSTD_LOGIC_VECTOR(7DOWNTO0));--行
endcomponent;
signalh1,h2,h3:
std_logic_vector(7downto0);
signall1,l2,l3:
std_logic_vector(7downto0);
begin
u1:
pengportmap(clk=>clk,en=>a
(1),com=>h1,lie=>l1);
u2:
gunportmap(clk=>clk,en=>a(0),com=>h2,lie=>l2);
hang<=h1orh2;
lie<=l1orl2;
endarchitectureone;
注:
详细文件见附录。
·3、设计仪器、设备
PC机一台、GW48教学实验系统一台、下载电缆一根(已接好)
·4、设计步骤
步骤1:
为本项设计建立文件夹
任何一项设计都是一项工程,都必须首先为此工程建立一个放置与此工程相关的所有的文件夹,在此文件夹被EDA软件默认为工作库。
一个设计项目可以包含多个设计文件,一般不同的设计项目最好放在不同的文件夹中。
步骤2:
输入设计项目和存盘
1)打开QUARTUS||,单击“file”菜单,将鼠标移到NewProjectWizard选项单击则显示如下图内容,在其中建立项目名和实体名,项目名和实体必须保持一致,最后点击finish完成
2)在其中点击file→new,选择原理图编辑器,在这里我们建立VHDL文件,点击确定则显示下图情况,可以在里面键入程序,如下图:
步骤3:
选择目标器件并编译
1)、在Assign选项的下拉菜单中选择器件选择项Device,如图所示。
在DeviceFamily(器件序列栏)中选定目标器件对应的序列名,EP2C5T144C8对应的是CycloneII系列。
完成器件选择后,按OK键。
注意:
所选器件必须与目标板的器件型号完全一致。
选择CyclonePackage:
TQFPPIN:
144Speedgrade:
8
2)、输入完程序以后点击工具栏右方一个紫色的三角符号“
”,然后运行程序,如果程序出现错误在改正。
步骤4:
时序仿真
1.建立波形文件:
选择File->New,选择VectorWaveformFile,单击OK。
2.选择Edit->EndTime选项,如下图所示,设定仿真时间宽度。
3.双击Name下的空白处,弹出InsertNodorBus对话框,单击NodeFinder。
4.如下图所示选定各个选择项。
5.单击OK,完成引脚输入
6.加上输入信号后波形文件存盘
7.运行仿真器。
在Processing菜单下选择StartSimulation项,直到Simulatorwassuccessful出现,仿真结束。
完成波形如图所示。
8.锁定引脚
选择Assignments菜单下的Pins命令,出现以上窗口:
9.下载
选择Tools菜单下的Programmer命令,然后在mode下选择“ActiveSerialProgramming”,点“Addfile”选择所要的文件,之后按“OK”,点“start”按钮开始下载,“Progress”进度条显示下载进度,
下载成功“Process”会显示“100%”。
下载完后就可以在实验箱查看结果。
通过上面的步骤分别下载到实验箱中和FPGA中,验证了在仿真中的结果是正确的。
四、总结:
我们本学期开设了数字电路课程设计这一学科,在学习的这段时间里,我们已经对这门课程有了初步的掌握,掌握了它的内容。
另外与上学期的EDA学科进行了联系,加深对其内容的理解。
还有就是对这门课程本次的实训,我们已经能够设计的简单一些使用的程序,对它当中的简单程序也能够做比较全面的分析。
经过这一次实训,我们已经更深的了解这门课程的内容和实课程质,同时也提高了我们的动手操作能力,使得我们通过一个又一个的实训,学会了如何对它进行软硬件的相结合使用,更深一步掌握了这门课程。
在此次实训中,我们也遇到了一些问题,但是在老师的指导和同学的帮助下,也都一一解决了,也所谓一份耕耘一分收获,在大家的共同努力下,我们终于较好的圆满的完成了本次实训。
附录:
1、静态显示子程序
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_Unsigned.all;
useieee.std_logic_ARITH.all;
ENTITYpengis
port(clk,en:
instd_logic;
lie:
outstd_logic_vector(7downto0);--列
com:
outstd_logic_vector(7downto0));--行
Endpeng;
Architectureaofpengis
signalst1:
std_logic_vector(7downto0);
signalosc:
std_logic;
signalosd:
std_logic;
signald_ff:
std_logic_vector(27downto0);
signaldata:
std_logic_vector(7downto0);
signald0,d1,d2,d3,d4,d5,d6,d7:
std_logic_vector(7downto0);
signallie0,lie1,lie2,lie3,lie4,lie5,lie6,lie7:
std_logic_vector(7downto0);
Begin
com<=data;
lie<=st1;
d0<="00000000";
d1<="00111100";
d2<="00100100";
d3<="01101110";
d4<="11111111";
d5<="00100100";
d6<="00111100";
d7<="00000000";--字库中
First:
process
begin
waituntilclk='1';
if(d_ff(27downto0)>=2e8)then
d_ff(27downto0)<="0000000000000000000000000000";
else
d_ff(27downto0)<=d_ff+1;
endif;
osc<=notd_ff(10);
endprocessfirst;
second:
process(osc)
begin
if(osc='1'andosc'eventanden='0')then
ifst1(7downto0)="00000000"orst1(7downto0)="01111111"then
st1(7downto0)<="11111110";data<=d0;
elsifst1(7downto0)="11111110"then
st1(7downto0)<="11111101";data<=d1;
elsifst1(7downto0)="11111101"then
st1(7downto0)<="11111011";data<=d2;
elsifst1(7downto0)="11111011"then
st1(7downto0)<="11110111";data<=d3;
elsifst1(7downto0)="11110111"then
st1(7downto0)<="11101111";data<=d4;
elsifst1(7downto0)="11101111"then
st1(7downto0)<="11011111";data<=d5;
elsifst1(7downto0)="11011111"then
st1(7downto0)<="10111111";data<=d6;
elsifst1(7downto0)="10111111"then
st1(7downto0)<="01111111";data<=d7;
endif;
endif;
endprocesssecond;
enda;
2、动态显示子程序
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
USEIEEE.STD_LOGIC_ARITH.ALL;
entitygunis
PORT(
clk,en:
INSTD_LOGIC;
lie:
outSTD_LOGIC_VECTOR(7DOWNTO0);--列
com:
outSTD_LOGIC_VECTOR(7DOWNTO0));--行
ENDgun;
ARCHITECTUREaOFgunIS
SIGNALst1,st2:
STD_LOGIC_VECTOR(7DOWNTO0);
SIGNALosc:
STD_LOGIC;
SIGNALosd:
STD_LOGIC;
SIGNALd_ff:
STD_LOGIC_VECTOR(27DOWNTO0);
SIGNALdata:
STD_LOGIC_VECTOR(7DOWNTO0);
SIGNALd0,d1,d2,d3,d4,d5,d6,d7:
STD_LOGIC_VECTOR(7DOWNTO0);
SIGNALlie0,lie1,lie2,lie3,lie4,lie5,lie6,lie7:
STD_LOGIC_VECTOR(6DOWNTO0);
Begin
Com<=data;
lie<=st1;
D0<=
"10000000"whenlie0="0000000"else--王0列
"10001001"whenlie0="0000001"else--王1列
"10001001"whenlie0="0000010"else--王2列
"11111111"whenlie0="0000011"else--王3列
"10001001"whenlie0="0000100"else--王4列
"10001001"whenlie0="0000101"else--王5列
"10001001"whenlie0="0000110"else--王6列
"10000000"whenlie0="0000111"else--王7列
"00000000"whenlie0="0001000"else
"00000000"whenlie0="0001001"else--中0列
"00111100"whenlie0="0001010"else--中1列
"00100100"whenlie0="0001011"else--中2列
"11111111"whenlie0="0001100"else--中3列
"00100100"whenlie0="0001101"else--中4列
"00111100"whenlie0="0001110"else--中5列
"00000000"whenlie0="0001111"else--中6列
"00000000"whenlie0="0010000"else--中7列
"00000000";
D1<=
"10001001"whenlie0="0000000"else--王1列
"10001001"whenlie0="0000001"else--王2列
"11111111"whenlie0="0000010"else--王3列
"10001001"whenlie0="0000011"else--王4列
"10001001"whenlie0="0000100"else--王5列
"10001001"whenlie0="0000101"else--王6列
"10000000"whenlie0="0000110"else--王7列
"00000000"whenlie0="0000111"else
"00000000"whenlie0="0001000"else--中0列
"00111100"whenlie0="0001001"else--中1列
"00100100"whenlie0="0001010"else--中2列
"11111111"whenlie0="0001011"else--中3列
"00100100"whenlie0="0001100"else--中4列
"00111100"whenlie0="0001101"else--中5列
"00000000"whenlie0="0001110"else--中6列
"00000000"whenlie0="0001111"else--中7列
"10000000"whenlie0="0010000"else
"00000000"whenlie0="0010001"else--王0列
"00000000";
D2<=
"10001001"whenlie0="0000000"else--王2列
"11111111"whenlie0="0000001"else--王3列
"10001001"whenlie0="0000010"else--王4列
"10001001"whenlie0="0000011"else--王5列
"10001001"whenlie0="0000100"else--王6列
"10000000"whenlie0="0000101"else--王7列
"00000000"whenlie0="0000100"else
"00000000"whenlie0="0000111"else--中0列
"00111100"whenlie0="0001000"else--中1列
"00100100"whenlie0="0001001"else--中2列
"11111111"whenlie0="0001010"else--中3列
"00100100"whenlie0="0001011"else--中4列
"00111100"whenlie0="0001100"else--中5列
"00000000"whenlie0="0001101"else--中6列
"00000000"whenlie0="0001110"else--中7列
"00010001"whenlie0="0001111"else
"10000000"whenlie0="0010000"else--王0列
"10001001"whenlie0="0010001"else--王1列
"00000000";
D3<=
"11111111"whenlie0="0000000"else--王3列
"10001001"whenlie0="0000001"else--王4列
"10001001"whenlie0="0000010"else--王5列
"10001001"whenlie0="0000011"else--王6列
"10000000"whenlie0="0000100"else--王7列
"00000000"whenlie0="0000101"else
"00000000"whenlie0="0000110"else--中0列
"00111100"whenlie0="0000111"else--中1列
"00100100"whenlie0="0001000"else--中2列
"11111111"whenlie0="0001001"else--中3列
"00100100"whenlie0="0001010"else--中4列
"00111100"whenlie0="0001011"else--中5列
"00000000"whenlie0="0001100"else--中6列
"00000000"whenlie0="0001101"else--中7列
"00000000"whenlie0="0001110"else
"10000000"whenlie0="0001111"else--王0列
"10001001"whenlie0="0010000"else--王1列
"10001001"whenlie0="0010001"else--王3列
"00000000";
D4<=
"10001001"whenlie0="0000000"else--王4列
"10001001"whenlie0="0000001"else--王5列
"10001001"whenlie0="0000010"else--王6列
"10000000"whenlie0="0000011"else--王7列
"00000000"whenlie0="0000100"else
"00000000"whenlie0="0000101"else--中0列
"00111100"whenlie0="0000110"else--中1列
"00100100"whenlie0="0000111"else--中2列
"11111111"whenlie0="0001000"else--中3列
"00100100"whenlie0="0001001"else--中4列
"00111100"whenlie0="0001010"else--中5列
"00000000"whenlie0="0001011"else--中6列
"00000000"whenlie0="0001100"else--中7列
"00000000"whenlie0="0001101"else
"10000000"whenlie0="00011
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数字电路 课程设计