




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
基于FPGA設計與實現UARTUART(即UniversalAsynchronousReceiverTransmitter通用異步收發器)是廣泛使用的串行數據傳輸協議。UART允許在串行鏈路上進行全雙工的通信。
---串行外設用到RS-232異步串行接口,本實驗室平臺用的是MAXIM公司生產的MAX23。MAX232可以將串口設備需要發送的TTL/CMOS邏輯電平轉換為RS-232邏輯電平,同時也可以將要接收的RS-232邏輯電平轉換為TTL/CMOS邏輯電平。本實驗通過編寫VHDL語言程序,實現數據在實驗平臺與PC之間通過串口進行收發,基于FPGA器件設計與實現UART。一UART基本知識
UART是通過串行傳送數據而實現通信的,它的幀格式如下:---包括線路空閑狀態(高電平)、起始位(低電平‘0’)、5~8位數據位、可選的校驗位和停止位(可為1、1.5、2位)。這種格式是由起始位和停止位來實現字符的同步。另外,UART在國際上有一標準的波特率系列,在本實驗中采用的波特率為9600HZ。二管腳鎖定及功能說明1、時鐘clk鎖定在4MHZ的頻率,是本實驗箱的28號管腳的第三個針腳;2、復位鍵reset鎖在105號管腳,用來復位;3、數據輸入端口din[7..0]為117——124,實驗8位數據輸入;4、輸入使能口trans_lock為57,按一次輸入一位數據;5、接收數據dout[7..0]顯示為85——96,顯示接收的數據6、接收出錯信號frame_erro鎖在74,為1則表示接收有誤;7、接收完畢frame_end信號為75,為1表示接收完畢為0則表示正在接收,不允許發送;8、發送完畢信號trans_end為76,為1表示發送完畢,為0則表示正在發送,不允許接收。9、串行數據輸入口rxd鎖在97,串行數據輸出口txd鎖在98,分別用來數據的輸入與輸出。三UART的設計與實現1、分頻計:由于本實驗采用的波特率為9600HZ,它每隔16個時鐘周期采樣一個數據,因此實際輸入的頻率為9600HZ×16=153600HZ,實驗平臺上沒有合適的時鐘頻率,因此在本實驗中采用了4MHZ的時鐘輸入,對它進行了26分頻(4000k/153.6k=26.42),接近了實驗要求的時鐘頻率。它的源代碼如下:--GeneratedbyQuartusIIVersion4.0(BuildBuild1901/28/2004)--CreatedonSunNov2017:09:412005--文件名:baud.vhd--功能:將外部輸入的4MHz的信號分成頻率為153600Hz=9600Hz×16的信號--26倍分頻計libraryIEEE;useIEEE.STD_LOGIC_1164.ALL;useIEEE.STD_LOGIC_ARITH.ALL;useIEEE.STD_LOGIC_UNSIGNED.ALL;entitybaudisPort(clkb,resetb:instd_logic; clk_out:outstd_logic);endbaud;architectureBehavioralofbaudisbeginprocess(clkb,resetb)variablediv:integerrange0to26;beginifresetb='1'then--復位div:=0;clk_out<='0';elsifclkb'eventandclkb='1'then--設置分頻系數div:=div+1;ifdiv=13then--一半的時候置0clk_out<='0';elsifdiv=26then--26的時候置1clk_out<='1';div:=0;endif;endif;endprocess;endBehavioral;2、UART接收器
---串行數據幀和接收時鐘是異步的,發送來的數據由邏輯1變為邏輯0可以視為一個數據幀的開始。接收器先要捕捉起始位,確定rxd輸入由1到0,邏輯0要8個CLK16時鐘周期,才是正常的起始位,然后在每隔16個CLK16時鐘周期采樣接收數據,移位輸入接收移位寄存器rbuf,最后輸出數據dout。接收完畢時,數據接收標志信號frame_end置1,標志數據接收完畢,接收過程中為0,防止發送沖突。如果接收的過程中發生錯誤,則接收出錯信號frame_error為1,平時此信號為0。接收器實現的源代碼如下:--GeneratedbyQuartusIIVersion4.0(BuildBuild1901/28/2004)--CreatedonSunNov2017:09:412005--文件名:receive.vhd。--功能:UART接受器。libraryIEEE;useIEEE.STD_LOGIC_1164.ALL;useIEEE.STD_LOGIC_ARITH.ALL;useIEEE.STD_LOGIC_UNSIGNED.ALL;entityreceiveis Port(clkr:instd_logic;--采樣時鐘resetr:instd_logic;--復位信號rxd:instd_logic;--數據串行輸入信號r_lock:instd_logic;--接收鎖存信號 frame_end:outstd_logic;--一位接收完畢信號frame_error:outstd_logic;--接收出錯信號 dout:outstd_logic_vector(7downto0));--顯示接收數據endreceive;architectureBehavioralofreceiveisbeginpro:process(clkr,resetr,rxd)--接收信號進程variablenumber:std_logic_vector(3downto0);--接收數據的位數計數variablecount:std_logic_vector(3downto0);--采樣時鐘計數variableparity:std_logic:='0';--計算出的奇偶校驗位variablereceive_parity:std_logic;--接收到的奇偶校驗位variablerbuf:std_logic_vector(7downto0);--接收緩存beginifresetr='1'then--復位number:="0000";count:="0000";frame_end<='1';frame_error<='0';elsifrising_edge(clkr)then--接收ifnumber="0000"then--識別起始位ifrxd='0'thenifcount<"1000"thencount:=count+1;elsedout<="00000000";count:="0000";number:=number+1;frame_end<='0';endif;endif;elsifnumber>="0001"andnumber<="1000"then--接收數據ifcount<"1111"thencount:=count+1;elsecount:="0000";number:=number+1;frame_end<='0';rbuf(7downto1):=rbuf(6downto0);rbuf(0):=rxd;parity:=parityxorrbuf(0);endif;elsifnumber="1001"then--接收奇偶校驗位ifcount<"1111"thencount:=count+1;elsecount:="0000";number:=number+1;frame_end<='0';receive_parity:=rxd;endif;elsifnumber="1010"then--接收完畢ifcount<"1111"thencount:=count+1;elsecount:="0000";dout<=rbuf;--接收移位寄存器數據進入接收緩沖器rbuf:="00000000";number:="0000";frame_end<='1';endif;elsecount:="0000";number:="0000";rbuf:="00000000";frame_end<='1';endif;ifparity=receive_paritythen--檢驗接收是否出錯frame_error<='0';parity:='0';elseframe_error<='1';parity:='0';endif;endif;endprocess;endBehavioral;
3、UART發送器
---發送器每隔16個CLK16時鐘周期輸出1位,次序遵循1位起始位、8位數據位(假定數據位為8位)、1位校驗位(可選)、1位停止位。---
-數據的發送是由手動發送鍵控制,當輸入發送命令時,發送器根據此命進行發送。它將并行數據din[7..0]鎖存進發送緩沖器tbuf[7..0],并通過移位發送把寄存器tbuf[7..0]里的數據串行發送至串行數據輸出端dout。在數據發送過程中用輸出信號trans_end作為標志信號,當一幀數據發送完畢時,trans_end信號為1,否則為0。防止發生沖突。它的實現代碼如下:--GeneratedbyQuartusIIVersion4.0(BuildBuild1901/28/2004)--CreatedonSunNov2017:09:412005--文件名:transmit.vhd--功能:根據輸入的并行數據,發送串行數據LIBRARYieee;USEieee.std_logic_1164.all;useIEEE.STD_LOGIC_ARITH.ALL;useIEEE.STD_LOGIC_UNSIGNED.ALL;--EntityDeclarationENTITYtransmitIS --{{ALTERA_IO_BEGIN}}DONOTREMOVETHISLINE! PORT ( clkt:INSTD_LOGIC;--采樣時鐘 resett:INSTD_LOGIC;--復位 t_lock:INSTD_LOGIC;--輸出鎖定,跳變一次輸出一個字節 din:INSTD_LOGIC_VECTOR(7downto0);--將要輸出的數據 trans:OUTSTD_LOGIC;--串行輸出 trans_end:OUTSTD_LOGIC--輸出結束標志 ); --{{ALTERA_IO_END}}DONOTREMOVETHISLINE! ENDtransmit;--ArchitectureBodyARCHITECTUREtransmit_architectureOFtransmitISBEGINpro:process(clkt,resett,t_lock)variablenumber:STD_LOGIC_VECTOR(3downto0);--輸出位數計數variablecount:STD_LOGIC_VECTOR(3downto0);--采樣計數variabletbuf:STD_LOGIC_VECTOR(7downto0);--輸出緩存variableparity:STD_LOGIC:='0';--奇偶校驗位beginifresett='1'then--復位number:="0000";trans_end<='1';trans<='1';count:="0000";elsifrising_edge(clkt)then--信號發送if(t_lock='1')and(number<"1101")then--保證跳變一次輸出一位ifnumber="0000"then--初始化ifcount<"1111"thencount:=count+1;elsecount:="0000";trans_end<='0';trans<='1';number:=number+1;tbuf:=din;endif;elsifnumber="0001"then--第一位發送初始位ifcount<"1111"thencount:=count+1;elsecount:="0000";trans_end<='0';trans<='0';number:=number+1;endif;elsifnumber>="0010"andnumber<="1001"then--發送8位數據位ifcount<"1111"thencount:=count+1;elsecount:="0000";number:=number+1;trans_end<='0';trans<=tbuf(0);--從低位到高位進行移位輸出至串行輸出端transtbuf:='0'&tbuf(7downto1);parity:=parityxortbuf(0);endif;elsifnumber="1010"then--發送奇偶校驗位ifcount<"1111"thencount:=count+1;elsecount:="0000";trans_end<='0';number:=number+1;trans<=parity;endif;elsifnumber="1011"then--發送結束位ifcount<"1111"thencount:=count+1;elsecount:="0000";trans_end<='0';trans<='1';number:=number+1;endif;elsifnumber="1100"then--發送結束ifcount<"11
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 涉密單位面試題目及答案
- 第八屆藍橋杯試題及答案
- 紅樓夢高考測試題及答案
- 系統分析師考試考前沖刺試題及答案
- 系統分析師考試學習規劃試題及答案
- 試題及答案2025年系統集成新變化
- 高敏感人群測試題及答案
- 整體備考評估初級社會工作者試題及答案
- 安徽安管人員試題及答案
- 學習測試用例的設計原則試題及答案
- CJJ82-2012 園林綠化工程施工及驗收規范
- 江蘇省南京市2022-2023學年四年級下學期數學期末試卷(含答案)
- 江蘇省南京市建鄴區2022-2023學年五年級下學期期末數學試卷
- 提高感染性休克集束化治療完成率工作方案
- 肝硬化病人健康宣教課件
- 心力衰竭病人的護理課件
- 0-3歲兒童適應性行為的發展與教育
- 【多功能自動跑步機機械結構設計4800字(論文)】
- 動物生理學血細胞計數實驗報告
- 高血壓患者的健康管理隨訪
- 發那科注塑機講義
評論
0/150
提交評論