CPLD_FPGA设计及应用课程设计--数字密码锁.doc

上传人:good****022 文档编号:116646068 上传时间:2022-07-06 格式:DOC 页数:23 大小:9.76MB
返回 下载 相关 举报
CPLD_FPGA设计及应用课程设计--数字密码锁.doc_第1页
第1页 / 共23页
CPLD_FPGA设计及应用课程设计--数字密码锁.doc_第2页
第2页 / 共23页
CPLD_FPGA设计及应用课程设计--数字密码锁.doc_第3页
第3页 / 共23页
点击查看更多>>
资源描述
CPLD/FPGA设计及应用课程设计课程设计报告题 目: 数字密码锁 院 (系): 信息科学与工程学院 专业班级: xxxxxxxx 学生姓名: xxxxx 学 号: xxxxxxxxxx 指导教师: xxxx 20 16年 4 月 11 日至20 16 年 5 月 6 日武昌首义学院制CPLD/FPGA设计及应用课程设计任务书一、设计题目数字密码锁。二、设计主要内容1. 掌握睿智FPGA开发板的基本构造和功能,并能设计一些简单的功能。2. 学会用VHDL语言来设计一些基本的逻辑模块。3. 了解时序逻辑的设计方式,并运用在密码锁的设计上。4. 精通数字编码,AD/DA方式在程序中的运作方式。5. 状态机的使用,实现密码比对和储存读取功能。三、原始资料1. CPLD/FPGA设计及应用实验指导书 -马玲;2. CPLD/FPGA设计及应用马玲,彭敏;四、要求的设计成果1. 熟练运用QuartusII来设计逻辑时序的模块;2. 熟悉设计一个成果的过程;3. 更深一步的学习VHDL语言;4. 运用FPGA开发板设计数字密码锁,并具备消隐、设置密码和三次报错的功能。五、进程安排第1天:老师讲解课程设计目的、意义,布置课题任务,学生分组选题。第2天:学生根据所选课题自己下去通过网络或者其他途径寻找课题相关设计资料。第3-7天:在实验室或者自己的电脑上完成课题的程序以及相关的功能仿真通过。第8天:在实验室结合EDA实验箱完成程序的调试以及功能的实现。第9天:通过老师的验收并回答老师的提问。第10天:下去完成课程设计报告。六、主要参考资料1. CPLD/FPGA设计及应用实验指导书 -马玲;2. CPLD/FPGA设计及应用马玲,彭敏;指导教师(签名): 2016 年 4 月 10 日目 录1课程设计目的52课程设计题目描述和要求 53课程设计报告内容53.1设计思路及原理 53.2设计需要解决的问题 53.3设计过程 64总结115.附录 124数字密码锁设计1. 课程设计目的l 设计一个四位十进制的密码锁。l 跟深一步的理解FPGA的用途,精通相应的开发板。2. 课程设计题目描述和要求a) :密码锁串行输入四位十进制数字口令b) :输入口令全部正确即开锁c) :口令输入最大次数3次,要求在完全输入四位之后进行判断口令正确与否;输入3次之后还不能开锁,进入锁死状态d) 有相应的显示功能e) 可以对输入的口令消隐f) 开锁后能再次上锁3. 课程设计报告的内容1) 设计思路及原理i. 密码锁原理利用逻辑电路将外接输入的电信号转化为时序电路,经过内部设定的规则,当输入的信号经过处理后的时序逻辑达到内部设定的条件是开启某一种状态及时解锁状态,当没达到那种条件时始终保持一种或多种状态。ii. 密码锁的设计要求 设计密码锁的系统描述:数字密码锁在设定口令和开锁时要求输入四位十进制数据,当输入状态开启时,输入正确显示一种状态,如果错误则显示错误次数加1,累计3次锁死状态并报警,如果不输入则一直保持原来状态;当检测到储存状态时,输入密码并存储改变原有的储存密码;当检测到消隐信号时,将不显示输入的数据。 2) 设计中需要解决的问题01. 时钟扫描读取输入的信号:过小,还没检测到就进入下次判断或者多记一次,过大,响应过慢,加上消斗模块后容易引起码间干扰不易读取信号02. 密码读取:读入按键开关信号要将信号处理编码送入显示和密码比较状态03. 密码比较:首先是要将存入的数字进行存储和逻辑排序,然后将输入的数据进行一一比对,并进行计数,正确与否输出状态信号04. 显示模块:将输入模式、开锁状态、密码存储状态和锁死状态等的显示状态显示的编码05. 开发板引脚的配置等3) 设计过程l 密码锁的系统描述a) 输入输出端口定义:Sdin:输入十进制数信号按键(由于按键不够,将09数据以按键按下次数来编译)Lock:上锁按键Sec:解锁按键Clr:确认按键Set:密码存储按键Crack:开锁状态按键Clk:输入数字确定按键Dout:送现输出信号端Yn:选码信号S3锁死b) 系统状态转换图S2错误S1解锁 错误 累计次数=3 解锁 错误次数3S0初始S4开锁 密码正确设置 上锁c) 编码规则输入信号编码信号逻辑意义000011000000数字“0”000111111001数字“1”001010100100数字“2”001110110000数字“3”010010011011数字“4”010110010010数字“5”011010000010数字“6”011111111000数字“7”100010000000数字“8”100110010000数字“9”101011101111解锁成功“A”101101111111解锁失败Others11111111其他状态01-11000000上锁状态10-00011000解锁状态l 时钟模块 由于输入时钟是50MHZ,一般扫描频率一般1000HZ左右,过50分频得到1M的频率后经过后续得到两路时钟来分别接入按键和比对模块。l 输入设置输入模块,由于进行消斗处理用D触发器来消抖动,将输入的信号送入输出,时序时钟推迟一个周期。l 计数模块和按键累积计数将输入的信号进行A/D转换,根据确认按键的输入来计数时序,将输入的3个数字按顺序送入下个模块;计数模块达到3次输出alert报警。l 编码和处理模块将输入的十进制信号转化成断码,将时序逻辑进行编码来选码管。l 选码模块将时序信号进行编码。4) 设计得到的成果及现象l 得到的总体结构:l 引脚配置:l 实物图:1. 初始状态:2. 解锁状态:3. 上锁状态:4. 总结l 在这次课设中虽然遇到很多麻烦,刚刚开始用自己的方法编写了个简单的密码比对,但缺乏很多功能,而且在消斗方面很不完善,容易属错误,现象出不来,后来网上搜了一个,但由于时钟没有完善,所以出错,后来看懂了也可以调,但各个模块的时钟不一,所以难以完善,后来看了指导书上才做出来。l 在VHDL语言上有了很大的完善和提高,对基本的设计都应该没问题了,但还需要努力。l 在设计过程中需要细心、冷静。5. 附页(程序)50分频:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity PIN1M isport(clkin:in std_logic; clkout:out std_logic);end entity PIN1M;architecture bj of PIN1M isbeginprocess(clkin)variable cnttemp : INTEGER RANGE 0 To 49;begin if clkinevent and clkin=1 then if cnttemp=49 then cnttemp:=0; else if cnttemp25 then clkout=1; else clkout=0;end if;cnttemp:=cnttemp+1; end if; end if;end process;end bj;时钟分频:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity fdiv isport(clk:in std_logic; divout:out std_logic);end entity fdiv;architecture bj of fdiv issignal d:std_logic_vector(3 downto 0);signal o: std_logic;beginprocess(clk)begin if clkevent and clk=1 then if d=1001 then d=0000;o=not o; else d=d+1; end if; divout=o; end if;end process;end bj;触发器:LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY Dchu IS PORT (trig,sdin,lock,sec,clr,set,crack:IN STD_LOGIC; sdin1,lock1,sec1,clr1,set1,crack1:OUT STD_LOGIC); END; ARCHITECTURE FFQ OF Dchu IS SIGNAL Q1,Q2,Q3,Q4,Q5,Q6:STD_LOGIC; BEGIN PROCESS (Q1,Q2,Q3,Q4,Q5,Q6,trig) BEGIN IF trigEVENT AND trig=1 THEN Q1=sdin; Q2=lock; Q3=sec; Q4=clr; Q5=set; Q6=crack; END IF; END PROCESS; sdin1=Q1; lock1=Q2; sec1=Q3; clr1=Q4; set1=Q5; crack1=Q6; END FFQ;编码计数模块:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity s_pw isport(SDIN:in std_logic; trig:in std_logic; lock:in std_logic; sec:in std_logic; CR:in std_logic; SET:in std_logic; CRACK:in std_logic; din:out INTEGER RANGE 15 DOWNTO 0; n_err:out std_logic_vector(1 downto 0); n_cr:out std_logic_vector(1 downto 0); ALERT:out std_logic; lock_out:out std_logic; sc:out std_logic; dead_lock:out std_logic);end entity s_pw;architecture bj of s_pw issignal pW_reg0:INTEGER RANGE 15 DOWNTO 0;signal pW_reg1:INTEGER RANGE 15 DOWNTO 0;signal pW_reg2:INTEGER RANGE 15 DOWNTO 0;signal pW_reg3:INTEGER RANGE 15 DOWNTO 0;signal pc_reg0:INTEGER RANGE 15 DOWNTO 0;signal pc_reg1:INTEGER RANGE 15 DOWNTO 0;signal pc_reg2:INTEGER RANGE 15 DOWNTO 0;signal pc_reg3:INTEGER RANGE 15 DOWNTO 0;signal data_cnt:INTEGER RANGE 15 DOWNTO 0;signal cr_cnt: std_logic_vector(1 downto 0);signal err_cnt: std_logic_vector(1 downto 0);signal tag: std_logic;signal sb: std_logic;signal bff:INTEGER RANGE 15 DOWNTO 0;beginprocess(trig)beginif trigevent and trig=1 then if sec=0 then sb=not sb;sc=sb;end if; if lock=0 then lock_out=0;end if; if tag=1 then din=11; else if SDIN=0 then din=data_cnt; if data_cnt=9 then data_cnt=0; else data_cntpW_reg0=data_cnt;cr_cntpW_reg1=data_cnt;cr_cntpW_reg2=data_cnt;cr_cntpW_reg3=data_cnt;cr_cnt=cr_cnt+1;lock_outpw_reg0pc_reg0=data_cnt;cr_cntpc_reg1=data_cnt;cr_cntpc_reg2=data_cnt;cr_cntcr_cnt=cr_cnt+1; if(pc_reg0=pw_reg0) then if(pc_reg1=pw_reg1) then if(pc_reg2=pw_reg2) then if(data_cnt=pw_reg3) then din= 10;err_cnt=00; lock_out=1; else err_cnt=err_cnt+1; end if; else err_cnt=err_cnt+1;end if; else err_cnt=err_cnt+1; end if; else err_cntALERTtagtagtagtag=1;ALERTtag=1;ALERT=1; end case; n_cr=cr_cnt; n_err=err_cnt; end if; dead_lock=tag;end process;end bj;编码送显:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity DIS isport(din:in std_logic_vector(3 downto 0); cr_cnt:in std_logic_vector(1 downto 0); err_cnt:in std_logic_vector(1 downto 0); set_crack:in std_logic_vector(1 downto 0); disclk:in std_logic; sec:in std_logic; lock:in std_logic; dout:out std_logic_vector(7 downto 0); encode:out std_logic_vector(2 downto 0);end entity DIS;architecture bj of DIS issignal cnt:std_logic_vector(2 downto 0);signal c: std_logic;beginprocess(din,c,disclk)begin if disclkevent and disclk=1 then if cnt=100 then cnt =000;else cnt=cnt+1;end if;if cnt=000 then encodedoutdoutdoutdoutdoutdoutdoutdoutdoutdoutdoutdoutdout=11111111; end case;else dout=00000000; end if; else if cnt=001 then encodedoutdoutdoutdoutNULL; end case; else if cnt=010 then encode doutdoutdoutdoutNULL; end case; else if cnt=011 then encodedoutdoutdout=10111111; end case; else if cnt=100 then encode=100; if lock=0 then dout =00000001; else dout=11111111; end if; end if; end if; end if; end if; end if; end if;end process;process(sec)begin if secevent and sec=1 then c=not c; end if; end process;end bj;课程设计成绩评定表成绩评定项 目比例得 分平时成绩(百分制记分)30%业务考核成绩(百分制记分)70%总评成绩(百分制记分)100%评定等级优 良 中 及格 不及格指导教师(签名):20 年 月 日23
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 金融资料


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!