2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩55頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、<p><b>  本科學(xué)生畢業(yè)論文</b></p><p>  2011 年 5 月 28 日</p><p> 論文題目:基于FPGA的串口通信電路設(shè)計(jì)</p><p> 學(xué) 院:電子工程學(xué)院</p><p> 年 級:</p><p> 專 業(yè):集成電路設(shè)計(jì)與集成

2、系統(tǒng)</p><p> 姓 名:</p><p> 學(xué) 號:</p><p> 指導(dǎo)教師:</p><p><b>  摘要</b></p><p>  串行通信接口是一種應(yīng)用廣泛的通信接口。目前,大部分處理器都集成了支持RS-232接口(又稱EIA RS-232-C)的通用異步收發(fā)器

3、(Universal Asynchronous Receiver/Transmitter,UART),本文設(shè)計(jì)了一個串口數(shù)據(jù)采集和處理程序,詳細(xì)介紹了用Verilog HDL硬件描述語言來開發(fā)波特率發(fā)生器、接收模塊和發(fā)送模塊這三個模塊,以及系統(tǒng)各個模塊的具體設(shè)計(jì)方法和原理,用Quartus II軟件進(jìn)行仿真并給出結(jié)果,分別驗(yàn)證各個模塊的正確性。本設(shè)計(jì)還使用基于ALTERA公司的Cyclone II EP2C5T144芯片的FPGA開發(fā)板

4、,在FPGA開發(fā)板上實(shí)現(xiàn)和PC通過串口調(diào)試軟件完成雙向通信,不僅要求將開發(fā)板的數(shù)據(jù)顯示在PC的串口調(diào)試助手軟件上,還要求用PC發(fā)送數(shù)據(jù)的ASCII碼來驅(qū)動電路的8個LED燈,驗(yàn)證用FPGA實(shí)現(xiàn)串行通信的可行性。</p><p><b>  關(guān)鍵詞</b></p><p>  串行通信;RS-232;UART;Verilog HDL;FPGA</p>&l

5、t;p><b>  Abstract</b></p><p>  Serial communication interface is a widely used communication interface. At present, most of processor integrated RS-232(EIA RS-232-C) interface to support UART

6、(Universal Asynchronous Receiver/Transmitter) communication, This thesis design a data acquisition and treatment program. Besides that, the thesis introduced Baud Rate Generator module、Receiver module、Send module based o

7、n language Verilog HDL and give the results by simulate in Quartus II software. This design also uses EP2C5T144 FPGA ch</p><p><b>  Key words</b></p><p>  Serial communication; RS-23

8、2; UART; Verilog HDL; FPGA</p><p><b>  目錄</b></p><p><b>  摘要I</b></p><p>  AbstractII</p><p>  第1章 語言和工具1</p><p>  1.1 Verilog

9、HDL語言概述1</p><p>  1.2 FPGA概述3</p><p>  1.3 Quartus II軟件介紹7</p><p>  1.4 FPGA開發(fā)板介紹8</p><p>  1.5 本章小結(jié)11</p><p>  第2章 串口通信協(xié)議簡介12</p><p> 

10、 2.1 串口通信接口12</p><p>  2.2 RS232通信協(xié)議12</p><p>  2.3 串口通信時序分析14</p><p>  2.4 本章小結(jié)15</p><p>  第3章 串口通信的Verilog HDL實(shí)現(xiàn)16</p><p>  3.1 設(shè)計(jì)功能說明16</p>

11、<p>  3.2 波特率發(fā)生器模塊的Verilog HDL實(shí)現(xiàn)16</p><p>  3.3 發(fā)送模塊的Verilog HDL實(shí)現(xiàn)18</p><p>  3.4 接收模塊的Verilog HDL實(shí)現(xiàn)24</p><p>  3.5 本章小結(jié)30</p><p>  第4章 串口通信的硬件調(diào)試31</p&g

12、t;<p>  4.1 板級調(diào)試說明31</p><p>  4.2 下載配置FPGA32</p><p>  4.3 配置串口調(diào)試軟件34</p><p>  4.4 調(diào)試結(jié)果34</p><p>  4.5 本章小結(jié)37</p><p><b>  結(jié)論38</b>&

13、lt;/p><p><b>  參考文獻(xiàn)39</b></p><p>  附錄1 波特率發(fā)生器Verilog HDL實(shí)現(xiàn)40</p><p>  附錄2 發(fā)送模塊Verilog HDL實(shí)現(xiàn)41</p><p>  附錄3 接收模塊Verilog HDL實(shí)現(xiàn)46</p><p><b>

14、;  致謝51</b></p><p>  第1章 語言和工具</p><p>  1.1 Verilog HDL語言概述</p><p>  Verilog HDL是一種硬件描述語言,用于從算法級、門級到開關(guān)級的多種抽象設(shè)計(jì)層次的數(shù)字系統(tǒng)建模。被建模的數(shù)字系統(tǒng)對象的復(fù)雜性可以介于簡單的門和完整的電子數(shù)字系統(tǒng)之間。數(shù)字系統(tǒng)能夠按層次描述,并可在相同描

15、述中顯式地進(jìn)行時序建模。</p><p>  Verilog HDL語言具有下述描述能力:設(shè)計(jì)的行為特性、設(shè)計(jì)的數(shù)據(jù)流特性、設(shè)計(jì)的結(jié)構(gòu)組成以及包含響應(yīng)監(jiān)控和設(shè)計(jì)驗(yàn)證方面的時延和波形產(chǎn)生機(jī)制。所有這些都使用同一種建模語言。此外,Verilog HDL語言提供了編程語言接口,通過該接口可以在模擬、驗(yàn)證期間從設(shè)計(jì)外部訪問設(shè)計(jì),包括模擬的具體控制和運(yùn)行。</p><p>  Verilog HDL

16、語言不僅定義了語法,而且對每個語法結(jié)構(gòu)都定義了清晰的模擬、仿真語義。因此,用這種語言編寫的模型能夠使用Verilog仿真器進(jìn)行驗(yàn)證。語言從C編程語言中繼承了多種操作符和結(jié)構(gòu)。Verilog HDL提供了擴(kuò)展的建模能力,其中許多擴(kuò)展最初很難理解。但是,Verilog HDL語言的核心子集非常易于學(xué)習(xí)和使用,這對大多數(shù)建模應(yīng)用來說已經(jīng)足夠。當(dāng)然,完整的硬件描述語言足以對從最復(fù)雜的芯片到完整的電子系統(tǒng)進(jìn)行描述。</p><

17、p>  Verilog HDL語言最初是于1983年由Gateway Design Automation公司為其模擬器產(chǎn)品開發(fā)的硬件建模語言。那時它只是一種專用語言。由于他們的模擬、仿真器產(chǎn)品的廣泛使用,Verilog HDL作為一種便于使用且實(shí)用的語言逐漸為眾多設(shè)計(jì)者所接受。在一次努力增加語言普及性的活動中,Verilog HDL語言于1990年被推向公眾領(lǐng)域。Open Verilog International(OVI)是促進(jìn)

18、Verilog發(fā)展的國際性組織。1992年,OVI決定致力于推廣Verilog OVI標(biāo)準(zhǔn)成為IEEE標(biāo)準(zhǔn)。這一努力最后獲得成功,Verilog 語言于1995年成為IEEE標(biāo)準(zhǔn),稱為IEEE Std 1364-1995。完整的標(biāo)準(zhǔn)在Verilog硬件描述語言參考手冊中有詳細(xì)描述[]。下面列出的是Verilog HDL硬件描述語言的主要能力:</p><p>  基本邏輯門,例如and、or和nand等都內(nèi)置在語

19、言中。</p><p>  用戶定義原語(UDP)創(chuàng)建的靈活性。用戶定義的原語既可以是組合邏輯原語,也可以是時序邏輯原語。</p><p>  開關(guān)級基本結(jié)構(gòu)模型,例如pmos和nmos等也被內(nèi)置在語言中[]。</p><p>  提供顯式語言結(jié)構(gòu)指定設(shè)計(jì)中的端口到端口的時延及路徑時延和設(shè)計(jì)的時序檢查。</p><p>  可采用三種不同方式

20、或混合方式對設(shè)計(jì)建模。這些方式包括:行為描述方式——使用過程化結(jié)構(gòu)建模;數(shù)據(jù)流方式——使用連續(xù)賦值語句方式建模;結(jié)構(gòu)化方式——使用門和模塊實(shí)例語句描述建模。</p><p>  Verilog HDL中有兩類數(shù)據(jù)類型:線網(wǎng)數(shù)據(jù)類型wire和寄存器數(shù)據(jù)類型reg。線網(wǎng)類型表示構(gòu)件間的物理連線,而寄存器類型表示抽象的數(shù)據(jù)存儲元件。</p><p>  能夠描述層次設(shè)計(jì),可使用模塊實(shí)例結(jié)構(gòu)描述任

21、何層次。</p><p>  設(shè)計(jì)的規(guī)??梢允侨我獾?;語言不對設(shè)計(jì)的規(guī)模(大小)施加任何限制。</p><p>  Verilog HDL不再是某些公司的專有語言而是IEEE標(biāo)準(zhǔn)。</p><p>  人和機(jī)器都可閱讀Verilog HDL語言,因此它可作為EDA的工具和設(shè)計(jì)者之間的交互語言。</p><p>  Verilog HDL語言的

22、描述能力能夠通過使用編程語言接口(PLI)機(jī)制進(jìn)一步擴(kuò)展。PLI是允許外部函數(shù)訪問Verilog 模塊內(nèi)信息、允許設(shè)計(jì)者與模擬器交互的例程集合。</p><p>  設(shè)計(jì)能夠在多個層次上加以描述,從開關(guān)級、門級、寄存器傳送級(RTL)到算法級,包括進(jìn)程和隊(duì)列級。</p><p>  能夠使用內(nèi)置開關(guān)級原語在開關(guān)級對設(shè)計(jì)完整建模。</p><p>  同一語言可用于生

23、成模擬激勵和指定測試的驗(yàn)證約束條件,例如輸入值的指定。</p><p>  Verilog HDL能夠監(jiān)控模擬驗(yàn)證的執(zhí)行,即模擬驗(yàn)證執(zhí)行過程中設(shè)計(jì)的值能夠被監(jiān)控和顯示。這些值也能夠用于與期望值比較,在不匹配的情況下,打印報(bào)告消息。</p><p>  在行為級描述中,Verilog HDL不僅能夠在RTL級上進(jìn)行設(shè)計(jì)描述,而且能夠在體系結(jié)構(gòu)級描述及其算法級行為上進(jìn)行設(shè)計(jì)描述。</p&

24、gt;<p>  能夠使用門和模塊實(shí)例化語句在結(jié)構(gòu)級進(jìn)行結(jié)構(gòu)描述。</p><p>  Verilog HDL的混合方式建模能力,即在一個設(shè)計(jì)中每個模塊均可以在不同設(shè)計(jì)層次上建模。</p><p>  Verilog HDL 還具有內(nèi)置邏輯函數(shù),例如&(按位與)和|(按位或)。</p><p>  對高級編程語言結(jié)構(gòu),例如條件語句、情況語句和循

25、環(huán)語句,語言中都可以使用。</p><p>  可以顯式地對并發(fā)和定時進(jìn)行建模。</p><p>  提供強(qiáng)有力的文件讀寫能力。</p><p>  語言在特定情況下是非確定性的,即在不同的模擬器上模型可以產(chǎn)生不同的結(jié)果;例如,事件隊(duì)列上的事件順序在標(biāo)準(zhǔn)中沒有定義[]。</p><p>  1.2 FPGA概述</p><

26、p>  FPGA(Field Programmable Gate Array)現(xiàn)場可編程邏輯門陣列,它是在PAL、GAL、CPLD等可編程器件的基礎(chǔ)上進(jìn)一步發(fā)展的產(chǎn)物。它是作為專用集成電路(ASIC)領(lǐng)域中的一種半定制電路而出現(xiàn)的,既解決了定制電路的不足,又克服了原有可編程器件門電路數(shù)有限的缺點(diǎn)。它是當(dāng)今數(shù)字系統(tǒng)設(shè)計(jì)的主要硬件平臺,其主要特點(diǎn)就是完全由用戶通過軟件進(jìn)行配置和編程,從而完成某種特定的功能,且可以反復(fù)擦寫。在修改和升級

27、時,不需額外地改變PCB電路板,只是在計(jì)算機(jī)上修改和更新程序,使硬件設(shè)計(jì)工作成為軟件開發(fā)工作,縮短了系統(tǒng)設(shè)計(jì)的周期,提高了實(shí)現(xiàn)的靈活性并降低了成本[]。</p><p>  一、什么是可編程邏輯器件:</p><p>  在數(shù)字電子系統(tǒng)領(lǐng)域,存在三種基本的器件類型:存儲器、微處理器和邏輯器件。存儲器用來存儲隨機(jī)信息,如數(shù)據(jù)表或數(shù)據(jù)庫的內(nèi)容。微處理器執(zhí)行軟件指令來完成范圍廣泛的任務(wù),如運(yùn)行字

28、處理程序或視頻游戲。邏輯器件提供特定的功能,包括器件與器件間的接口、數(shù)據(jù)通信、信號處理、數(shù)據(jù)顯示、定時和控制操作、以及系統(tǒng)運(yùn)行所需要的所有其它功能。邏輯器件又分為固定邏輯和可編程邏輯,固定邏輯是器件復(fù)雜性不同,從設(shè)計(jì)、原型到最終生產(chǎn),當(dāng)應(yīng)用發(fā)生變化時就要從頭設(shè)計(jì),可編程邏輯器件較固定的優(yōu)點(diǎn)就在于當(dāng)應(yīng)用發(fā)生變化和器件工作不合適時不用從頭設(shè)計(jì),直接從新編寫邏輯器件后就可以了,這樣就節(jié)省了前期的開發(fā)費(fèi)用和周期。</p><

29、p>  二、可編程邏輯器件CPLD/FPGA的比較:</p><p>  可編程邏輯包括PAL、GAL、PLD等,經(jīng)過不斷的發(fā)展,演變成現(xiàn)在的CPLD/FPGA。CPLD(Complex Programmable Logic Device)復(fù)雜可編程邏輯器件和FPGA(Field Programmable Gate Array)兩者的功能基本相同,只是實(shí)現(xiàn)的原理有些不同,忽略兩者的區(qū)別時統(tǒng)稱為可編程邏輯器件

30、或者是CPLD/FPGA。兩者的區(qū)別一般有如下特點(diǎn)[]:</p><p>  (1)CPLD的邏輯單元比較大,容量較小,時序確定,延時可預(yù)測,F(xiàn)PGA基于查找表(LUT)所以時間上取決于查找表的路由。</p><p> ?。?)CPLD的容量一般比較小,寄存器少,適合做一些容量不大,組合邏輯比較復(fù)雜的設(shè)計(jì),如地址譯碼器,總線接口和上電復(fù)位邏輯等,相反FPGA則可以做一些容量大,內(nèi)嵌存儲器等

31、高級設(shè)計(jì),如嵌入式CPU,數(shù)據(jù)處理等。</p><p> ?。?)CPLD內(nèi)部連線采用連續(xù)性內(nèi)部連線,這樣的鏈接延時比較固定,但受連接路徑的影響,F(xiàn)PGA則采用片段鏈接,可以充分利用連線資源。</p><p>  (4)FPGA可以提供比CPLD器件足夠大的邏輯容量密度,大大減少PCB的空間,降低系統(tǒng)的功耗。</p><p>  上述了CPLD和FPGA的區(qū)別,但是

32、作為可編程邏輯器件,他們也有其共同的特點(diǎn),概括起來他們基本組成分三大部分:</p><p> ?。?)二維的邏輯陣列(邏輯單元),構(gòu)成器件的德邏輯組成核心。</p><p> ?。?)輸入和輸出塊(I/O),負(fù)責(zé)芯片與外界電路的借口連接。</p><p> ?。?)鏈接邏輯塊的互聯(lián)資源,用于邏輯塊之間,邏輯塊與輸入/輸出之間的連接。</p><p

33、>  三、FPGA的特點(diǎn):</p><p> ?。?)高性能是實(shí)時性,由于FPGA芯片內(nèi)部是通過上百萬個邏輯單元完成硬件實(shí)現(xiàn),具有并行處理的能力,運(yùn)算速度比平常的單片機(jī)和DSP快很多。</p><p> ?。?)高集成性FPGA可根據(jù)用戶的需求在內(nèi)部嵌入硬/軟IP核,以實(shí)現(xiàn)不同的而要求而且采用SOPC技術(shù)也可節(jié)省目標(biāo)硬件的面積。</p><p>  (3)高可

34、靠性和地成本目前的FPGA芯片在出廠之前都做過100%的檢測,不需要設(shè)計(jì)人員承擔(dān)投片生產(chǎn)的費(fèi)用。</p><p> ?。?)高靈活性和低功耗FPGA是現(xiàn)場可編程,用戶可以反復(fù)的編程,擦寫,使用,或者在外圍電路保持不變的情況下,采用不同的設(shè)計(jì)而實(shí)現(xiàn)不同的功能,這樣給產(chǎn)品的升級和維護(hù)帶來極大的方便。</p><p>  四、FPGA的體系結(jié)構(gòu):</p><p>  FP

35、GA采用邏輯單元陣列LCA(Logic Cell Array)的概念,內(nèi)部包括可配置邏輯模塊CLB(Configurable Logic Block),輸入/輸出模塊IOB(Input/Output Block),內(nèi)部連線(Interconnect)和用于存放編程數(shù)據(jù)的靜態(tài)存儲器SRAM組成。</p><p>  五、FPGA的設(shè)計(jì)流程:</p><p>  FPGA是可編程芯片,因此FP

36、GA的設(shè)計(jì)方法包括硬件設(shè)計(jì)和軟件設(shè)計(jì)兩部分。硬件包括FPGA芯片電路、存儲器、輸入輸出接口電路以及其他設(shè)備,軟件即是相應(yīng)的VHDL程序和Verilog HDL程序。FPGA采用自頂而下的設(shè)計(jì)方法,開始從系統(tǒng)級設(shè)計(jì),然后逐步分化到二級單元,三級單元知道可以直接操作基本邏輯單元或IP核為止,一般情況下設(shè)計(jì)流程[]如圖1-1所示,步驟如下:</p><p>  圖1-1 FPGA開發(fā)的一般流程</p>&

37、lt;p><b>  功能定義/器件選型</b></p><p>  在FPGA設(shè)計(jì)項(xiàng)目開始之前,必須有系統(tǒng)功能的定義和模塊的劃分,另外就是要根據(jù)任務(wù)要求,如系統(tǒng)的功能和復(fù)雜度,對工作速度和器件本身的資源、成本、以及連線的可布性等方面進(jìn)行權(quán)衡,選擇合適的設(shè)計(jì)方案和合適的器件類型。</p><p><b>  設(shè)計(jì)輸入</b></p&g

38、t;<p>  設(shè)計(jì)輸入有原理圖輸入和硬件描述語言輸入,原理圖輸入比較直觀但不易仿真,但效率很低,且不易維護(hù),不利于模塊構(gòu)造和重用。更主要的缺點(diǎn)是可移植性差,當(dāng)芯片升級后,所有的原理圖都需要作一定的改動。硬件語言包括VHDL和Verilog HDL以及System C等,硬件描述語言輸入其共同的突出特點(diǎn):語言與芯片工藝無關(guān),利于自頂向下設(shè)計(jì),便于模塊的劃分與移植,可移植性好,具有很強(qiáng)的邏輯描述和仿真功能,而且輸入效率很高。

39、</p><p><b>  功能仿真</b></p><p>  功能仿真也稱為前仿真是在編譯之前對用戶所設(shè)計(jì)的電路進(jìn)行邏輯功能驗(yàn)證,此時沒有延遲信息,僅是對功能的初步檢測。</p><p><b>  綜合優(yōu)化</b></p><p>  所謂綜合就是將較高級抽象層次的描述轉(zhuǎn)化成較低層次的描述。

40、綜合優(yōu)化根據(jù)目標(biāo)與要求優(yōu)化所生成的邏輯連接,使層次設(shè)計(jì)平面化,供FPGA布局布線軟件進(jìn)行實(shí)現(xiàn)。就目前的層次來看,綜合優(yōu)化(Synthesis)是指將設(shè)計(jì)輸入編譯成由與門、或門、非門、RAM、觸發(fā)器等基本邏輯單元組成的邏輯連接網(wǎng)表,而并非真實(shí)的門級電路。</p><p><b>  綜合后仿真</b></p><p>  綜合后仿真檢查綜合結(jié)果是否和原設(shè)計(jì)一致。在仿真時

41、,把綜合生成的標(biāo)準(zhǔn)延時文件反標(biāo)注到綜合仿真模型中去,可估計(jì)門延時帶來的影響。但這一步驟不能估計(jì)線延時,因此和布線后的實(shí)際情況還有一定的差距,并不十分準(zhǔn)確。</p><p><b>  實(shí)現(xiàn)與布局布線</b></p><p>  布局布線可理解為利用實(shí)現(xiàn)工具把邏輯映射到目標(biāo)器件結(jié)構(gòu)的資源中,決定邏輯的最佳布局,選擇邏輯與輸入輸出功能鏈接的布線通道進(jìn)行連線,并產(chǎn)生相應(yīng)文件

42、(如配置文件與相關(guān)報(bào)告),實(shí)現(xiàn)是將綜合生成的邏輯網(wǎng)表配置到具體的FPGA芯片上。</p><p><b>  時序仿真</b></p><p>  時序仿真,也稱為后仿真,是指將布局布線的延時信息反標(biāo)注到設(shè)計(jì)網(wǎng)表中來檢測有無時序違規(guī)(即不滿足時序約束條件或器件固有的時序規(guī)則,如建立時間、保持時間等)現(xiàn)象。時序仿真包含的延遲信息最全,也最精確,能較好地反映芯片的實(shí)際工作

43、情況。</p><p><b>  板級仿真與驗(yàn)證</b></p><p>  板級仿真主要應(yīng)用于高速電路設(shè)計(jì)中,對高速系統(tǒng)的信號完整性、電磁干擾等特征進(jìn)行分析,一般都以第三方工具仿真和驗(yàn)證。</p><p><b>  芯片編程與調(diào)試</b></p><p>  設(shè)計(jì)的最后一步就是芯片編程與調(diào)試。

44、芯片編程是指產(chǎn)生使用的數(shù)據(jù)文件(位數(shù)據(jù)流文件,Bitstream Generation),然后將編程數(shù)據(jù)下載到FPGA芯片中。邏輯分析儀(Logic Analyzer,LA)是FPGA設(shè)計(jì)的主要調(diào)試工具,但需要引出大量的測試管腳,且LA價格昂貴。目前,主流的FPGA芯片生產(chǎn)商都提供了內(nèi)嵌的在線邏輯分析儀。</p><p>  六、FPGA的應(yīng)用領(lǐng)域:</p><p>  隨著FPGA廠商降

45、低芯片的成本,F(xiàn)PGA被廣泛應(yīng)用于,通信,數(shù)字信號處理,工業(yè)控制,航空航天等領(lǐng)域,并取得非常高的可靠性。</p><p>  1.3 Quartus II軟件介紹</p><p>  Quartus II軟件是Altera公司的EDA開發(fā)軟件,支持原理圖、VHDL、Verilog HDL以及AHDL(Altera Hardware Description Language)等多種設(shè)計(jì)輸入形

46、式,內(nèi)嵌自有的綜合器以及仿真器,可以完成從設(shè)計(jì)輸入到硬件配置的完整PLD設(shè)計(jì)流程。[]</p><p>  Quartus II可以在XP、Linux以及Unix上使用,除了可以使用Tcl腳本完成設(shè)計(jì)流程外,提供了完善的用戶圖形界面設(shè)計(jì)方式。具有運(yùn)行速度快,界面統(tǒng)一,功能集中,易學(xué)易用等特點(diǎn)。</p><p>  Quartus II支持Altera的IP核,包含了LPM/MegaFunc

47、tion宏功能模塊庫,使用戶可以充分利用成熟的模塊,簡化了設(shè)計(jì)的復(fù)雜性、加快了設(shè)計(jì)速度。對第三方EDA工具的良好支持也使用戶可以在設(shè)計(jì)流程的各個階段使用熟悉的第三方EDA工具。</p><p>  此外,Quartus II通過和DSP Builder工具與Matlab/Simulink相結(jié)合,可以方便地實(shí)現(xiàn)各種DSP應(yīng)用系統(tǒng);支持Altera的片上可編程系統(tǒng)(SOPC)開發(fā),集系統(tǒng)級設(shè)計(jì)、嵌入式軟件開發(fā)、可編程

48、邏輯設(shè)計(jì)于一體,是一種綜合性的開發(fā)平臺。</p><p>  Altera Quartus II作為一種可編程邏輯的設(shè)計(jì)環(huán)境,由于其強(qiáng)大的設(shè)計(jì)能力和直觀易用的接口,越來越受到數(shù)字系統(tǒng)設(shè)計(jì)者的歡迎。</p><p>  Quartus II軟件支持APEX系列、Cyclone系列、Stratix系列和Excalibur系列等新型系列器件的開發(fā)。含有工作組計(jì)算、集成邏輯分析儀、EDA工具集成、

49、多過程支持、增強(qiáng)重編譯和IP集成等特性。支持百萬門級的設(shè)計(jì),支持高速I/O設(shè)計(jì),具有更強(qiáng)的設(shè)計(jì)能力和更快的編譯速度。Quartus II開發(fā)軟件為可編程片上系統(tǒng)(SOPC)設(shè)計(jì)提供了一個完整的設(shè)計(jì)環(huán)境。無論是使用個人電腦、NUIX或Linux工作站,Quartus II都提供了方便設(shè)計(jì)、快速編譯處理以及編程功能。</p><p>  Quartus II輸入的設(shè)計(jì)過程可分為創(chuàng)建工程、輸入文件、項(xiàng)目編譯、項(xiàng)目校驗(yàn)和

50、編程下載等幾個步驟。</p><p>  1.4 FPGA開發(fā)板介紹</p><p>  本設(shè)計(jì)中開發(fā)板采用Altera公司Cyclone II系列EP2C5T144C8或者EP2C8T144C8芯片而設(shè)計(jì)的。幫助用戶降低學(xué)習(xí)成本和加快用戶快速進(jìn)入可編程邏輯器件的設(shè)計(jì)開發(fā)領(lǐng)域。提供一個幫助用戶快速學(xué)習(xí)可編程邏輯器件的硬件平臺。開發(fā)板上使用JTAG接口對芯片進(jìn)行編程,也可以使用AS接口下載。

51、配送的ByteBlaster II下載線可以下載Altera公司的所有FPGA/CPLD芯片。</p><p>  開發(fā)板上所有的I/O口都通過排針引了出來,板上都有標(biāo)示。引出來的I/O用戶可以任意配置分配管腳,方便用戶開發(fā)自己的產(chǎn)品,最大限度為用戶節(jié)約學(xué)習(xí)成本。</p><p>  開發(fā)板硬件配置介紹:</p><p>  CycloneII U1 EP2C5T1

52、44C8或者EP2C8T144C8</p><p>  IIC U5 AT24C04或者AT24C02或者AT24C01</p><p>  AS U6 EPCS1或者EPCS4</p><p>  UART 通用的MAX232轉(zhuǎn)換或者 USB—串口小板</p><p>  PS/2 A;PS/2 B</p><p>

53、<b>  8個動態(tài)數(shù)碼管</b></p><p><b>  8個LED燈</b></p><p><b>  BELL</b></p><p>  LCD12864/LCD1602接口</p><p><b>  4個獨(dú)立按鍵</b></p>

54、;<p>  一個FPGA重配置按鍵</p><p>  JTAG AS下載模式</p><p>  上電模式:外接5V DC電源</p><p><b>  50M有源晶體</b></p><p>  8路數(shù)據(jù)輸入,可以固定的輸入1(高電平)或者0(低電平)</p><p>  本

55、程序用到的LED燈管腳分配原理圖如1-2所示,I/O口分配如下:D30 : PIN65、D31 : PIN69、D32 : PIN70、D33 : PIN71、D34 : PIN72、D35 : PIN73、D36 : PIN74、D37 : PIN60,當(dāng)I/O口為低電平時LED點(diǎn)亮。</p><p>  圖1-2 8個發(fā)光二極管I/O口分配</p><p>  本程序用到的串口通信,串

56、口管腳分配原理圖如1-3所示,I/O口分配如下:TX : PIN 9、RX : PIN8。</p><p>  圖1-3 串口接口的I/O口分配</p><p>  開發(fā)板上沒有用的I/O都接了出來,具體請看學(xué)習(xí)板上的標(biāo)示,板上更清楚。沒有用的I/O口如圖1-3所示。本設(shè)計(jì)中輸出的節(jié)后也用到了其中幾個I/O接口,后面分配的時候可以看到本設(shè)計(jì)具體分配的管腳。</p><p

57、>  圖1-4 沒有用的I/O口分配</p><p><b>  1.5 本章小結(jié)</b></p><p>  首先本章主要對Verilog HDL語言進(jìn)行簡要概述,介紹了Verilog HDL語言的發(fā)展歷史和Verilog HDL硬件描述語言具備的能力。</p><p>  其次還對Quartus II軟件進(jìn)行了簡要概述,Quartus

58、 II作為一種可編程邏輯的設(shè)計(jì)環(huán)境,由于其強(qiáng)大的設(shè)計(jì)能力支持APEX系列、Cyclone系列、Stratix系列和Excalibur系列等新型系列器件的開發(fā)。含有工作組計(jì)算、集成邏輯分析儀、EDA工具集成、多過程支持、增強(qiáng)重編譯和IP集成等特性。支持百萬門級的設(shè)計(jì),支持高速I/O設(shè)計(jì),具有更強(qiáng)的設(shè)計(jì)能力和更快的編譯速度。Quartus II輸入的設(shè)計(jì)過程可分為創(chuàng)建工程、輸入文件、項(xiàng)目編譯、項(xiàng)目校驗(yàn)和編程下載等幾個步驟。</p>

59、;<p>  最后本章還對FPGA進(jìn)行了簡要概述,并且對本設(shè)計(jì)將用到的FPGA開發(fā)板進(jìn)行了介紹,以及本設(shè)計(jì)中將要用到的I/O口都給出了圖示。</p><p>  后面的章節(jié)將用到本章介紹的Verilog HDL語言和Quartus II軟件以及FPGA開發(fā)板,還將對軟件的使用和開發(fā)過程進(jìn)行詳細(xì)介紹。</p><p>  第2章 串口通信協(xié)議簡介</p><

60、;p>  RS-232[]接口(又稱 EIA RS-232-C)是目前最常用的一種串行通訊接口。它是在1970年由美國電子工業(yè)協(xié)會(EIA)聯(lián)合貝爾系統(tǒng)、調(diào)制解調(diào)器廠家及計(jì)算機(jī)終端生產(chǎn)廠家共同制定的用于串行通訊的標(biāo)準(zhǔn)。本章主要介紹RS232接口的原理介紹。</p><p>  2.1 串口通信接口</p><p>  串口即串行數(shù)據(jù)接口,是一種常用的數(shù)據(jù)接口。在PC一般都有兩個串行口

61、(COM1和COM2),其形狀如圖1-1所示,是典型的9針D形接口,也稱為DB9。由于串口多采用RS-232-C傳輸協(xié)議并長達(dá)數(shù)十年,因此也常被稱為RS-232接口。</p><p>  圖2-1 串口的物理形狀示意圖</p><p>  串口主要用于網(wǎng)管控制或主業(yè)務(wù)數(shù)據(jù)的傳輸,支持?jǐn)?shù)據(jù)的雙向傳輸,速率9600-115200bps,即可以完成和PC的通信,也可以完成與帶有標(biāo)準(zhǔn)串口的外設(shè)相連

62、,其典型的連接方式如圖1-2所示。其中串口接口分為帶插孔和帶插針的兩種,其中插針端稱為DCE,插孔端稱為DTE。</p><p>  圖2-2 串口連接的示意圖</p><p>  2.2 RS232通信協(xié)議</p><p>  RS-232全名是“數(shù)據(jù)終端設(shè)備(DTE)和數(shù)據(jù)通訊設(shè)備(DCE)之間串行二進(jìn)制數(shù)據(jù)交換接口技術(shù)標(biāo)準(zhǔn)”,該標(biāo)準(zhǔn)規(guī)定采用25個腳的串口連接

63、器(DB25),不僅對連接器的每個引腳的信號內(nèi)容加以規(guī)定,還規(guī)定了各種信號的電平。</p><p>  標(biāo)準(zhǔn)的RS-232-C協(xié)議具有25根信號線,其中有4根為數(shù)據(jù)線、11根控制線、3根定時線和7根備用線。通常情況下,使用其中的9根線就可以實(shí)現(xiàn)RS-232串口通信。</p><p>  通常DB-25也可以像DB-9那樣使用,但是它們的針號和針孔之間的連接關(guān)系是不一樣的,下面給出常用的25

64、針DB-25和DB-9的對照表以及管腳說明[],如表1-1所示。</p><p>  表2-1 RS-232-C接口引腳定義</p><p>  最為簡單且常用的RS-232-C連接方法就是三線連接法,即地、接收數(shù)據(jù)和發(fā)送數(shù)據(jù)三腳相連。這是因?yàn)槭?、發(fā)數(shù)據(jù)是時分的,二者不會同時傳輸[]。對于DB-9和DB-25,常用的3線連接法的原則如表1-2所示。</p><p>

65、  表2-2 DB-9、DB-25 常用的3線連接法</p><p>  2.3 串口通信時序分析</p><p>  RS-232-C的串行總線在空閑的時候保持為邏輯“1”狀態(tài),即串行連接線上的電平為-3~15V。當(dāng)需要傳送一個字符時,首先會發(fā)送一個邏輯為“0”的起始位,表示開始發(fā)送數(shù)據(jù);之后就逐個發(fā)送數(shù)據(jù)位、奇偶校驗(yàn)位和停止位(邏輯“1”),每一次傳輸1個字符(8個比特)。由于任意兩個

66、字符對應(yīng)瞬間的時間間隔是可變的,因此也被稱為異步格式[]。典型的傳輸時序如圖1-3所示。</p><p>  圖2-3 RS232 協(xié)議的傳輸時序</p><p>  在RS-232-C協(xié)議中,可以設(shè)置數(shù)據(jù)的傳輸速率。除此之外,字符的位寬、奇偶校驗(yàn)位、停止位都可以被設(shè)置。字符可以被設(shè)置成5~8比特,奇偶校驗(yàn)位可以被去除;停止位可以設(shè)置成1位、2位甚至1.5位。每秒傳輸?shù)谋忍財(cái)?shù)也被稱為二進(jìn)制

67、波特率,即位周期的倒數(shù),簡稱為比特率,用于衡量RS-232的傳輸速率。RS-232-C有一系列波特率標(biāo)準(zhǔn):110bps、300bps、600bps、1200bps、1800bps、2400 bps、4800bps、9600bps、14.4kbps、19.2kbps、28.8kbps、33.6kbps 和56kbps 等。有兩點(diǎn)注意的是:首先,在設(shè)置波特率時,必須同時通知通信雙方;其次,波特率的計(jì)算包括了起始位、字符、校驗(yàn)位、停止位在內(nèi)所

68、有的比特,而不是僅針對字符[]。</p><p>  發(fā)送數(shù)據(jù)過程:空閑狀態(tài),線路處于高電位;拉低線路一個數(shù)據(jù)位的時間T,接著數(shù)據(jù)按低位到高位依次發(fā)送,數(shù)據(jù)發(fā)送完畢后,接著發(fā)送奇偶校驗(yàn)位和停止位(停止位為高電位),一幀資料發(fā)送結(jié)束。</p><p>  接收數(shù)據(jù)過程:空閑狀態(tài),線路處于高電位;當(dāng)檢測到線路的下降沿(線路電位由高電位變?yōu)榈碗娢唬r說明線路有數(shù)據(jù)傳輸,按照約定的波特率從低電位到

69、高電位接收數(shù)據(jù),數(shù)據(jù)發(fā)送完畢后,接著接收并比較奇偶校驗(yàn)位是否正確,如果正確則通知后續(xù)設(shè)備準(zhǔn)備接收數(shù)據(jù)或存入緩存[]。</p><p>  由于UART是異步傳輸,沒有傳輸同步時鐘。為了能保證數(shù)據(jù)傳輸?shù)恼_性,UART采用16倍數(shù)據(jù)波特率的時鐘進(jìn)行采樣。每個數(shù)據(jù)有16個時鐘采樣,取中間采樣值,以保證采樣不會滑碼或誤碼。一般UART一幀的數(shù)據(jù)位數(shù)為8,這樣即使每個數(shù)據(jù)有一個時鐘的誤差,接收端也能正確地采樣到數(shù)據(jù)。&l

70、t;/p><p>  UART的接收數(shù)據(jù)時序?yàn)閇]:當(dāng)檢測到數(shù)據(jù)的下降沿是,表明線路上有數(shù)據(jù)進(jìn)行傳輸,這時計(jì)數(shù)器CNT開始計(jì)數(shù)當(dāng)計(jì)數(shù)器為24=16+8時,采樣的值為第0位數(shù)據(jù);當(dāng)計(jì)數(shù)器的值為40時,采樣的值為第1位數(shù)據(jù),依此類推,進(jìn)行后面6個數(shù)據(jù)的采樣。如果需要進(jìn)行奇偶校驗(yàn),則當(dāng)計(jì)數(shù)器的值為152時,采樣的值即為奇偶位;當(dāng)計(jì)數(shù)器的值168時,采樣的值為“1”表示停止位,一幀數(shù)據(jù)接收完成。本設(shè)計(jì)將按上面的算法進(jìn)行Ver

71、ilog HDL語言編程與仿真。</p><p><b>  2.4 本章小結(jié)</b></p><p>  本章主要介紹了RS-232通信協(xié)議的基礎(chǔ)知識,明確實(shí)現(xiàn)串口通信需要的端口和功能,為以下章節(jié)通過Verilog HDL硬件描述語言實(shí)現(xiàn)串口的通信。目前,大部分處理器都集成了支持RS-232-C的通用異步收發(fā)器(Universal Asynchronous Rece

72、iver/Transmitter,UART。本設(shè)計(jì)在后面提到的UART即串口通信控制器),輔助處理器和串行設(shè)備之間通信,設(shè)計(jì)人員只需要對其進(jìn)行配置即可完成下列工作:</p><p>  完成處理器內(nèi)部的并行數(shù)據(jù)到串行數(shù)據(jù)的轉(zhuǎn)化以及外部串行數(shù)據(jù)到并行數(shù)據(jù)的轉(zhuǎn)化。</p><p>  完成輸入數(shù)據(jù)的奇偶校驗(yàn),以及在輸出數(shù)據(jù)中插入奇偶校驗(yàn)比特。</p><p>  完成數(shù)

73、據(jù)傳輸和停止位的檢測,并從中提取符號數(shù)據(jù)。</p><p>  完成外部設(shè)備串口設(shè)備的管理和響應(yīng)。</p><p>  第3章 串口通信的Verilog HDL實(shí)現(xiàn)</p><p>  本設(shè)計(jì)通過前面兩張介紹的串口通信基本知識和Verilog HDL語言進(jìn)行串口通信的實(shí)現(xiàn),本設(shè)計(jì)實(shí)現(xiàn)的串口通信電路主要由波特率發(fā)生器、數(shù)據(jù)接收模塊和數(shù)據(jù)發(fā)送模塊這3個模塊組成,強(qiáng)調(diào)功

74、能劃分明確,便于系統(tǒng)設(shè)計(jì)和調(diào)試。</p><p>  3.1 設(shè)計(jì)功能說明</p><p>  本實(shí)設(shè)計(jì)要求在FPGA開發(fā)板上實(shí)現(xiàn)波特率為115200bps,停止位為1比特、1比特校驗(yàn)位的串口通信,并要求和PC機(jī)通過串口調(diào)試助手完成雙向通信。不僅要求將PC通過鍵盤輸入的數(shù)據(jù)顯示在PC機(jī)的串口調(diào)試助手的數(shù)據(jù)發(fā)送框中,還要求用PC發(fā)送數(shù)據(jù)的ASCII碼來驅(qū)動FPGA開發(fā)板的8個LED燈。開發(fā)板

75、上接收到數(shù)據(jù)后將數(shù)據(jù)通過串口數(shù)據(jù)線發(fā)送回PC的串口調(diào)試助手上并顯示在數(shù)據(jù)接收框中。通過檢測LED燈的亮滅來判斷發(fā)送數(shù)據(jù)的ASCII碼是否正確,并觀察串口調(diào)試助手上接收到的數(shù)據(jù)與發(fā)送的數(shù)據(jù)是否一致。</p><p>  3.2 波特率發(fā)生器模塊的Verilog HDL實(shí)現(xiàn)</p><p>  波特率發(fā)生器實(shí)際上是一個分頻器,從給定的系統(tǒng)時鐘頻率得到要求的波特率。一般來講,為了提高系統(tǒng)的容錯性

76、處理,要求波特率發(fā)生器的輸出時鐘為實(shí)際串口數(shù)據(jù)波特率的N倍,N可以取值為8、16、32、64等[]。</p><p>  在本設(shè)計(jì)中,系統(tǒng)的時鐘為50MHz,取N為16,則分頻系數(shù)為50000000/(16*115200)=27.127,取整為27。</p><p>  本設(shè)計(jì)中的波特率發(fā)生器的代碼如下所列,即附錄1中clkdiv.v。</p><p>  modu

77、le clkdiv(clk, clkout);</p><p><b>  // 系統(tǒng)時鐘</b></p><p>  input clk;</p><p><b>  // 采樣時鐘輸出</b></p><p>  output clkout;</p><p>  reg

78、clkout;</p><p>  reg [15:0] cnt;</p><p><b>  // 分頻進(jìn)程</b></p><p>  always @(posedge clk)</p><p><b>  begin</b></p><p>  if(cnt == 16

79、'd12)</p><p><b>  begin</b></p><p>  clkout <= 1'b1;</p><p>  cnt <= cnt + 16'd1;</p><p><b>  end</b></p><p>  el

80、se if(cnt == 16'd26)</p><p><b>  begin</b></p><p>  clkout <= 1'b0;</p><p>  cnt <= 16'd0;</p><p><b>  end</b></p><

81、p><b>  else</b></p><p><b>  begin</b></p><p>  cnt <= cnt + 16'd1;</p><p><b>  end</b></p><p><b>  end</b><

82、/p><p><b>  endmodule</b></p><p>  在Quartus II軟件當(dāng)前工程窗口打開clkdiv.v文件,單擊File — Create/Update — Create Symbol Files for Current File命令,為clkdiv.v文件生成原理圖模塊。新建一個原理圖文件,在原理圖空白處雙節(jié),在彈出的Symbol對畫框中選

83、擇Project –clkdiv模塊,單擊OK按鈕退出Symbol對話框。在原理圖的適當(dāng)位置放置clkdiv模塊,并添加輸入輸出模塊,如圖3-1所示,保存原理圖為uartrxtx.bdf。</p><p>  圖3-1 波特率發(fā)生器的原理圖</p><p>  編譯工程文件,編譯無誤后單擊Processing – Generate Functional Simulation Netlist

84、,產(chǎn)生功能仿真網(wǎng)表。新建波形仿真文件,加入輸入輸出信號,設(shè)置系統(tǒng)時鐘信號clk的周期為20ns,保存波形文件為uartrxtx.vwf,單擊按鈕進(jìn)行分頻器的波形仿真,波形仿真圖形如圖3-2所示。</p><p>  圖3-2 波特率發(fā)生器的仿真圖形</p><p>  由波形仿真圖形可以看出,輸入的時鐘周期為20ns,即50MHz。分頻時鐘輸出實(shí)現(xiàn)了所需的27分頻,波特率發(fā)生模塊得到正確驗(yàn)

85、證。</p><p>  3.3 發(fā)送模塊的Verilog HDL實(shí)現(xiàn)</p><p>  UART發(fā)送模塊的功能:接收到發(fā)送指令后,把數(shù)據(jù)按UART協(xié)議輸出,先輸出一個低電平的起始位,然后從低到高輸出8個數(shù)據(jù)位,接著是可選的奇偶校驗(yàn)位,最后是高電平的停止位[]。</p><p>  由于波特率發(fā)生器產(chǎn)生的時鐘信號clkout的頻率為115200Hz的16倍,因此在

86、發(fā)送器中,每16個clkout周期發(fā)送一個有效比特,發(fā)送數(shù)據(jù)格式嚴(yán)格按照圖2-3所示的串口數(shù)據(jù)幀來完成:首先是起始位(發(fā)送端口從邏輯1轉(zhuǎn)化為邏輯0,并持續(xù)1/115200s),其次是8個有效數(shù)據(jù)比特(低位在前,高位在后),一位奇偶校驗(yàn)位,最后是一位停止位。</p><p>  本設(shè)計(jì)中的發(fā)送模塊的代碼如下所列,代碼即附錄2中uarttx.v文件。</p><p>  module uart

87、tx(clk, datain, wrsig, idle, tx);</p><p><b>  // UART時鐘</b></p><p>  input clk;</p><p>  // 需要發(fā)送的數(shù)據(jù)</p><p>  input [7:0] datain;</p><p>  // 發(fā)送

88、命令,上升沿有效</p><p>  input wrsig;</p><p>  // 線路狀態(tài)指示,高為線路忙,低為線路空閑</p><p>  output idle;</p><p><b>  // 發(fā)送數(shù)據(jù)信號</b></p><p>  output tx;</p>&

89、lt;p>  reg idle, tx;</p><p><b>  reg send;</b></p><p>  reg wrsigbuf, wrsigrise;</p><p>  reg presult;</p><p><b>  // 計(jì)數(shù)器</b></p><

90、p>  reg[7:0] cnt;</p><p>  parameter paritymode = 1'b0;</p><p>  // 檢測發(fā)送命令是否有效</p><p>  always @(posedge clk)</p><p><b>  begin</b></p><p&

91、gt;  wrsigbuf <= wrsig;</p><p>  wrsigrise <= (~wrsigbuf) & wrsig;</p><p><b>  end</b></p><p>  always @(posedge clk)</p><p><b>  begin</

92、b></p><p>  // 當(dāng)發(fā)送命令有效且線路為空閑時,啟動新的數(shù)據(jù)發(fā)送進(jìn)程</p><p>  if (wrsigrise && (~idle))</p><p><b>  begin</b></p><p>  send <= 1'b1;</p><p

93、><b>  end</b></p><p>  // 一幀資料發(fā)送結(jié)束</p><p>  else if(cnt == 8'd175)</p><p><b>  begin</b></p><p>  send <= 1'b0;</p><p&g

94、t;<b>  end</b></p><p><b>  end</b></p><p>  always @(posedge clk)</p><p><b>  begin</b></p><p>  if(send == 1'b1)</p><

95、;p><b>  begin</b></p><p><b>  case(cnt)</b></p><p><b>  // 產(chǎn)生起始位</b></p><p><b>  8'd0:</b></p><p><b>  begi

96、n</b></p><p>  tx <= 1'b0;</p><p>  idle <= 1'b1;</p><p>  cnt <= cnt + 8'd1;</p><p><b>  end</b></p><p>  // 發(fā)送第0位數(shù)

97、據(jù)</p><p><b>  8'd16:</b></p><p><b>  begin</b></p><p>  tx <= datain[0];</p><p>  presult <= datain[0]^paritymode;</p><p>

98、;  idle <= 1'b1;</p><p>  cnt <= cnt + 8'd1;</p><p><b>  end</b></p><p>  // 發(fā)送第1位數(shù)據(jù)</p><p><b>  8'd32:</b></p><p&g

99、t;<b>  begin</b></p><p>  tx <= datain[1];</p><p>  presult <= datain[1]^presult;</p><p>  idle <= 1'b1;</p><p>  cnt <= cnt + 8'd1;<

100、/p><p><b>  end</b></p><p>  // 發(fā)送第2位數(shù)據(jù)</p><p><b>  8'd48:</b></p><p><b>  begin</b></p><p>  tx <= datain[2];</

101、p><p>  presult <= datain[2]^presult;</p><p>  idle <= 1'b1;</p><p>  cnt <= cnt + 8'd1;</p><p><b>  end</b></p><p>  // 發(fā)送第3位數(shù)據(jù)&

102、lt;/p><p><b>  8'd64:</b></p><p><b>  begin</b></p><p>  tx <= datain[3];</p><p>  presult <= datain[3]^presult;</p><p>  id

103、le <= 1'b1;</p><p>  cnt <= cnt + 8'd1;</p><p><b>  end</b></p><p>  // 發(fā)送第4位數(shù)據(jù)</p><p><b>  8'd80:</b></p><p><

104、;b>  begin</b></p><p>  tx <= datain[4];</p><p>  presult <= datain[4]^presult;</p><p>  idle <= 1'b1;</p><p>  cnt <= cnt + 8'd1;</p>

105、;<p><b>  end</b></p><p>  // 發(fā)送第5位數(shù)據(jù)</p><p><b>  8'd96:</b></p><p><b>  begin</b></p><p>  tx <= datain[5];</p>

106、<p>  presult <= datain[5]^presult;</p><p>  idle <= 1'b1;</p><p>  cnt <= cnt + 8'd1;</p><p><b>  end</b></p><p>  // 發(fā)送第6位數(shù)據(jù)</p

107、><p><b>  8'd112:</b></p><p><b>  begin</b></p><p>  tx <= datain[6];</p><p>  presult <= datain[6]^presult;</p><p>  idle &

108、lt;= 1'b1;</p><p>  cnt <= cnt + 8'd1;</p><p><b>  end</b></p><p>  // 發(fā)送第7位數(shù)據(jù)</p><p><b>  8'd128:</b></p><p><b&

109、gt;  begin</b></p><p>  tx <= datain[7];</p><p>  presult <= datain[7]^presult;</p><p>  idle <= 1'b1;</p><p>  cnt <= cnt + 8'd1;</p>

110、<p><b>  end</b></p><p>  // 發(fā)送奇偶校驗(yàn)位</p><p><b>  8'd144:</b></p><p><b>  begin</b></p><p>  tx <= presult;</p>&l

111、t;p>  presult <= datain[0]^paritymode;</p><p>  idle <= 1'b1;</p><p>  cnt <= cnt + 8'd1;</p><p><b>  end</b></p><p><b>  // 發(fā)送停止位

112、</b></p><p><b>  8'd160:</b></p><p><b>  begin</b></p><p>  tx <= 1'b1;</p><p>  idle <= 1'b1;</p><p>  cnt

113、 <= cnt + 8'd1;</p><p><b>  end</b></p><p>  // 一幀資料發(fā)送結(jié)束</p><p><b>  8'd170:</b></p><p><b>  begin</b></p><p&g

114、t;  tx <= 1'b1;</p><p>  idle <= 1'b0;</p><p>  cnt <= cnt + 8'd1;</p><p><b>  end</b></p><p><b>  8'd175:</b></

115、p><p><b>  begin</b></p><p>  tx <= 1'b1;</p><p>  idle <= 1'b0;</p><p><b>  cnt <= 0;</b></p><p><b>  end&

116、lt;/b></p><p><b>  default:</b></p><p><b>  begin</b></p><p>  cnt <= cnt + 8'd1;</p><p><b>  end</b></p><p>

117、<b>  endcase</b></p><p><b>  end</b></p><p><b>  else</b></p><p><b>  begin</b></p><p>  tx <= 1'b1;</p>&

118、lt;p>  cnt <= 8'd0;</p><p>  idle <= 1'b0;</p><p><b>  end</b></p><p><b>  end</b></p><p><b>  endmodule</b></p&

119、gt;<p>  在Quartus II軟件當(dāng)前工程窗口打開uarttx.v文件,單擊File — Create/Update — Create Symbol Files for Current File命令,為uarttx.v文件生成原理圖模塊。為了測試UART發(fā)送模塊的正確性,需要編寫一個測試模塊來測試UART發(fā)送模塊,testuart.v代碼如下所列,即附錄2中testuart.v文件。</p><

120、;p>  module testuart(clk, dataout, wrsig);</p><p>  input clk;</p><p>  output[7:0] dataout;</p><p>  output wrsig;</p><p>  reg [7:0] dataout;</p><p> 

121、 reg wrsig;</p><p>  reg [7:0] cnt;</p><p>  always @(posedge clk)</p><p><b>  begin</b></p><p>  if(cnt == 254)</p><p><b>  begin</b&

122、gt;</p><p><b>  // 每次數(shù)據(jù)加1</b></p><p>  dataout <= dataout + 8'd1;</p><p><b>  // 產(chǎn)生發(fā)送命令</b></p><p>  wrsig <= 1'b1;</p><

123、;p>  cnt <= 8'd0;</p><p><b>  end</b></p><p><b>  else</b></p><p><b>  begin</b></p><p>  wrsig <= 1'b0;</p>

124、<p>  cnt <= cnt + 8'd1;</p><p><b>  end</b></p><p><b>  end</b></p><p><b>  endmodule</b></p><p>  在Quartus II軟件當(dāng)前工程窗口

125、打開testuart.v文件,單擊File — Create/Update — Create Symbol Files for Current File命令,為testuart.v文件生成原理圖模塊。新建一個原理圖文件,在原理圖空白處雙節(jié),在彈出的Symbol對畫框中選擇Project –testuart模塊和uart模塊,單擊OK按鈕退出Symbol對話框。在原理圖的適當(dāng)位置放置testuart模塊和uart模塊,并添加輸入輸出模塊,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論