基于FPGA的数字系统设计.docx
- 文档编号:24784361
- 上传时间:2023-06-01
- 格式:DOCX
- 页数:16
- 大小:309.04KB
基于FPGA的数字系统设计.docx
《基于FPGA的数字系统设计.docx》由会员分享,可在线阅读,更多相关《基于FPGA的数字系统设计.docx(16页珍藏版)》请在冰豆网上搜索。
基于FPGA的数字系统设计
《基于FPGA勺数字系统设计》项目设计
项目名称:
电子密码锁
姓名:
蒋流洲
院系:
应用技术学院
专业:
09电子信息工程(应电应本)
学号:
200915254137
指导教师:
徐正坤
完成时间:
2011年6月30日
1项目名称、内容与要求,,,,,,,,,,,,,,,,1页
1.1设计内容,,,,,,,,,,,,,,,,,,,,,1页
1-1匕-〜<IIJI_I,,,,,,,,,,,,,,,,,,,,,12、
1.2具体要求,,,,,,,,,,,,,,,,,,,,,1页
2系统整体架构(ArchitectureDescription),,,,,,,1页
2.1设计思路,,,,,,,,,,,,,,,,,,,,,1页
2.2系统原理(包含:
框图等阐述)与设计说明等内容,,,,2页
2.3创新点与原创性内容,,,,,,,,,,,,,,,,3页
3系统设计(含HDL或原理图输入设计),,,,,,,,,3页
注:
此部分包含主要逻辑单元、模块、源代码等内容
3.1HDL代码,,,,,,,,,,,,,,,,,,,,,3页
3.2系统整体电路图(或RTL级电路图),,,,,,,,,11页
4系统仿真(SimulationWaveform),,,,,,,,,,,12页
5FPGA实现(FPGAImplementation),,,,,,,,,,12页
注:
此处应包含硬件验证、操作过程、结果等说明
6总结(Closing),,,,,,,,,,,,,,,,,,15页
参考书目(Reference):
,,,,,,,,,,,,,,,16页
1项目名称、内容与要求
1.1设计内容
实验板上有10个按键k1〜k10,其中k1〜k10作为密码输入按键,k10作为复位按键,一便重新开始输入的密码。
当然,这个电子密码锁与实际的电子密码锁的设计有一些不一样,也许实际的电子密码锁并不设置复位按键,而是当密码输入错误后,延长很长一段时间才接受新密码的输入。
假设电子密码锁的密码为四位数3216。
利用实验板上的一个数码管显示输入密码次数,当输入密码正确时,在数码管上显示字符
“H;当输入密码不正确时,在数码管上显示字符“E”。
1.2具体要求
1〕.具有密码输入功能。
2〕.设置复位按键,以便重新输入新的密码。
3〕.在数码管上显示输入密码次数。
4〕.拒绝接受超过规定次数的密码输入信号。
5〕•当密码输入正确时,在数码管上显示字符“H';当密码输入不正确时,在数码管上显示字符“E”;
2系统整体架构
2.1设计思路
电子密码锁在生活中十分常见,在这我将设计一个具有较低成本的电子密码锁,本文讲述了我整个设计过程及收获。
讲述了电子密码锁的的工作原理以及各个模块的功能,并讲述了所有部分的设计思
路,对各部分电路方案的选择、元器件的筛选、以及对它们的调试、
对波形图的分析,到最后的总体图的分析。
2.2系统原理(包含:
框图等阐述)与设计说明等内容
用VHDL编写程序实现电子密码锁,其原理框图如图所示,程序中的时终信号elk为石英(32768Hz)分频后的8Hz标准信号,作为产生0.5s信号的输入信号。
七中k1k9为按键输入信号,k10作为复位按键。
当没有按键按下时连接到CPLD或FPGA勺信号k1k10都为高电平信号;当有按键按下时,k1〜k10的一个信号为低电平。
电子密码锁庚理框图4
电子密码锁采用状态机和对按键输入次数相结合的方法,保证只有输入正确的密码,状态机才能转换到最后正确的状态,显示开锁字符。
程序由7个进程组成,进程P1和P2将8Hz标准信号分频后,产
生0.5s脉冲信号(carry),与按键输入信号配合,消除按键输入的抖动,并作为状态转换进程P4的时终输入信号。
进程P3锁存按键输入信号,为状态机提供一个稳定的按键输入
信号。
进程P4将下一个状态(next_state)转换为当前状态(state)。
进程P5产生次态信号(next_state),只有当有按键输入和状态转移控制信号en为逻辑“1”时才能够产生次态信号。
进程P4和进程P5是电子密码锁的核心,密码的设置也是编写状态机时确定的。
进程P6对按键输入次数计数,并且为显示按键输入次数的7段译码
器BCD码数据。
进程P7判断按键输入次数是否已经输入3次,如果输入密码的次数小于等于3,状态转移控制信号en为逻辑“1”,否则为逻辑“0”。
当仍然有密码输入时,禁止状态发生变化,因此如果输入密码过程中,只要输入一个错误密码,就不可能转换到最后正确的状态。
BCD码-7段译码器显示按键输入次数和输入密码正确或者错误
2.3创新点与原创性内容
新增显示正确与错误功能
3系统设计(含HDL或原理图输入设计)
3.1HDL代码
Libraryieee;
.all
Useieee.std_logic_1164.all
Useieee.std_logic_arith
Entity
elockis
Port(clk,k1,k2,k3,k4,k5:
instd_logic;k6,k7,k8,k9,k10:
instd_logic;
row:
outstd_logic_vector(2downto0);led:
outstd_logic_vector(7downto0));endelock;
architecturebehavioralofelockis
signal
count:
std_logic_vector(1downto0);
signal
count1:
std_logic_vector(3downto0);
typestatesis(s4,s3,s2,s1,s0);
signal
state:
states:
=s0;
signal
next_state:
states:
=s0;
signal
en,carry,op,k11,k22,k33,k44,k55:
std_logic;
signal
k66,k77,k88,k99,k100:
std_logic;
signal
row1:
std_logic_vector(2downto0);
begin
p1:
process(clk)
begin
ifrising_edge(clk)thencount<=count+'1';
endif;
endprocessp1;
p2:
process(clk)
begin
ifrising_edge(clk)thenifcount="11"thencarry<='1';oelsecarry<='0';
endif;
endif;
endprocessp2;
p3:
process(carry,k1,k2,k3,k6,k9)ifrising_edge(carry)thenif(k1='0')thenk11<='0';
else
k11<='1';
endif;
if(k2='0')thenk22<='0';
else
k22<='1';endif;if(k3='0')
k33<='0';else
k33<='1';endif;if(k4='0')
k44<='0';else
k44<='1';endif;if(k5='0')
k55<='0';else
k55<='1';endif;if(k6='0')
k66<='0';else
k66<='1';
then
then
then
then
endif;
if(k7='0')then
k77<='0';
else
k77<='1';
endif;
if(k8='0')then
k88<='0';
else
k88<='1';
endif;
if(k9='0')then
k99<='0';
else
k99<='1';
endif;
if(k10='0')then
k100<='0';
else
k100<='1';
endif;
endif;
endprocessp3;
p4:
process(carry)
beginifrising_edge(carry)thenstate<=next_state;
endif;
endprocessp4;
p5:
process(state,k11,k22,k33,k44,k55,k66,k77,k88,k99,k100)begin
casestateiswhens0=>ifk33='0'anden='1'thennext_state<=s1;
op<='0';endif;
whens1=>ifk22='0'anden='1'thennext_state<=s2;
op<='0';
endif;whens2=>ifk11='0'anden='1'thennext_state<=s3;
op<='0';
endif;
whens3=>ifk66='0'anden='1'then
next_state<=s4;
op<='0';
endif;
whens4=>op<='1';
whenothers=>next_state<=s0;
endcase;
ifk100='0'then
next_state<=s0;
endif;
endprocessp5;
p6:
process(carry,k11,k22,k33,k44,k55,k66,k77,k88,k99,k100)begin
ifrising_edge(carry)then
ifk100='0'then
count1<="0000";
elsifop='1'then
count1<="1111";
elsif(en='0'andop='1')then
count1<="1110";
elsif(en='1'and(k11='0'ork22='0'ork33='0'ork44='0'ork55='0'ork66='0'ork77='0'ork88='0'ork99='0'))then
count1<=count1+1;
endif;endif;
endprocessp6;
p7:
process(count1)
begin
ifcount1<="011"then
En<='1';
else
En<='0';
endif;
endprocessp7;
--a,b,c,d,e,f,g,dp
withcount1select--7?
?
o?
?
?
?
—
led<="01100000"when"0001",--1
"11011010"when"0010",--2
"11110010"
when"0011",
--3
"01100110"
when"0100",
--4
"10110110"
when"0101",
--5
"10111110"
when"0110",
--6
"11100000"
when"0111",
--7
"11111110"
when"1000",
--8
"11110110"
when"1001",
--9
"01101110"
when"1111",
?
"10011110"
when"1110",
?
"11111100"
whenothers;
--0
row<-'101";--?
endbehavioral;
3.2系统整体电路图(或RTL级电路图)
ck
o
inst
4系统仿真(SimulationWaveform)
MkIetTimeBer:
IC.OnsdhRortsr?
皿声Intel1厨:
-Sflns张itEnd.
](.o
]ps10.
is30.(
Marie
10.[
0.5
j
I^D
dk
A
1
kl
訂
迪
A)
吹
b5
A)
吹
k4
25
h5
IL^i
kG
kT
吹
册
訂
ITS
15
IFlO
kLO
吾11
Ql«i
c>
!
.
[0]
■J20
Hnr
\
[0]
<1
12
5FPGA实现(FPGAImplementation)
建一个工程
建一个vhdl语言文本框和仿真
Diecw
kralijn
阿Goto
Resend
Gtolp
1
9dk
&put
PO
rL
•Id
Irpjt
PJNJl
3
>k2
lnpjt
PIN曰
•kJ
lip」:
PIN.68
5
Mk4
lnpjt
PIN65
6
Ek5
Inpj:
=[NH
7
▼k&
3H63
&
*U
刚:
3H62
9
Irput
3H.6l
10
ks
恤:
=\S8
11
恤;
3\5?
12
Cutput
ledp,.O]
13
tFlsd[6]
Culput
ledp,.O]
H
MledM
Cutput
RN.fi
ledp..O]
15
9m
Output
PWJ7
ledp,.O]
16
9led冋
Output
P1M9
ledp,.O]
17
Cutput PNfi lsd[? „O] 13 Mkc[l] Cutput PIN-SO ltd[? „D] 19 &kd[0] Cutput PINS5 唧川 ft怫田 Cirtput PINJO n»p..D] 21 Output =\21 减』] 22 Cvtimt RN22 曲』] 对系统进行设置,编译 1严」 >J /R^Hieiarehu1^1FilesDesignUnits T: : *x Flow: |Compi1ion▼ Typ>e |Mes3age b匕® 辱t to|@| 1 下载 6总结(Closing) 通过这次设计,使我对EDA产生了浓厚的兴趣。 特别是当每一个 子模块编写调试成功时,心里特别的开心。 在编写蜂鸣器模块时,我遇到了很大的困难,一直被定时问题所困扰,解决了这个问题时,我特别的高兴。 写控制文件的程序时,也遇到了不少问题,特别是各元件之间的连接,以及信号的定义,总是有错误,在细心的检查下,终于找出了错误和警告,排除困难后,程序编译就通过了。 再对控制模块仿真时,虽然语法正确,但连最基本的输入输出都进不去,我们弄了很多遍都不行,后来在老师的指导下我们才解决了这个问题。 另一个问题就是三个时钟信号的配合,其中显示模块和控制模块的信号频率要高。 其次,在进行引脚连接时一定要细心,有些引脚不能使用,我因为没注意使得开始时一直不能得到正确的结果。 这次EDA课程设计历时两个星期,在整整两个星期的日子里,可以说是苦多于甜,但是可以学的到很多很多的东西,同时不仅可以巩固以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。 通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。 在设计的过程中遇到的问题,反映出来我的许多不足之处,我以后要努力克服缺点。 总的来说,这次设计的密码锁还是比较成功的,在设计中遇到了很多问题,最后在同学和老师的辛勤的指导下外加上自己的努力,终于都得到了解决,因此很有意义,终于觉得平时所学的知识有了实用的价值,达到了理论与实际相结合的目的。 参考书目(Reference): [1]阎石主编.《数字电子技术基础》(第五版).高等教等育出版社.,2007 [2]李国丽朱维勇何剑春.《EDA与数字系统设计》(第2版).机械工业出版社.,2002 [3]宋武烈,等.《EDA技术实用教程》.湖北科学技术出版社,2006 [4]谭会生,等.《EDA技术综合应用实例与分析》.西安电子科技出版 社,2003
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 FPGA 数字 系统 设计