已閱讀5頁,還剩5頁未讀, 繼續(xù)免費閱讀
版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
一. 設計要求:1.掌握FPGA的設計與使用。2.基于FPGA實現(xiàn)與PC機的串口通信。二. 設計步驟:1.用VHDL語言設計邏輯電路,再通過QUARTUS II 9.1軟件,將各個模塊的電路封裝成器件,在頂層設計中通過連線,完成整個系統(tǒng)的設計。串行通信即串行數(shù)據(jù)傳輸,實現(xiàn)FPGA與PC的串行通信在實際中,特別是在FPGA的調(diào)試中有著很重要的應用。調(diào)試過程一般是先進行軟件編程仿真,然后將程序下載到芯片中驗證設計的正確性,目前還沒有更好的工具可以在下載后實時地對FPGA的工作情況和數(shù)據(jù)進行分析。通過串行通信,可以向FPGA發(fā)控制命令讓其執(zhí)行相應的操作,同時把需要的數(shù)據(jù)通過串口發(fā)到PC上進行相應的數(shù)據(jù)處理和分析,以此來判斷FPGA是否按設計要求工作。這樣給FPGA的調(diào)試帶來了很大方便,在不需要DSP等其他額外的硬件條件下,只通過串口就可以完成對FPGA的調(diào)試。本文采用Quartus3.0開發(fā)平臺,使用Altera公司的FPGA,設計實現(xiàn)了與PC的串行通信??傮w設計主要設計思想:PC向串口發(fā)送命令,F(xiàn)PGA通過判斷接收的控制字執(zhí)行相應的操作,總體框圖如圖1所示。圖1 總體框圖設計包括三部分:1、通過向I/O端口發(fā)送高低電平以達到控制外部硬件的要求。2、完成芯片內(nèi)部邏輯的變化。3、將需要的數(shù)據(jù)先存起來(一般采用內(nèi)部或外部FIFO),然后通過串口將數(shù)據(jù)發(fā)送到PC,PC將接收的數(shù)據(jù)進行處理和分析。串口采用標準的RS-232協(xié)議,主要參數(shù)的選擇:波特率28800bit/s、8位有效位、無奇偶校驗位、1位停止位。控制模塊主要實現(xiàn)的功能是:判斷從PC接收的數(shù)據(jù),根據(jù)預先設計的邏輯進行相應的狀態(tài)轉換。例如:給端口預置一個狀態(tài);送開始發(fā)送的標志位,送準備發(fā)送的數(shù)據(jù);給DDS送配置信號,控制FIFO的讀寫。程序中狀態(tài)機設計如圖3所示。圖3 狀態(tài)機變換設計中需要注意的問題波特率的選擇對于串口通信是很重要的,波特率不應太大,這樣數(shù)據(jù)才會更穩(wěn)定。整個發(fā)送接收過程中起始位的判別和發(fā)送是數(shù)據(jù)傳輸?shù)那疤帷榱吮苊庹`碼的產(chǎn)生,在FPGA設計中的串行輸入和輸出端口都應該加上一個數(shù)據(jù)鎖存器。仿真結果clk是時鐘信號(57600 bit/s);start_xmit是開始發(fā)送標志位;sin是串行輸入;datain是并行輸出;read_bit是接收結束標志位;xmit_bit是發(fā)送結束標志位;sout是串行輸出;dataout是并行輸出;rcv_bit 是接收位數(shù)寄存器。發(fā)送接收模塊主要完成把從sin端口接收的串行數(shù)據(jù)變?yōu)椴⑿袛?shù)據(jù)送給dataout;把并行數(shù)據(jù)datain變成串行數(shù)據(jù)通過sout端口串行發(fā)送。分頻模塊library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_arith.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity Clk_DIV is port (clk : in std_logic; CLK_O : out std_logic );end Clk_DIV;architecture Clk_DIV_arch of Clk_DIV issignal clk1,clk2 : std_logic; signal s1,s2 : integer range 0 to 53; beginprocess(clk)beginif rising_edge(clk) then if s1 53 then s1= s1+1; else s1=0; end if; if s1 28 then clk1 = 1; else clk1 = 0; end if; end if;end process;process(clk)beginif falling_edge(clk) then if s2 53 then s2= s2+1; else s2=0; end if; if s2 28 then clk2 = 1; else clk2 = 0; end if; end if;end process;CLK_O =clk1 or clk2;end Clk_DIV_arch;設計中需要將3.6864MHz的時鐘進行64分頻變?yōu)?7600 波特作為其他模塊的時鐘基準。具體實現(xiàn)時采用一個6位計數(shù)器,將計數(shù)器的溢出作為時鐘的輸出即可實現(xiàn)整數(shù)分頻。發(fā)送接收模塊此模塊是整個設計的核心部分。設計流程如圖2所示。圖2 發(fā)送接收流程圖library IEEE;use IEEE.std_logic_1164.all;use IEEE.std_logic_arith.all;use IEEE.std_logic_unsigned.all;entity UART_RX is port ( reset_n : in std_logic; clk : in std_logic; RD_x : in std_logic; RD_x,接收數(shù)據(jù)線 dout : out std_logic_vector(7 downto 0); 模塊接收到得1字節(jié)數(shù)據(jù) dav : out std_logic 傳輸成功應答 );end UART_RX;architecture UART_RX_arch of UART_RX is type UART_RX_STATE_TYPE is (WAIT_START, DATA, STOP); signal curState : UART_RX_STATE_TYPE; 接收狀態(tài)機狀態(tài) signal bits : std_logic_vector(7 downto 0); 接收數(shù)據(jù)暫存 signal smpCnt : integer range 0 to 7; 8次采樣計數(shù) signal bitCnt : integer range 0 to 15; 接收位數(shù)計數(shù)begin process(reset_n, clk) begin if reset_n = 0 thencurState = WAIT_START; bits 0); smpCnt = 0; bitCnt if RD_x = 0 then if smpCnt = 3 then curState = DATA; 3次采樣低電平證明起始位,下一個狀態(tài)接收數(shù)據(jù) smpCnt = 0; else curState = WAIT_START; smpCnt = smpCnt + 1; end if; else curState = WAIT_START; smpCnt = 0; end if; bits 0); bitCnt if smpCnt = 7 then 如果采樣八次,則保存一位數(shù)據(jù) if bitCnt = 7 then 如果已經(jīng)接收八位則下一個狀態(tài)停止接收 curState = STOP; else curState = DATA; end if; smpCnt = 0; bits = RD_x & bits(7 downto 1); 完成接收 bitCnt = bitCnt + 1; else curState = DATA; smpCnt = smpCnt + 1; bits = bits; bitCnt if smpCnt = 7 then curState = WAIT_START; smpCnt = 0; else curState = STOP; smpCnt = smpCnt + 1; end if; bits = bits; bitCnt curState = WAIT_START; bits 0); smpCnt = 0; bitCnt = 0; end case;end if;end process;dout = bits; process(reset_n, clk) beginif reset_n = 0 then dav = 0; elsif rising_edge(clk) then if curState = STOP and smpCnt = 7 and RD_x = 1 then dav = 1; 應答接收成功 else dav = 0; end if;end if;end process;end UART_RX_arch; 接收:判斷接收的串行數(shù)據(jù)sin是否是連續(xù)的兩個0,如果是則進入接收過程;每兩個時鐘周期接收1個比特的數(shù)據(jù),依次接收到,如果接收到停止位表明這個接收過程結束read_bit=1。根據(jù)串行通信協(xié)議,數(shù)據(jù)是按照先低位,后高位的順序發(fā)送的,所以實際接收的是。發(fā)送:待發(fā)送的并行數(shù)據(jù)為,當start_xmit=1發(fā)送有效,進入發(fā)送過程;首先發(fā)送兩個起始位0,保證長度為兩個時鐘周期,然后依次發(fā)送,每兩個時鐘周期發(fā)送1比特,最后發(fā)送停止位,發(fā)送過程結束xmit_bit為1。在串行通信中,無論發(fā)送或接收,都必須有時鐘脈沖信號對所傳送的數(shù)據(jù)進行定位和同步控制,設計中采用的時鐘頻率是波特率的兩倍(57600 bit/s)。接收過程:初始狀態(tài)是等待狀態(tài),當檢測到0時進入檢驗狀態(tài),在檢驗狀態(tài)下如果再檢測到0則進入接收數(shù)據(jù)狀態(tài),當接收完8位比特數(shù)后判斷是否有停止位,如果有則結束接收過程重新進入等待狀態(tài)。發(fā)送過程:初始狀態(tài)是等待狀態(tài),當接收到開始發(fā)送的信號則進入發(fā)送過程,先發(fā)送起始位,再發(fā)送8位比特數(shù),每位寬度為2個周期,當一個字節(jié)發(fā)送完畢后發(fā)送一個停止位,發(fā)送結束,重新回到等待狀態(tài)。發(fā)送程序library IEEE;use IEEE.std_logic_1164.all;use IEEE.std_logic_arith.all;use IEEE.std_logic_unsigned.all;entity UART_TX is port ( EN : in std_logic; clk : in std_logic; TD_x : out std_logic; Data_in : in std_logic_vector(7 downto 0) );end UART_TX;architecture UART_TX_arch of UART_TX istype UART_TX_STATE_TYPE is (WAIT_START, DATA, STOP);signal curState : UART_TX_STATE_TYPE; signal bits : std_logic_vector(7 downto 0);signal D_bit : std_logic;signal bitCnt : integer range 0 to 7;signal i : integer range 0 to 7;beginprocess(EN, clk)begin if rising_edge(clk) then i = i+1; if i=7 then i if EN=0 then curState =WAIT_START; D_bit =1; else curState =DATA; bitCnt = 0; bits =Data_in; D_bit if bitCnt = 7 then curState = STOP; D_bit = bits(0); else curState = DATA; bitCnt = bitCnt + 1; D_bit = bits(7); bits (7 downto 1) if EN=1 then curState =WAIT_START; D_bit =1; else curState =STOP; bits =Data_in; D_bit null; end case; end if;end if;TD_x =D_bit; end process; end UART_TX_arch; 圖5中clk是時鐘信號;a是PC發(fā)來的16進制的控制字,也就是圖4中的并行輸出dataout; ma1cnt、ma2cnt、ma3cnt是三個寄存器;clrr是系統(tǒng)清零信號;ddsclr是DDS配置信號;fifo_clk,fifo_rd,fifo_wr,ram_rst是FIFO的時鐘、讀、寫、清零信號;start_xmit是發(fā)送開始標志位;b是準備發(fā)送的數(shù)據(jù)。當接收a為1時,fifo_wr置1;當a為18時,把ma1cnt的值送到b。其他的操作類似,主要是端口的置位,F(xiàn)IFO讀寫狀態(tài)的控制。圖5 發(fā)送
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 辦公人員勞動協(xié)議合同(2025年)
- 辦公空間續(xù)約合同協(xié)議2025年
- 2024年中考道德與法治(廣西)第三次模擬考試(含答案)
- 2025年河北省公需課學習-國家基本公共服務標準1138
- ??拼髮W英語試卷及答案
- 江蘇中考常州試卷及答案
- 汽修實操電器考試題及答案
- 臨沂二模日語題庫及答案
- 油漆供銷合同范本
- 林業(yè)調(diào)查設計合同范本
- 尊崇憲法維護憲法
- 排水設施使用協(xié)議書
- 老年人失智癥行為和精神癥狀(BPSD)護理方案
- 2025年超星爾雅學習通《環(huán)境經(jīng)濟學與生物資源管理》考試備考題庫及答案解析
- 智慧樹知到《創(chuàng)新創(chuàng)業(yè)與管理基礎(東南大學)》章節(jié)測試附答案
- 鐵塔冰凍應急預案
- 文物復仿制合同協(xié)議
- 主人翁精神課件
- 2025年1月浙江省高考技術試卷真題(含答案)
- 【低空經(jīng)濟】低空經(jīng)濟校企合作方案
- 第十單元快樂每一天第20課把握情緒主旋律【我的情緒我做主:玩轉情緒主旋律】課件+2025-2026學年北師大版(2015)心理健康七年級全一冊
評論
0/150
提交評論