版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、電子與信息工程學院eda課程設計報告( 2011 2012 學年 第 一 學期)課程設計題目:四位密碼鎖內容和要求:1. 掌握vhdl語言的使用,學會用vhdl語言來編程解決實際問題;2. 學會使用eda開發(fā)軟件設計小型綜合電路,掌握仿真的技巧;3. 學會應用開發(fā)系統(tǒng)實現(xiàn)硬件電路,檢驗電路的功能。設計內容(原理圖以及相關說明、調試過程、結果)實驗目的:1. 掌握vhdl語言的使用,學會用vhdl語言來編程解決實際問題;2. 學會使用eda開發(fā)軟件設計小型綜合電路,掌握仿真的技巧;3. 學會應用開發(fā)系統(tǒng)實現(xiàn)硬件電路,檢驗電路的功能。實驗要求:用vhdl語言設計一個密碼鎖,用波形仿真驗證其功能后,
2、實現(xiàn)到gw48實驗系統(tǒng)。功能描述:用于模仿密碼鎖的工作過程。完成密碼鎖的核心控制功能。功能要求:設計一個密碼鎖,平時處于等待狀態(tài)。管理員可以設置或更改密碼。如果不預置密碼,密碼缺省為“1234”。用戶如果需要開鎖,按相應的按鍵進入輸入密碼狀態(tài),輸入4位密碼,按下確定鍵后,若密碼正確,鎖打開;若密碼錯誤,將提示密碼錯誤,要求重新輸入,三次輸入都錯誤,將發(fā)出報警信號。報警后,只有管理員作相應的處理才能停止報警。用戶輸入密碼時,若輸入錯誤,在按下確定鍵之前,可以通過按取消鍵重新輸入。正確開鎖后,用戶處理完畢后,按下確定鍵,系統(tǒng)回到等待狀態(tài)。系統(tǒng)操作過程中,只要密碼鎖沒有打開,如果60秒沒有對系統(tǒng)操作
3、,系統(tǒng)回到等待狀態(tài)。要求密碼在輸入過程中被依次顯示,即先輸入的為密碼的第一位,總是顯示在最左邊。用兩個發(fā)光二極管模擬顯示,其中一個顯示當前的工作模式,滅表示用戶模式,亮表示管理員模式;另外一個指示鎖的狀態(tài),滅表示鎖處于鎖定,亮表示鎖被開啟。注意:用兩個按鍵實現(xiàn)密碼輸入,key1選擇輸入的是第幾位密碼,key2輸入密碼數(shù)字。功能描述:初始狀態(tài):初次使用密碼鎖時,要先用reset鍵初始化。初始狀態(tài)下,用戶密碼為“1234”,管理員密碼為“0000”。用戶開鎖:默認情況下,密碼鎖處于用戶使用狀態(tài)。如果當前為管理員狀態(tài),則按下user鍵回到用戶狀態(tài)。用戶開鎖時,輸入四位數(shù)用戶密碼,可以從out_cod
4、e6的輸出狀態(tài)確定密碼輸入狀態(tài)。如輸入錯誤則按下clear清除前一位輸入。輸入完畢后按enter,如果密碼正確,則開鎖,否則重新輸入密碼。開鎖后再次按下enter鍵則關鎖,回到等待狀態(tài)。三次密碼輸入錯誤,警報器alarming為1。要管理員輸入管理員密碼解除警報。此時哪怕用戶再輸對密碼也沒用。管理員解除警報:當用戶三次密碼輸入錯誤的時候,alarming為1,此時,只要管理員密碼輸入正確后,按下clear鍵,alarming為0,報警取消。管理員修改密碼:在非警報和為開鎖狀態(tài)下,任何時候按admin鍵進入管理員狀態(tài)。按chgcode選擇修改密碼,先選擇修改的是用戶密碼還是管理員密碼。修改用戶密
5、碼則按user鍵,修改管理員密碼則按admin鍵。然后分別輸入舊密碼,新密碼,新密碼要輸入兩次。舊密碼與所要修改的密碼對應。如舊密碼輸入錯誤,則無法修改;當驗證不成功即兩次新密碼不相同時,修改密碼失敗。返回等待狀態(tài)。成功后也返回等待狀態(tài)。定時返回:用戶在未開鎖狀態(tài)下,60s沒有按鍵輸入,則返回等待狀態(tài),但不包括alarming狀態(tài)。只要是alarming,則只有管理輸入管理員密碼才能解鎖并按下clear消除警報。設計思路:設計密碼鎖時,采用自頂向下的設計方法。將整個系統(tǒng)分成幾個子模塊:輸入輸出模塊,控制模塊,按鍵設置模塊和60s計時器模塊。 控制模塊是整個程序的主要部分,采用狀態(tài)循環(huán)的辦法,以
6、用戶每按下一次按鍵為計量單位,劃分狀態(tài),以實現(xiàn)各種功能。60s計時器模塊是完成60s沒有按鍵則返回等待狀態(tài)這一功能的主要模塊。這個模塊的核心思想是一個變量numtime計數(shù)。變量numtime的初始值為0,在無報警為開鎖的情況下,時鐘每秒發(fā)出一個上升沿信號,計數(shù)一次,如有按鍵則numtime清零,否則計數(shù)到60即“111100”則返回信號back變?yōu)?,返回等待狀態(tài)。按鍵設置模塊是將各種功能按鍵用高低電平賦值,便于調用。 eda設計方法(1) 前端設計(系統(tǒng)建模rtl 級描述)后端設計(fpgaasic)系統(tǒng)建模 (2) ip 復用 (3) 前端設計 (4) 系統(tǒng)描述:建立系統(tǒng)的數(shù)學模型。 (
7、5) 功能描述:描述系統(tǒng)的行為或各子模塊之間的數(shù)據(jù)流圖。 (6) 邏輯設計:將系統(tǒng)功能結構化,通常以文本、原理圖、邏輯圖、 布爾表達式來表示設計結果。 (7) 仿真:包括功能仿真和時序仿真,主要驗證系統(tǒng)功能的正確性及時序 特性。 按照設計要求編寫代碼如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity e_lock is port( clk,user,admin,clear,enter,chgcode,res,key1,key
8、2:in std_logic; num:in std_logic_vector(9 downto 0); openlock:buffer std_logic; alarming,o_ua,o_chgcode,chgcode_ua:out std_logic; out_code4:out std_logic_vector(3downto 0) ); end e_lock;architecture behave of e_lock istype states is (ss,sw,s0,s1,s2,s3,s4,s5,s6,s7);signal state:states;signal one_key,
9、code0,code1,code2,code3:std_logic_vector(3 downto 0);signal user_code,admin_code:std_logic_vector(15 downto 0); -用戶密碼 管理員密碼signal temp_code,old_code:std_logic_vector(15 downto 0); -當前密碼 舊密碼signal new_ctime:std_logic_vector(1 downto 0);signal key:std_logic_vector(7 downto 0);signal alarm,inkey,ifnum,
10、s_ua,chg_c,c_ua,back:std_logic;signal out_code:std_logic_vector(3 downto 0);signal numtime:std_logic_vector(9 downto 0);begin temp_code=code0&code1&code2&code3; key=user&admin&chgcode&enter&clear&res&key1&key2; inkey=user or admin or chgcode or enter or clear or key1 or key2; ifnum=not(one_key(3) an
11、d (one_key(2) or one_key(1); -ifnum=1,the key is a num o_ua=s_ua;-表明當前狀態(tài)為管理員或是用戶 chgcode_ua=c_ua;-表明當前更改的密碼為用戶密碼或是管理員密碼 o_chgcode=chg_c;-當狀態(tài)為“1”時表明正在修改密碼 out_code4=out_code; alarming=alarm; main:process(res,clk) variable n,m:std_logic_vector(1 downto 0):=00; variable new1_code,new2_code:std_logic_ve
12、ctor(15 downto 0); begin if (res=1)then state=ss;-出廠狀態(tài),用來初始化密碼鎖的各項設置 user_code=0001001000110100;-1234 admin_code=0000000000000000;-0000 n:=00; s_ua=0; c_ua=0; chg_c=0; new_ctime=00; alarm state if back=1 then state=sw; elsif (ifnum=1 and alarm=0 and chg_c=0 ) then code3=one_key; out_code=0001; state
13、=s1; elsif (ifnum=1 and c_ua=0 and chg_c=1 ) then old_code=user_code; code3=one_key; out_code=0001; state=s1; elsif (ifnum=1 and alarm=1 and s_ua=1 and chg_c=0 ) then code3=one_key; out_code=0001; state=s1; elsif (ifnum=1 and c_ua=1 and chg_c=1 ) then old_code=admin_code; code3=one_key; out_code=000
14、1; state=s1; elsif (one_key=0011and chg_c=0 )then s_ua=1; state=s0; elsif (one_key=0100and chg_c=0 and alarm=0) then s_ua=0; state if back=1 then state=sw; elsif(ifnum=1)then code2=one_key; out_code=0011; state=s2; elsif (one_key=0000)then -clear out_code=0000; state=s0; elsif (one_key=0100 and chg_
15、c=0) then -user out_code=0000; s_ua=0; state=s0; elsif (one_key=0011 and chg_c=0) then -admin out_code=0000; s_ua=1; state if back=1 then state=sw; elsif(ifnum=1)then code1=one_key; out_code=0111; state=s3; elsif (one_key=0000)then out_code=0001; state=s1; elsif (one_key=0100 and chg_c=0) then out_c
16、ode=0000; s_ua=0; state=s0; elsif (one_key=0011 and chg_c=0) then out_code=0000; s_ua=1; state if back=1 then state=sw; elsif(ifnum=1)then code0=one_key; out_code=1111; state=s4; elsif (one_key=0000)then out_code=0011; state=s2; elsif (one_key=0100 and chg_c=0) then out_code=0000; s_ua=0; state=s0;
17、elsif (one_key=0011 and chg_c=0) then out_code=0000; s_ua=1; state if back=1 then state=sw; elsif (one_key=0001 and chg_c=0)then -enter state=s5; out_code=0000; elsif (one_key=0001 and chg_c=1and m=00)then -enter out_code=0000; if (old_code=temp_code) then m:=01; state=s0; else state=sw; end if; els
18、if (one_key=0001 and chg_c=1and m=01)then -enter out_code=0000; new1_code:=temp_code; m:=10; state=s0; elsif (one_key=0001 and chg_c=1and m=10)then -enter out_code=0000; new2_code:=temp_code; if (new1_code=new2_code and c_ua=0) then user_code=new2_code; state=sw; elsif(new1_code=new2_code and c_ua=1
19、)then admin_code=new2_code; state=sw; elsif(new1_code/=new2_code) then state=sw; end if; elsif (one_key=0000)then -clear out_code=0111; state if (s_ua=0 and temp_code=user_code) then openlock=1; state=s6; elsif (s_ua=0and temp_code/=user_code) then n:=n+1; if n=11 then alarm=1; state=s0; out_code=00
20、00; else state=s0; out_code=0000; end if; elsif (s_ua=1 and temp_code=admin_code) then state=s6; elsif(s_ua=1 and temp_code/=admin_code) then state if back=1 then state=sw; elsif(one_key=0001)then-enter state=sw; elsif(one_key=0000and alarm=1) then -clear alarm=0; state=s0; out_code=0000; elsif(one_
21、key=0010) then chg_c=1; state m:=00; if back=1 then state=sw; elsif(one_key=0100)then c_ua=0; old_code=user_code; state=s0; elsif(one_key=0011)then c_ua=1; old_code=admin_code; state alarm=0; s_ua=0; c_ua=0; m:=00; n:=00; openlock=0; out_code=0000; chg_c=0; stateone_keyone_keyone_keyone_keyone_keyone_keyone_keyone_keyone_key=1111; end case; end if;end process input;process(inkey,res,clk,alarm,openlock)variable numtime:std_logic_vector(5 downto 0):=000000;beginif(res=1) then numtime:=000000; back=0;elsif (openlock=1 or inkey=1)or alarm=1) then
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 交通事故委托合同
- 2024年螺絲用冷鐓鋼絲項目可行性研究報告
- 《簡愛》讀書筆記集錦15篇
- 學生會副主席競選演講稿集錦15篇
- 乒乓球比賽作文300字匯編九篇
- 個人租房合同
- 2024年稀土三基色電子節(jié)能燈項目可行性研究報告
- 審計業(yè)務合同范本
- 北京信息科技大學《中國音樂史與名作賞析》2023-2024學年第一學期期末試卷
- 北京信息科技大學《電化學原理及研究方法》2023-2024學年第一學期期末試卷
- 社區(qū)矯正專業(yè)人員的培訓
- 安全隱患規(guī)范依據(jù)查詢手冊22大類12萬字
- 律師生涯發(fā)展報告
- 一般工傷事故處理工作流程圖
- 臨床麻醉學試卷及答案
- 混合性焦慮和抑郁障礙的護理查房
- MOOC 發(fā)展心理學-北京大學 中國大學慕課答案
- 克羅恩病病例分享
- 《養(yǎng)老護理員》-課件:協(xié)助老年人轉換體位
- 山東省高中生物教學大綱
- 2024中考語文《水滸傳》歷年真題(解析版)
評論
0/150
提交評論