【正文】
ITUE2(3 DOWNTO 0)=MINI2(3 DOWNTO 0)。139。039。 SEC2=0000。 ELSE SEC2=0000。 END IF 。 SECOND2 : IN STD_LOGIC_VECTOR(3 DOWNTO 0)。 JISHI(3 DOWNTO 0)=MINITUE2。 BEGIN PROCESS (BCD) BEGIN IF BCD=0000000000000000 THEN ING=39。 ELSE IF BCD=0100000000000000 THEN ING=39。 ELSE IF BCD=0001000000110000 THEN ING=39。 END IF 。 END IF 。 USE 。 SIGNAL DATA: STD_LOGIC_VECTOR(3 DOWNTO 0)。CLK_1K=39。 VARIABLE CNT: INTEGER RANGE 0 TO 2500000 。 DATA=MINITUE2。 PROCESS(CLK_1K) VARIABLE CNT2: STD_LOGIC_VECTOR(3 DOWNTO 0)。039。 END DISPLAY。 XIAN SHI MO KUAI LIBRARY IEEE。 END IF 。 ELSE IF BCD=0100000000110000 THEN ING=39。 IF BCD=0000000000110000 THEN ING=39。 ELSE IF BCD=0011000000000000 THEN ING=39。 END FENGMING。 JISHI(11 DOWNTO 8)=SECOND2。 USE 。 END IF 。 ELSE SEC1=0000。 THEN MINI2 =0000。 ELSE CNT :=0 。139。 SIGNAL MINI1,MINI2:STD_LOGIC_VECTOR(3 DOWNTO 0 )。 USE 。 END IF。 ELSE IF YOU1=0101 THEN ZQ=SOUT3(4)。 END IF。 ELSE IF YOU1=0110 THEN LJ=REST(5)。 ZQ:OUT STD_LOGIC。 YOU1=YOU。 END IF 。 ELSE IF SOUT(6)=39。139。 THEN YOU=0001。 USE 。039。 END IF。 IF REST(6)=39。139。 AND SIN(4)=39。139。 THEN SOUT(2)=39。139。 ELSE SOUT(0)=39。 END SUOCUNQI。 END ARCHITECTURE F1。 SIGNAL K : STD_LOGIC_VECTOR ( 3 DOWNTO 0 ) 。 SIGNAL C : STD_LOGIC。 END COMPONENT 。 COMPONENT SOU PORT (SECOND1 : IN STD_LOGIC_VECTOR(3 DOWNTO 0)。 SOUT3:IN STD_LOGIC_VECTOR(7 DOWNTO 0) 。 SOUT3:OUT STD_LOGIC_VECTOR(7 DOWNTO 0) )。 SCOUT: OUT STD_LOGIC_VECTOR(7 DOWNTO 0)。通過這次的課程設(shè)計(jì),使我對(duì) FPGA 的設(shè)計(jì)有了更加直觀的認(rèn)識(shí),雖然這次的設(shè)計(jì)不是很完美,但在以后的學(xué)習(xí)中我會(huì)去完善它的。 U6 : FENGMING PORT MAP ( BCD = B , MING = MING_out )。 SIGNAL I : STD_LOGIC_VECTOR ( 3 DOWNTO 0 ) 。 SIGNAL A : STD_LOGIC_VECTOR ( 7 DOWNTO 0 ) 。 COMPONENT FENGMING PORT (BCD: IN STD_LOGIC_VECTOR(15 DOWNTO 0)。 SECOND1,SECOND2,MINITUE1,MINITUE2:OUT STD_LOGIC_VECTOR(3 DOWNTO 0))。 COMPONENT HUANYOU2 PORT (REST:IN STD_LOGIC_VECTOR(7 DOWNTO 0)。 SOUT1:OUT STD_LOGIC_VECTOR(7 DOWNTO 0)。 CLK_ain : IN STD_LOGIC。 MING=ING。 END IF 。039。039。039。 USE 。 ARCHITECTURE ONE OF SOU IS BEGIN JISHI(15 DOWNTO 12)=SECOND1。 程序: LIBRARY IEEE。—— 橫杠 WHEN 1011=DISP=10111111 ?!?2 WHEN 0011=DISP=10110000 。 END IF。 ELSE IF CNT2 =0101 THEN LEDCS=00000001。 IF CNT2 =0001 THEN LEDCS=00010000。 END IF。 IF CNT 10000 THEN CLK_1K=39。 SECOND1,SECOND2,MINITUE1,MINITUE2:IN STD_LOGIC_VECTOR(3 DOWNTO 0) 。 END PROCESS。 IF MINI20101 THEN MINI2=MINI2+1。EVENT AND TIMECLK =39。 END IF。139。 PROCESS(CLK,SP) VARIABLE CNT : integer range 0 to 120 。 ARCHITECTURE TWO OF TIME1 IS SIGNAL TIMECLK:STD_LOGIC。 END TWO 。 基于 FPGA 的病房呼叫系統(tǒng)的設(shè)計(jì) 9 END IF 。 THEN IF SEC11001 THEN SEC1=SEC1+1。039。 ELSE CNT :=0 。139。 SIGNAL MINI1,MINI2:STD_LOGIC_VECTOR(3 DOWNTO 0 )。 程序一: LIBRARY IEEE。 END IF。 ELSE IF YOU1=0101 THEN ZQ=SOUT3(4)。 END IF。 ELSE IF YOU1=0110 THEN LJ=REST(5)。 ZQ:OUT STD_LOGIC。 END ARCHITECTURE。 END IF 。 THEN YOU=0111。 ELSE IF SOUT(4)=39。139。 YOU1:OUT STD_LOGIC_VECTOR(3 DOWNTO 0)。 SOUT2=SOUT。139。 THEN SOUT(6)=39。139。 ELSE SOUT(4)=39。039。 END IF。 IF REST(2)=39。139。 AND SIN(0)=39。 —— 輸入信號(hào) SIN:IN STD_LOGIC_VECTOR (7 DOWNTO 0)。 基于 FPGA 的病房呼叫系統(tǒng)的設(shè)計(jì) 2 3 模塊的劃分及各模塊的功能實(shí)現(xiàn) 模塊的劃分 ? 對(duì)病房呼叫的信號(hào) 進(jìn)行存儲(chǔ)并處理信號(hào),這就需要一個(gè)對(duì)信號(hào)進(jìn)行存儲(chǔ)的鎖存器; ? 對(duì)發(fā)出的信號(hào)進(jìn)行優(yōu)先選擇,就需要一個(gè)數(shù)據(jù)選擇器; ? 對(duì)時(shí)間控制信號(hào)的優(yōu)先選擇,使數(shù)碼管可以顯示優(yōu)先級(jí)最高的信號(hào)時(shí)間,又需要一個(gè)數(shù)據(jù)選擇器; ? 顯示時(shí)間,并對(duì)其進(jìn)行計(jì)時(shí),需要一個(gè)計(jì)時(shí)器; ? 用七段數(shù)碼管 顯示時(shí)間 ,需要一個(gè)可以驅(qū)動(dòng)七段數(shù)碼管的顯示器 ; ? 蜂鳴,就需要一個(gè)蜂鳴器; ? 在設(shè)計(jì)變成的過程中, 計(jì)時(shí)器與蜂鳴器的位寬不同,有需要一個(gè)轉(zhuǎn)換連接的連接器。 關(guān)鍵字: 病房呼叫,系統(tǒng), FPGA,模塊, VHDL 1 原理 假設(shè)有 8 個(gè)病房,即有八個(gè)信號(hào)輸入 ,同時(shí)要有時(shí)間顯示與聲音提示。 來實(shí)現(xiàn)病房呼叫系統(tǒng)的功能實(shí)現(xiàn)。 原理圖: 2 方案論證 我對(duì)這個(gè)設(shè)計(jì)開始 和現(xiàn)在所用的設(shè)計(jì)不同的方案,但在頂層設(shè)計(jì)時(shí)發(fā)現(xiàn)并不好實(shí)現(xiàn),中間的信號(hào)太多太龐雜,連接起來比較復(fù)雜,但在后續(xù)編輯中沒有預(yù)期的效果,在多次調(diào)試仿真中無法得到想要的結(jié)果,所以我選擇了排除錯(cuò)誤,首先從自身下手 ,對(duì)每個(gè)模塊進(jìn)行單獨(dú)設(shè)計(jì),利用 VHDL 語言的可移植性,應(yīng)用原件例化語句將模塊連接起來,通過例化后的電路圖與原理圖進(jìn)行比較,看是否有連錯(cuò)等問題。 ENTITY SUOCUNQI IS PORT( REST:IN STD_LOGIC_VECTOR(7 DOWNTO 0)。139。 IF REST(1)=39。 END IF。039。 ELSE SOUT(3)=39。139。 THEN SOUT(5)=39。139。 AND SIN(7)=39。 SOUT1=SOUT。 ENTITY HUANYOU IS PORT(SOUT:IN STD_LOGIC_VECTOR(7 DOWNTO 0)。 復(fù)位后的波形 基于 FPGA 的病房呼叫系統(tǒng)的設(shè)計(jì) 5 ELSE IF SOUT(1)=39。 THEN YOU=0100。139。 END IF 。 YOU2=YOU。 SOUT3:IN STD_LOGIC_VECTOR(7 DOWNTO 0) 。 ELSE IF YOU1=0101 THEN LJ=REST(4)。 END IF。 ELSE IF YOU1=0100 THEN ZQ=SOUT3(3)。 END IF。 程序一和程序二的功能相同,程序一采用兩個(gè) PROCESS 語句,程序一只用了一個(gè) PROCESS語句,但在頂層設(shè)計(jì)時(shí)程序 一中的第二個(gè) PROCESS 語句沒有執(zhí)行,所以在頂層設(shè)計(jì)中采用的是程序二。 SIGNAL SEC1,SEC2:STD_LOGIC_VECTOR(3 DOWNTO 0 )。EVENT AND CLK =39。039。 PROCESS (TIMECLK,REST) BEGIN IF REST=39。139。 ELSE MINI2=0000。 END PROCESS 。 END TIME1。 SECOND2(3 DOWNTO 0 )=SEC2(3 DOWNTO 0)。 IF CNT 60 THEN TIMECLK=39。 END IF。 ELSE IF TIMECLK39。 ELSE MINI1=0000。 END IF。 ENTITY DISPLAY IS PORT(CLK:IN STD_LOGIC?!?1k 的掃描信號(hào) BEGIN IF RISING_EDGE(CLK) THEN CNT:=CNT+1。 分 個(gè)位 分 十位 秒 個(gè)位 秒 十位 基于 FPGA 的病房呼叫系統(tǒng)的設(shè)計(jì) 12 END IF。 THEN CNT2 := CNT2 +1。 DATA=SECOND2。 END IF?!?1 WHEN 0010=DISP=10100100 ?!?9 WHEN 1010=DISP=10111111 。連接模塊的輸出部分和時(shí)間模塊的 mmss 各部分相互對(duì)應(yīng),模塊輸出部分位寬的15— 12 位與計(jì)秒的個(gè)位的 3— 0 位對(duì)應(yīng),位寬的 11— 8 位與計(jì)秒的十位的 3— 0 想對(duì)應(yīng),位寬的 7— 4 位與計(jì)分的個(gè)位的 3— 0 想對(duì)應(yīng),位寬的 3分 十位 分 個(gè)位 橫杠 秒 十位 秒 個(gè)位 病房號(hào) 基于 FPGA 的病房呼叫系統(tǒng)的設(shè)計(jì) 14 — 0 位與計(jì)分的十位的 3— 0 為相對(duì)應(yīng)。 END SOU。 程序: LIBRARY IEEE。 ELSE IF BCD=0001000000000000 THEN ING=39。 ELSE IF BCD=0101000000000000 THEN ING=39。 ELSE IF BCD=0010000000110000 THEN ING=39。 END IF 。 END IF 。 RST_ain : IN STD_LOGIC_VECTOR ( 7 DOWNTO 0 )。 1— 5 秒時(shí)間內(nèi)蜂鳴器工作 5 秒以后蜂鳴器不工作 基于 FPGA 的病房呼叫系統(tǒng)的設(shè)計(jì) 17 SIN:IN STD_LOGIC_VECTOR(7 DOWNTO 0)。 END COMPONENT 。 TI: OUT STD_LOGIC。 END COMPONENT 。 END COMPONENT 。 SIGNAL H : STD_LOGIC_VECTOR (