FPGA課程設(shè)計(jì)報(bào)告_第1頁(yè)
FPGA課程設(shè)計(jì)報(bào)告_第2頁(yè)
FPGA課程設(shè)計(jì)報(bào)告_第3頁(yè)
FPGA課程設(shè)計(jì)報(bào)告_第4頁(yè)
FPGA課程設(shè)計(jì)報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩21頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

華北水利水電大學(xué)NorthChinaUniversityofWaterResourcesandElectricPower電子設(shè)計(jì)自動(dòng)化課程設(shè)計(jì)題目I2C控制器學(xué)院 信息工程學(xué)院 專(zhuān)業(yè) 電子信息工程 姓名學(xué)號(hào)指導(dǎo)教師完成時(shí)間 2016.1.11 目錄TOC\o"1-5"\h\z摘要 1引言 1一.設(shè)計(jì)任務(wù) 21.1設(shè)計(jì)要求 2設(shè)計(jì)目的 2I2C總線簡(jiǎn)介 2LM75A簡(jiǎn)介 2二.系統(tǒng)設(shè)計(jì)詳述 32.1系統(tǒng)總體方案設(shè)計(jì) 32.2電路原理圖 4系統(tǒng)硬件電路設(shè)計(jì) 4溫度采集電路設(shè)計(jì) 4LM75A詳述 4\o"CurrentDocument"Verilog代碼設(shè)計(jì) 64.1IIC通信模塊 .74.2狀態(tài)機(jī)的設(shè)計(jì) 8溫度顯示模塊 8系統(tǒng)整合 9仿真波形及說(shuō)明 10設(shè)計(jì)小組的分工及安排 10收獲和體會(huì) 11參考文獻(xiàn) 12\o"CurrentDocument"附錄: 12摘要:設(shè)計(jì)了一種基于FPGA和LM75A的溫度測(cè)量系統(tǒng)。采用數(shù)字溫度傳感器LM75A檢測(cè)環(huán)境溫度,并利用LM75A自帶的IIC總線接口傳輸數(shù)據(jù),通過(guò)數(shù)碼管將溫度實(shí)時(shí)顯示出來(lái).關(guān)鍵字:關(guān)鍵字:FPGA;LM75A;IIC總線引言:目前溫度測(cè)量主要通過(guò)單片機(jī)來(lái)實(shí)現(xiàn)控制.但單片機(jī)是基于順序語(yǔ)言的,其描述過(guò)程繁瑣,信號(hào)采集頻率受單片機(jī)時(shí)鐘頻率的限制,難于實(shí)現(xiàn)高速的溫度測(cè)量且不易在線修改.由于傳感器多數(shù)采用的是分立元件,如熱敏電阻、熱電偶等,精度很低,遠(yuǎn)遠(yuǎn)不能滿(mǎn)足實(shí)際使用所需要的高精度測(cè)溫要求.筆者采用集成溫度傳感器,使傳統(tǒng)傳感器和集成電路融為一體,極大地提高了傳感器的性能,具有測(cè)溫精度高、復(fù)現(xiàn)性好、線性?xún)?yōu)良、體積小、熱容量小、穩(wěn)定性好、輸出電信號(hào)大等優(yōu)點(diǎn).更重要的是采用現(xiàn)場(chǎng)可編程門(mén)陣列(FPGA)實(shí)現(xiàn)溫度測(cè)量比采用單片機(jī)大大改善了設(shè)計(jì)效果,可實(shí)現(xiàn)高速的溫度測(cè)量.文中闡述了FPGA的實(shí)現(xiàn)方法及如何利用FPGA器件實(shí)現(xiàn)多路溫度測(cè)量.由于FPGA具有集成度高,高速、高效率,內(nèi)部有嵌入式陣列塊等特點(diǎn),易于實(shí)現(xiàn)FIFO和ROM,可使整個(gè)溫度測(cè)量系統(tǒng)主要由硬件實(shí)現(xiàn).一.設(shè)計(jì)任務(wù)1.1設(shè)計(jì)要求:利用VerilogHDL設(shè)計(jì)I2C控制模塊,并在MagicSOPC實(shí)驗(yàn)箱上實(shí)現(xiàn)。該控制模塊,可以通過(guò)I2C總線協(xié)議,實(shí)現(xiàn)總線數(shù)據(jù)傳輸,實(shí)現(xiàn)溫度傳感器LM75A的基本操作,并將溫度數(shù)值掃描顯示到數(shù)碼管上。1.2設(shè)計(jì)目的:了解串行總線熟悉I2C協(xié)議學(xué)習(xí)LM75A接口控制器編寫(xiě)Singialtap在線監(jiān)測(cè)工具使用1.3.I2C總線簡(jiǎn)介I2C總線是一種由PHILIPS公司推出的兩線式串行總線,用于IC(IntegratedCircuit)器件之間的互連。它通過(guò)SDA(串行數(shù)據(jù)線)及SCL(串行時(shí)鐘線)兩根線在連到該總線上的器件之間傳送信息,并根據(jù)地址識(shí)別每個(gè)器件。每個(gè)器件有一個(gè)唯一的地址,而且都可以作為一個(gè)發(fā)送器或接收器使用(由器件的功能決定)°I2C總線最主要的優(yōu)點(diǎn)是其簡(jiǎn)單性和有效性。由于接口直接在組件之上,因此I2C總線占用的空間非常小,減少了電路板的空間和芯片管腳的數(shù)量,降低了互聯(lián)成本。I2C總線的另一個(gè)優(yōu)點(diǎn)是,它支持多主控制(multimastering),其中任何能夠進(jìn)行發(fā)送和接收的設(shè)備都可以成為主設(shè)備,而當(dāng)其從總線上接收信息時(shí),又成為接收器(也叫從設(shè)備)。一個(gè)主控器能夠控制信號(hào)的傳輸和時(shí)鐘頻率。在任何時(shí)間點(diǎn)上只能有一個(gè)主控器。[4]連接多個(gè)I2C總線設(shè)備的可能性意味著超過(guò)一個(gè)以上主機(jī)可以同時(shí)嘗試初始化傳輸數(shù)據(jù),此時(shí)會(huì)產(chǎn)生仲裁過(guò)程進(jìn)行總線使用權(quán)的裁決。SDA和SCL均為雙向線路,都通過(guò)一個(gè)上拉電阻連接到電源電壓的正端,當(dāng)總線空閑時(shí)這兩條線路都是高電平。連接到總線的器件是通過(guò)線與的功能互連的,因此輸出級(jí)應(yīng)設(shè)計(jì)為漏極開(kāi)路或集電極開(kāi)路。I2C總線上數(shù)據(jù)的傳輸速率在標(biāo)準(zhǔn)模式下可達(dá)100kbit/s,在快速模式下可達(dá)400kbit/s,在高速模式下可達(dá)3.4Mbit/s。[1]1.4LM75A簡(jiǎn)介L(zhǎng)M75A數(shù)字溫度傳感器是一種內(nèi)置帶隙溫度傳感器,應(yīng)用工-△模數(shù)轉(zhuǎn)換技術(shù)提供過(guò)熱檢測(cè)輸出的溫度監(jiān)測(cè)器。LM75A內(nèi)部包含多個(gè)數(shù)據(jù)寄存器:(1)配置寄存器(Conf):用來(lái)存儲(chǔ)器件的配置,如:器件工作模式、OS工作模式、OS極性和OS故障隊(duì)列;(2)溫度寄存器(Temp):用來(lái)存儲(chǔ)讀取的數(shù)字溫度;設(shè)定點(diǎn)寄存器(Tos&Thyst):用來(lái)存儲(chǔ)可編程的過(guò)熱關(guān)斷和滯后限制。器件通過(guò)2線的串行I2C總線接口與控制器通信°LM75A包含一個(gè)開(kāi)漏輸出(OS),當(dāng)溫度超過(guò)編程限制的值時(shí)該輸出有效。LM75A有3個(gè)可選的邏輯地址管腳,使得同一總線上可同時(shí)連接8個(gè)器件而不發(fā)生地址沖突。LM75AOS輸出有2種可選的工作模式:OS比較器模式和OS中斷模式。OS輸出可選擇高電平或低電平有效。溫度寄存器可存放一個(gè)11位的二進(jìn)制補(bǔ)碼,從而實(shí)現(xiàn)0.125°C的精度。在缺省模式下,OS工作在比較器模式,溫度閾值為80C,滯后75CO[2]二.系統(tǒng)設(shè)計(jì)詳述2.1系統(tǒng)總體方案設(shè)計(jì)FPGA不像單片機(jī)那樣逐條執(zhí)行程序,而是以并行運(yùn)算為主,以硬件描述語(yǔ)言來(lái)完成電路設(shè)計(jì)。因此,基于FPGA的溫度測(cè)量系統(tǒng)具有運(yùn)行速度更快,支持大量數(shù)據(jù)的高速處理等優(yōu)點(diǎn)。應(yīng)用VerilogHDL(hardwaredescriptionlanguage)語(yǔ)言編寫(xiě)的程序?qū)懭隖PGA后,能形成實(shí)際電路。FPGA的內(nèi)部程序是并行操作,所以硬件電路不會(huì)存在程序逐條執(zhí)行的問(wèn)題,且FPGA硬件的數(shù)據(jù)處理速度非常快,可達(dá)到ns級(jí)別,因而本系統(tǒng)比單片機(jī)系統(tǒng)能更迅速、實(shí)時(shí)地監(jiān)測(cè)信號(hào)的變化和及時(shí)更新數(shù)據(jù)。[5]本文將Altera公司生產(chǎn)的FPGA芯片EP2C35F672C8作為處理器。此芯片有475個(gè)可自由分配的I/O口連接外設(shè)很方便。該芯片采用60nm低功耗工藝,與單片機(jī)系統(tǒng)相比,系統(tǒng)總功率消耗更低。在綜合考慮穩(wěn)定性、可實(shí)現(xiàn)性以及精確性之后,提出了基于FPGA和LM75A的溫度系統(tǒng)設(shè)計(jì)方案。該系統(tǒng)總體設(shè)計(jì)框圖1所示。圖1系統(tǒng)總體設(shè)計(jì)框圖2.2電路原理圖圖2LM75A與FPGA的接口電路分析:由于SDA、OS與SCL均為開(kāi)漏輸出,必須加上拉電阻。A0A1A2為器件標(biāo)識(shí),000為L(zhǎng)M75A的身份標(biāo)識(shí),故全部接地。驅(qū)動(dòng)電壓為1.8-5.4V,故可接3.3V電壓源。三?系統(tǒng)硬件電路設(shè)計(jì)基于FPGA和LM75A的測(cè)溫系統(tǒng)總體分為2個(gè)部分:溫度采集電路、溫度顯示電路。3.1溫度采集電路設(shè)計(jì)溫度采集電路主要由LM75A組成(如圖3所示)。OS與VCC接口接3.3V電源,SDA與SCL分別接上拉電阻,與主控芯片IIC接口相連,A0,A1,A2接地。SUAVCCSflAl;OSAlcmA2IVI/?A176圖3溫度采集電路圖3.2LM75A詳述

LM75A是具有IIC接口的數(shù)字溫度傳感器,管腳有8個(gè),分別為A2,A1,AO,OS,SCL(串行時(shí)鐘線),SDA(串行雙向數(shù)據(jù)線)VCC,GND。其內(nèi)部集成了很多器件,有IIC總線接口、邏輯控制接口、帶隙溫度傳感器、11位模擬轉(zhuǎn)數(shù)字轉(zhuǎn)換器以及各種寄存器等。存儲(chǔ)器件的某些配置的寄存器(Conf)、存儲(chǔ)數(shù)字溫度的寄存器(Temp)也都包含在內(nèi)。LM75A測(cè)溫最大范圍為-55~+125°C,測(cè)溫精度0.125C。SCL和SDA構(gòu)成IIC串行總線,可以實(shí)現(xiàn)多個(gè)器件之間的主從式通信;OS為過(guò)熱關(guān)斷輸出接口,外部可連接檢測(cè)器或中斷線,當(dāng)溫度超過(guò)設(shè)定溫度值時(shí)該輸出有效;VCC,GND分別接系統(tǒng)電源和地;A0~A2是用戶(hù)自定義地址位,通過(guò)對(duì)AO,A1和A2的邏輯定義,可以使8個(gè)LM75A接在同一總線而不會(huì)有地址沖突。由于系統(tǒng)只采用了一個(gè)測(cè)溫器件測(cè)量溫度,所以電路中AO,A1,A2接地,邏輯地址為0。溫度寄存器(Temp)是一個(gè)由高8位字節(jié)和一個(gè)低8位字節(jié)組成的只讀寄存器,其中僅有高11位被存放到Temp數(shù)據(jù),其余低5位為0[8]。Temp數(shù)據(jù)的分辨率為0.125C,當(dāng)讀到Temp寄存器時(shí),所有16位數(shù)據(jù)都提供給總線。若Temp數(shù)據(jù)的最高有效位為邏輯0,則表示溫度是正值,溫度值(C)=+(Temp數(shù)據(jù))*0.125C;若Temp數(shù)據(jù)的最低有效位為邏輯1,則表示溫度是負(fù)值,溫度值(C)=-(-Temp數(shù)據(jù)+1)*0.125C。在進(jìn)行溫度采集前,F(xiàn)PGA必須先對(duì)LM75A器件初始化,包括對(duì)LM75A的地址選擇,滯后寄存器、配置寄存器等的數(shù)據(jù)寫(xiě)入等。初始化完成之后,從LM75A器件的Temp中讀取當(dāng)前溫度。[2]LM75A的功能框圖如下:

圖圖4功能框圖LM75A的管腳描述如下:SDA1O8|VccSCL2A0OS3AlGND45|A2圖5LM75A的管腳描述圖管腳編號(hào)助記符描逑1SDA數(shù)7ioii°Fc申行雙向數(shù)據(jù)線.開(kāi)漏愉出.■SCL數(shù)字輸入Fc串行時(shí)鐘輸人*3OS過(guò)熱關(guān)慚愉嘰開(kāi)漏輸血4GND地*連接到系統(tǒng)地“>A2數(shù)?輸入。用戶(hù)定義的地址位2.Al數(shù)子輸入.用戶(hù)定丈的地址位1*-rAO數(shù)字輸入。用戶(hù)崔義的地址位Q。sVcc電源。表1LM75A的管腳描述表LM75A內(nèi)部溫度寄存器工作原理如下:TempMS字節(jié)TempLS字節(jié)MSBLSBMSBLSBB6B5B3B2BlBOB7B6B5B4BSB2HIBOTamp數(shù)據(jù)(11未愷用MSBLSBDIODPD$:廠DOD5D4DiD:DlDOXXXXX覩據(jù)I!位的T.mp數(shù)據(jù)左計(jì)算Trmp值9昉法:若D10=0溫度值(X)~+Ternp劑0瞎)耳讓125°C;若010=1」溫度值(T)--Temp數(shù)據(jù)的二進(jìn)制辛嗣)泄]邛匸表2溫度寄存器工作原理四.Verilog代碼設(shè)計(jì)VHDL、AHDL、FPGA的設(shè)計(jì)輸入方法有原理圖和硬件描述語(yǔ)言(包括VerilogHDL等)2VHDL、AHDL、1) 從功能描述到物理實(shí)現(xiàn)完全符合設(shè)計(jì)者的設(shè)計(jì)思路。2) 設(shè)計(jì)可以重復(fù)利用,能應(yīng)用在不同的產(chǎn)品設(shè)計(jì)中。3) 容易修改設(shè)計(jì)。設(shè)計(jì)者可以在門(mén)消耗以及時(shí)序2方面對(duì)FPGA的結(jié)構(gòu)進(jìn)行比較,從而選擇最佳的設(shè)計(jì)方案。4) 設(shè)計(jì)周期短,效率高。采用自頂向下設(shè)計(jì)方法的效率可以達(dá)到傳統(tǒng)原理圖設(shè)計(jì)方法的2~4倍。鑒于自頂向下設(shè)計(jì)方法的諸多特點(diǎn),本系統(tǒng)軟件部分采用自頂向下模塊化設(shè)計(jì)思想進(jìn)行設(shè)計(jì),主要包括IIC通信模塊、溫度顯示模塊等。4.1IIC通信模塊FPGA和LM75A兩者之間的通信嚴(yán)格按照IIC總線管理定義的規(guī)則。在LM75A檢測(cè)溫度時(shí),須先對(duì)LM75A初始化,即對(duì)其配置寄存器寫(xiě)入控制字進(jìn)行工作模式的設(shè)定。寫(xiě)配置寄存器時(shí)序如圖6所示。I2T亠rI; h土JI:I亠七I;7 !< ;;I■ ; 4 ■■d I■bLrLrLrLrutruVUtrLnArLArLn/JvrLTLnArLrLTL/j—I 士HL工応,圖6讀溫度寄存器時(shí)序通信開(kāi)始前,IIC總線一定要有空間或者不忙,這就要求總線上的器件必須釋放SDA和SCL線。主機(jī)啟動(dòng)起始信號(hào)S后,開(kāi)始對(duì)配置寄存器寫(xiě)入要選擇的器件地址,硬件電路圖中的A0,A1,A2與地相接,因此器件的邏輯地址是“000”,再將“00000001”寫(xiě)入寄存器地址指針,等待器件響應(yīng)一個(gè)系統(tǒng)時(shí)鐘周期后,再進(jìn)行工作模式的寫(xiě)入。完成上述步驟后,LM75A開(kāi)始工作,若在正常工作模式下,每隔100ms進(jìn)行一次轉(zhuǎn)換(模數(shù)轉(zhuǎn)換),轉(zhuǎn)換的結(jié)果存放在Temp寄存器中。FPGA讀取Temp寄存器中的數(shù)據(jù),對(duì)其處理后,就能得到溫度數(shù)據(jù)。FPGA讀取Temp寄存器中的數(shù)據(jù)也需嚴(yán)格按照IIC總線管理定義的規(guī)則。讀取溫度數(shù)據(jù)的時(shí)序圖如圖7所示。由于系統(tǒng)時(shí)鐘為50MHz,為了方便分頻,選擇用800kHz的頻率作為L(zhǎng)M75A

的時(shí)鐘頻率,即SCL時(shí)鐘頻率為800kHz。由時(shí)序圖8可知,62個(gè)時(shí)鐘周期即可完成一次讀操作;該計(jì)數(shù)器控制SDA相對(duì)于SCL的相位關(guān)系,此時(shí)SDA的時(shí)鐘頻率為400kHz。吐匸JumiiTLiTrLrLrIz[吐匸JumiiTLiTrLrLrIz[丄孑& ?&盤(pán)jmrun/uVuYy| 8?件11出L「——4圖7讀溫度寄存器時(shí)序4.2狀態(tài)機(jī)的設(shè)計(jì)圖8圖8狀態(tài)轉(zhuǎn)換圖狀態(tài)編號(hào)狀態(tài)0起始/復(fù)位狀態(tài)1發(fā)送啟動(dòng)信號(hào)2發(fā)送控制字3接收應(yīng)答信號(hào)4發(fā)送指針地址5接收應(yīng)答信號(hào)6董新啟動(dòng)7發(fā)181^8制字E接收應(yīng)答信號(hào)9讀顫高$位信號(hào)10發(fā)送應(yīng)答11讀取低£位數(shù)據(jù)12気送韭應(yīng)答1言號(hào)13停止表3狀態(tài)機(jī)狀態(tài)表4.3溫度顯示模塊系統(tǒng)采用6位八段共陽(yáng)數(shù)碼管顯示溫度。為使6位數(shù)碼管動(dòng)態(tài)顯示溫度,可采用動(dòng)態(tài)掃描的方法依次點(diǎn)亮數(shù)碼管,當(dāng)掃描速度達(dá)到某個(gè)范圍時(shí),可利用人眼視覺(jué)暫留的特點(diǎn),使人感覺(jué)4位數(shù)碼管是在同一時(shí)間顯示。動(dòng)態(tài)掃描的頻率最好大于50Hz,每個(gè)數(shù)碼管顯示的時(shí)間要適中,不能過(guò)長(zhǎng)或過(guò)短,時(shí)間過(guò)長(zhǎng)則會(huì)出現(xiàn)閃爍的情況,時(shí)間過(guò)短發(fā)光二極管電流的導(dǎo)通時(shí)間也短,會(huì)導(dǎo)致數(shù)碼管亮度變暗。一般掃描時(shí)間控制在1~2ms左右。FPGA產(chǎn)生的掃描時(shí)間程序如下。//產(chǎn)生數(shù)碼管掃描的計(jì)數(shù)器,掃描時(shí)間為0.1msalways@(posedgesys_clkornegedgesys_rst_n)beginif(sys_rst_n==1'b0)scan_cnt<=16'b0;elsescan_cnt<=scan_cnt+16'b1;end其中,scan_cnt為16位寄存器,存儲(chǔ)計(jì)數(shù)值,記一次數(shù)的時(shí)間為1ms。syc_clk是系統(tǒng)時(shí)鐘信號(hào),sys_ret_n是系統(tǒng)復(fù)位信號(hào),c1~c4為數(shù)碼管位選信號(hào),seg_a~seg_h分別接數(shù)碼管的發(fā)光二極管,其中 seg_h控制小數(shù)點(diǎn)。lm75_temp是FPGA從器件LM75A采集到的11位溫度數(shù)據(jù)經(jīng)過(guò)計(jì)算后的數(shù)據(jù),其算法是:lm75_temp<=(buff[10:0]*125)/10;//存儲(chǔ)在緩存器buff中的11位數(shù)據(jù)經(jīng)計(jì)算后,賦值給lm75—temp寄存器。由于lm75—temp里面寄存的為二進(jìn)制數(shù)據(jù),所以需先轉(zhuǎn)成為BCD碼,才能輸出顯示。4.4系統(tǒng)整合在用VerilogHDL編程中,系統(tǒng)軟件部分采用模塊化設(shè)計(jì)。上文的IIC通信模塊和溫度顯示模塊為系統(tǒng)獨(dú)立模塊,故需編寫(xiě)頂層模塊(命名為top)將2個(gè)模塊整合起來(lái)。top模塊能定義各個(gè)管腳接口,從而使系統(tǒng)與外界進(jìn)行通信。top模塊通過(guò)頂層調(diào)用方法將iic(FPGA和LM75A通信模塊)和led(數(shù)碼管掃描顯示模塊)組合成為一個(gè)完整的系統(tǒng)。將完整的程序下載到FPGA芯片,系統(tǒng)即可測(cè)量環(huán)境溫度。kBfJitlenkEyJIter出匚AKeyjn[^^>-rsinIB=1:tjevkBfJitlenkEyJIter出匚AKeyjn[^^>-rsinIB=1:tjevri tevDidrat門(mén)lied汜=1: SEIl:jevrdratft (XjtfISJHIcl:retndsninnsin軸i2..mSEKF..D1 0l[?0] ”護(hù)訓(xùn)£—Ada圖9頂層方案圖五?仿真波形及說(shuō)明LrLTLTLn『LTLTLdOXUXO:■:■^■■■■■7JUUI.JUrfaMOLlYImom貳iXXKI二一□1lUTfThonH五?仿真波形及說(shuō)明LrLTLTLn『LTLTLdOXUXO:■:■^■■■■■7JUUI.JUrfaMOLlYImom貳iXXKI二一□1lUTfThonH-Mia盯 5KJinijiSil#htfjd酣iHsdsi■511D-%3_nuiTZzrSJTSJSJSSTXT3]|lp?]1liX>LnuTipum]U圖10仿真波形仿真結(jié)果分析:Clk為外部輸入時(shí)鐘,為50MHZ,初始值為l,;rst_n為系統(tǒng)復(fù)位,初值為0;key_rd為讀信號(hào),低電平有效;scl為iic的時(shí)鐘線;讀sda為iic的數(shù)據(jù)線;count為一個(gè)8位計(jì)數(shù)器,每計(jì)數(shù)31,clk_sys翻轉(zhuǎn)一次,即分頻產(chǎn)生800K的系統(tǒng)時(shí)鐘;,當(dāng)clk_sys或rst_n為下降沿時(shí),若總線忙,flag為1,scl翻轉(zhuǎn),產(chǎn)生近400K的時(shí)鐘,空閑時(shí)flag為0,scl為高;clk_sys上升沿或rst_n為下降沿;data_out為0,flag為1,sda_buffer為1,state轉(zhuǎn)為0狀態(tài),發(fā)送控制字,尋找從機(jī),寫(xiě)控制字10010000,從機(jī)發(fā)送應(yīng)答信號(hào)sda為0,仿真顯示為高阻狀態(tài),之后寫(xiě)指針,選定溫度寄存器,從機(jī)發(fā)送應(yīng)答sda為高阻,flag為0;再次啟動(dòng),寫(xiě)控制字,sda為10010001,進(jìn)行讀操作,等待從機(jī)發(fā)送應(yīng)答信號(hào),sda為高阻態(tài),flag為0;主機(jī)讀數(shù)據(jù),讀數(shù)據(jù)高8位,發(fā)送應(yīng)答,再讀低八位,讀數(shù)據(jù)時(shí)flag為低電平,sda為高阻態(tài)。之后發(fā)送非應(yīng)答信號(hào),scl為高電平時(shí),sda由低變?yōu)楦唠娖剑礊橥V?。?設(shè)計(jì)小組的分工及安排設(shè)計(jì)小組成員:范亞君胡花欣段郁丹設(shè)計(jì)工作主要涉及查閱資料、原理分析、代碼編寫(xiě)、仿真模擬、修正糾錯(cuò)、設(shè)計(jì)報(bào)告等內(nèi)容.設(shè)計(jì)分工及安排:1月4號(hào)至5號(hào)到圖書(shū)館及網(wǎng)上查閱相關(guān)資料.根據(jù)硬件特性分析原理.三人分別進(jìn)行初步編寫(xiě),然后互相修改各運(yùn)行模塊和測(cè)試模塊;其中范亞君負(fù)責(zé)iic.v文件的編寫(xiě),胡花欣負(fù)責(zé)iic_tb.v和top_tb.v測(cè)試文件的編寫(xiě),段郁丹負(fù)責(zé)top.v、led.v和key_filter.v文件的編寫(xiě)。在QuartusII13.0中進(jìn)行仿真模擬,驗(yàn)證其與預(yù)想結(jié)果是否一致,并進(jìn)行仿真分析,做相關(guān)細(xì)節(jié)修改.仿真結(jié)果檢驗(yàn)正確后,共同書(shū)寫(xiě)設(shè)計(jì)報(bào)告書(shū).七.收獲和體會(huì)本文設(shè)計(jì)實(shí)現(xiàn)了一種基于FPGA和LM75A的測(cè)溫系統(tǒng)。用FPGA的I/O引腳來(lái)模擬I2C總線實(shí)現(xiàn)主控制器,可以降低研制成本、節(jié)約空間和降低電路的復(fù)雜性,在實(shí)際應(yīng)用中有重大意義。其設(shè)計(jì)簡(jiǎn)單、功耗低、操作方便、響應(yīng)快、測(cè)量精度高。該系統(tǒng)可用于室內(nèi)溫度測(cè)量、室外動(dòng)植物生長(zhǎng)環(huán)境溫度測(cè)量等測(cè)溫場(chǎng)所,該測(cè)溫系統(tǒng)還可擴(kuò)展利用8個(gè)LM75A數(shù)字溫度傳感器測(cè)溫,從而實(shí)現(xiàn)多點(diǎn)大范圍測(cè)溫。通過(guò)這次課程設(shè)計(jì),我們對(duì)FPGA的整個(gè)開(kāi)發(fā)過(guò)程有了更加深入的了解,并有了實(shí)際動(dòng)手操作的經(jīng)驗(yàn),讓我更好的掌握了相關(guān)知識(shí)。通過(guò)FPGA器件,我們可以方便、快速開(kāi)發(fā)出很多復(fù)雜的數(shù)字電路以供實(shí)際需要,通過(guò)編寫(xiě)代碼省去了許多硬件連接,增強(qiáng)了系統(tǒng)的可靠性。在設(shè)計(jì)過(guò)程中,我們經(jīng)常需要修改、完善系統(tǒng)的功能,這也只是改變代碼并下載到芯片中就行了,省去了很多時(shí)間。本次課程設(shè)計(jì)是3人一組完成,這也鍛煉了我們之間合作的能力,這是十分必要的,因此今后在工作中必須要加強(qiáng)與他人的合作。由于verilog理論課程是在上一個(gè)學(xué)期學(xué)習(xí)的,經(jīng)過(guò)一個(gè)暑假,很多知識(shí)點(diǎn)都有遺忘,這給我們完成課程設(shè)計(jì)帶來(lái)了一定困難,好在老師對(duì)我們精心指導(dǎo),學(xué)校也提供實(shí)驗(yàn)室給我們實(shí)驗(yàn),在我們的共同合作下,我們終于克服困難,完成了課程設(shè)計(jì)。八?參考文獻(xiàn)褚振勇,翁木云.FPGA設(shè)計(jì)及應(yīng)用[M].西安:西安電子科技大學(xué)出版社,2002.LM75A數(shù)字溫度傳感器使用手冊(cè)楊新鵬.基于LM75A的多點(diǎn)溫度監(jiān)控系統(tǒng)設(shè)計(jì)[J].工業(yè)儀表與自動(dòng)化裝置,2013.譚會(huì)生,張昌凡.EDA技術(shù)及應(yīng)用[M].2版.西安:西安電子科技大學(xué)出版社,2004.夏宇聞.Verilog數(shù)字系統(tǒng)設(shè)計(jì)教程第3版北京航空航天大學(xué)出版社附錄:VerilogHDL程序清單程序清單名稱(chēng)文件名iic模塊源碼iic.vi讓模塊測(cè)試文件iictb?v頂層模塊源碼top.V頂層模塊測(cè)試文件數(shù)碼管顯示模塊源陷top_tb.vled.v按鍵消抖模塊源碼key_filter.v表3程序清單VerilogHDL語(yǔ)言源代碼和測(cè)試代碼iic.v文件代碼moduleiic(clk, //外部輸入時(shí)鐘rst_n, //系統(tǒng)復(fù)位key_rd, //讀信號(hào)(低電平有效)scl, //iic的數(shù)據(jù)線sda, //iic的時(shí)鐘線data_out //輸出數(shù)據(jù));//系統(tǒng)輸入inputclk;//外部輸入時(shí)鐘inputrst_n;//系統(tǒng)復(fù)位inputkey_rd;//讀信號(hào)(低電平有效)//系統(tǒng)輸出outputregscl; //iic的時(shí)鐘線outputreg[15:0]data_out;//輸出數(shù)據(jù)inoutsda;//iic的數(shù)據(jù)線regsda_buffer;//寫(xiě)入數(shù)據(jù)的中間寄存器regflag;//控制系統(tǒng)是否占有總線控制權(quán)assignsda=(flag)?sda_buffer:1'bz;/當(dāng)flag為高電平時(shí),系統(tǒng)擁有總線控制權(quán)//并發(fā)送sda_buffer中的數(shù)據(jù)。當(dāng)flag為低電平時(shí),//釋放總線。reg[7:0]count;//計(jì)數(shù)器regclk_sys;//系統(tǒng)時(shí)鐘// 分頻產(chǎn)生800Khz時(shí)鐘clk_sys always@(posedgeclkornegedgerst_n)beginif(!rst_n)beginclk_sys<=1'b0;count<=8'd0;endelseif(count<31)//分頻成為近800K的時(shí)鐘count<=count+1;elsebegincount<=8'd0;clk_sys<=~clk_sys;endend// reg[5:0]state;//狀態(tài)寄存器// 輸出scl always@(negedgeclk_sysornegedgerst_n)beginif(!rst_n)beginscl<=1'bl;//復(fù)位時(shí),scl為高endelsebeginif(state>0)//當(dāng)總線忙的時(shí)候,scl為近400K的時(shí)鐘scl<=~scl;elsescl<=l'bl;//空閑時(shí),scl為高endend// reg[3:0]cnt;//發(fā)送或者接收數(shù)據(jù)的個(gè)數(shù)reg[7:0]memory;//發(fā)送或者接受數(shù)據(jù)的中間寄存器always@(posedgeclk_sysornegedgerst_n)beginif(!rst_n)begindata_out<=16'd0;flag<=1'b1; //復(fù)位時(shí),系統(tǒng)獲得總線的控制權(quán)sda_buffer<=l'bl;//向iic的數(shù)據(jù)線上發(fā)送高電平state<=0;cnt<=0;memory<=8'd0;endelsecase(state)0:if(scl)beginif(!key_rd)//有按鍵按下beginsda_buffer<=1'b0; //發(fā)送啟動(dòng)信號(hào)state<=1;memory<=8'bl001_0000;//準(zhǔn)備控制字endelsestate<=0;endelsestate<=0;1:if((scl==0)&&(cnt<8))//發(fā)送八位控制字beginsda_buffer<=memory[7];cnt<=cnt+1;memory={memory[6:0],memory[7]};

state<=1;endelsebeginif((scl==0)&&(cnt==8))begincnt<=0;flag<=0;//釋放總線控制權(quán)state<=2;endelsebeginstate<=1;endend2://////

//

//if(!sda)////////

//

//beginstate<=3;memory<=8'b0000_0000;//指針寄存器temp地址endelsebeginstate<=0;end3:if((scl==0)&&(cnt<8))//發(fā)送指針地址beginflag<=1;//獲得總線控制權(quán)sda_buffer<=memory[7];cnt<=cnt+1;memory={memory[6:0],memory[7]};state<=3;endelsebeginif((scl==0)&&(cnt==8))begincnt<=0;flag<=0;//釋放總線控制權(quán)state<=4;endelse

beginstate<=3;endend4://if(!sda)//檢測(cè)應(yīng)答信號(hào)beginstate<=5;end////////elsebeginstate<=0;end5:if(!scl)//scl==0beginflag<=1;//獲得總線控制權(quán)sda_buffer<=1;//拉咼iic的數(shù)據(jù)線(為發(fā)送啟動(dòng)信號(hào)做準(zhǔn)備)state<=6;end:if(scl)beginsda_buffer<=0;//發(fā)送啟動(dòng)信號(hào)state<=7;memory<=8'b1001_0001;//控制字end:if((scl==0)&&(cnt<8))//發(fā)送八位控制字beginflag<=1;//獲得總線控制權(quán)sda_buffer<=memory[7];cnt<=cnt+1;memory<={memory[6:0],memory[7]};state<=7;endelsebeginif((scl==0)&&(cnt==8))begincnt<=0;flag<=0;//釋放總線控制權(quán)state<=8;endelsebeginstate<=7;endend8://if(!sda)//檢測(cè)應(yīng)答信號(hào)beginstate<=9;end////////elsebeginstate<=0;end9:if((scl==1)&&(cnt<8))//接收數(shù)據(jù)begincnt<=cnt+1;data_out<={data_out[14:0],sda};state<=9;endelsebeginif((scl==0)&&(cnt==8))begincnt<=0;flag<=1;//獲得總線控制權(quán)state<=10;sda_buffer<=0;//發(fā)送應(yīng)答信號(hào)endelsestate<=9;end:if(scl==0)beginflag<=0;state<=11;end:if((scl==1)&&(cnt<8))//接收數(shù)據(jù)begincnt<=cnt+1;data_out<={data_out[14:0],sda};state<=11;endelsebeginif((scl==0)&&(cnt==8))begincnt<=0;flag<=1;//獲得總線控制權(quán)state<=12;sdajbuffer<=1;//發(fā)送NOACK信號(hào)endelsestate<=11;end12:if(scl==0)beginsda_buffer<=0;//拉低iic的數(shù)據(jù)線(為發(fā)送停止信號(hào)做準(zhǔn)備)state<=13;endelsestate<=12;13:if(scl==1)//發(fā)送停止信號(hào)beginsda_buffer<=1;state<=0;endelsestate<=13;default:state<=0endcaseendendmoduleiic_tb.v文件代碼'timescalelns/lpsmoduleiic_tb;//系統(tǒng)輸入regelk;//外部輸入時(shí)鐘regrst_n;//系統(tǒng)復(fù)位regkey_rd;//讀信號(hào)(低電平有效)//系統(tǒng)輸出wirescl;//iic的時(shí)鐘線wire[15:0]data_out;//輸出數(shù)據(jù)wiresda;//iic的數(shù)據(jù)線iiciic(.clk(clk),//外部輸入時(shí)鐘.rst_n(rst_n),//系統(tǒng)復(fù)位.key_rd(key_rd),//讀信號(hào)(低電平有效).scl(scl), //iic的時(shí)鐘.sda(sda), //iic的數(shù)據(jù)線.data_out(data_out)//輸出數(shù)據(jù));initialbeginclk=1;rst_n=0;key_rd=1;#1000.1rst_n=1;#10000key_rd=0;//讀信號(hào)有效#40000key_rd=1;//讀寫(xiě)號(hào)釋放endalways#10clk=~clk;//50M的時(shí)鐘endmoduletop.v文件代碼moduletop(clk,rst_n,key_in,scl,sda,sel,//外部輸入時(shí)鐘//系統(tǒng)復(fù)位//讀信號(hào)(低電平有效)//iic的數(shù)據(jù)線//iic的時(shí)鐘線seg);inputclk;//外部輸入時(shí)鐘

inputrst_n;//系統(tǒng)復(fù)位

inputkey_in;//讀信號(hào)(低電平有效)//系統(tǒng)輸出outputscl; //iic的時(shí)鐘線inoutsda;//iic的數(shù)據(jù)線output[2:0]sel;output[7:0]seg;wirekey_out;wire[15:0]data_out;key_filterkey_filter(.clk(clk),.rst_n(rst_n),.key_in(key_in),.key_out(key_out));iiciic(.clk(clk),//外部輸入時(shí)鐘.rst_n(rst_n),//系統(tǒng)復(fù)位.key_rd(key_out),//讀信號(hào)(低電平有效).scl(scl),//iic的數(shù)據(jù)線.sda(sda),//iic的時(shí)鐘線.data_out(data_out)//輸出數(shù)據(jù)ledled(.clkledled(.clk.rst_n.data_in.sel.seg);(clk),(rst_n),(data_out),(sel),//位選(seg)//段選都是低電平點(diǎn)亮endmoduletop_tb.v文件代碼moduletop_tb;regclk; //外部輸入時(shí)鐘regrst_n; //系統(tǒng)復(fù)位regkey_in;//讀信號(hào)(低電平有效)wirescl; //iic的數(shù)據(jù)線wiresda; //iic的時(shí)鐘線wire[2:0]sel;wire[7:0]seg;initialbeginclk=1;rst_n=0;key_in=1;#1000.1rst_n=1;#10000key_in=0;//讀信號(hào)有效#40000key_in=1;//讀寫(xiě)號(hào)釋放endalways#10clk=~clk;//50M的時(shí)鐘toptop(.clk(clk),//外部輸入時(shí)鐘.rst_n(rst_n),//系統(tǒng)復(fù)位.key_in(key_in),//讀信號(hào)(低電平有效).scl(scl),//iic的數(shù)據(jù)線.sda(sda),//iic的時(shí)鐘線.sel(sel),.seg(seg));endmodulekey_filter.v文件代碼'timescalelns/lpsmodulekey_filter(clk,rst_n,key_in,key_out);parameterMASK_TIME=l_00;//20ms/20ns=10飛inputclk;inputrst_n;inputkey_in;outputregkey_out;localparams0=1'b0;localparams1=1'b1;regtemp;reg[31:0]count;regstate;always@(posedgeclk,negedgerst_n)beginif(!rst_n)begincount<=0;key_

溫馨提示

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

評(píng)論

0/150

提交評(píng)論