畢業(yè)論文----基于fpga的音頻編解碼芯片控制器設(shè)計(jì)_第1頁
已閱讀1頁,還剩64頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、<p>  基于FPGA的音頻編解碼芯片控制器設(shè)計(jì)</p><p><b>  摘要 </b></p><p>  現(xiàn)如今隨著可編程邏輯器件及相關(guān)技術(shù)的不斷發(fā)展和完善,其技術(shù)在現(xiàn)代電子技術(shù)領(lǐng)域表現(xiàn)出的明顯技術(shù)領(lǐng)先性,具有傳統(tǒng)方法無可比擬的優(yōu)越性。近幾年,嵌入式數(shù)字音頻產(chǎn)品受到越來越多消費(fèi)者的青睞。在MP3、手機(jī)等電子產(chǎn)品中,音頻處理功能已成為不可或缺的重要組

2、成部分,而高質(zhì)量的音效是當(dāng)前發(fā)展的重要趨勢(shì)。</p><p>  數(shù)字語音集成電路與嵌入式微處理器相結(jié)合,既實(shí)現(xiàn)了系統(tǒng)的小型化、低功耗,又降低了產(chǎn)品開發(fā)成本,提高了設(shè)計(jì)的靈活性,具有體積小、擴(kuò)展方便等諸多特點(diǎn),具有廣泛的發(fā)展前景。</p><p>  本設(shè)計(jì)基于SOPC技術(shù),利用Verilog HDL硬件描述語言開發(fā)的基于FPGA的音頻編解碼芯片控制器,以實(shí)現(xiàn)對(duì)音頻編解碼芯片WM8731的

3、控制。并根據(jù)Verilog HDL可移植性和不依賴器件的特點(diǎn)。經(jīng)過適當(dāng)?shù)男薷?,該控制器可以移植到各類FPGA中,以控制兼容I2C和I2S總線的音頻編解碼芯片。避免了重復(fù)開發(fā),這樣既縮短了設(shè)計(jì)周期又降低了設(shè)計(jì)成本,可大大提高設(shè)計(jì)的效率。系統(tǒng)在功能擴(kuò)展上具有極大的潛力,有很好的應(yīng)用前景和科研價(jià)值。</p><p>  關(guān)鍵詞:WM8731,F(xiàn)PGA,I2C總線,音頻控制器</p><p>  

4、The design of audio codec chip controller based by FPGA</p><p><b>  Abstract</b></p><p>  Nowadays, with the programmable logic devices and related technologies continue to develop a

5、nd improve its technology in the field of modern electronic technology was demonstrated technology leadership, has incomparable superiority of traditional methods. In recent years, embedded digital audio products are mor

6、e and more consumers of all ages. In MP3, mobile phones and other electronic products, audio processing features have become an indispensable part of the current development of high-qualit</p><p>  Digital v

7、oice integrated circuits and embedded microprocessors, which not only realized the system's small size, low power consumption, and reduced product development costs and improve design flexibility, small size, easy ex

8、pansion, and many other features, a broad prospects for development.</p><p>  The design is based on SOPC technology, the use of Verilog HDL hardware description language developed FPGA-based audio codec chi

9、p controller, to achieve the WM8731 audio codec chip control. Verilog HDL based on portability and does not rely on the device characteristics. After appropriate modifications, the controller can be ported to a variety o

10、f FPGA, to control I2C and I2S bus compatible audio codec chip. Avoid duplication of development, then it will shorten the design cycle and reducing de</p><p>  Keywords: WM8731, FPGA, I2C Bus, Audio control

11、ler</p><p><b>  目 錄</b></p><p><b>  1 緒論1</b></p><p>  1.1研究的背景及意義1</p><p>  1.2本設(shè)計(jì)的主要目的2</p><p><b>  2 器件介紹3</b>

12、;</p><p>  2.1 語音編/解碼芯片WM87313</p><p>  2.2 FPGA器件EP2C35F672C64</p><p><b>  3 協(xié)議介紹6</b></p><p>  3.1 I2C總線6</p><p>  3.1.1 I2C總線的數(shù)據(jù)的有效性

13、6</p><p>  3.1.2 I2C總線的數(shù)據(jù)格式及時(shí)序7</p><p>  3.1.3 I2C總線的尋址方式7</p><p>  3.2 I2S總線8</p><p>  3.1.1 I2S總線的數(shù)據(jù)格式及時(shí)序8</p><p>  3.1.2 I2S總線的數(shù)據(jù)采樣率9</p>

14、;<p>  4 硬件設(shè)計(jì)10</p><p>  4.1 硬件方框圖10</p><p>  4.2 ED-2 開發(fā)板11</p><p>  4.3 語音芯片WM8731 外圍電路11</p><p>  5 硬件模塊設(shè)計(jì)與實(shí)現(xiàn)12</p><p>  5.1 開發(fā)環(huán)境12&l

15、t;/p><p>  5.1.1 Quartus II12</p><p>  5.1.2 Verilog HDL12</p><p>  5.2 硬件模塊設(shè)計(jì)框圖13</p><p>  5.3 功能模塊的實(shí)現(xiàn)14</p><p>  5.3.1 頂層控制器模塊14</p><p>

16、;  5.3.2 時(shí)鐘分頻模塊15</p><p>  5.3.3 I2C時(shí)序接口模塊17</p><p>  5.3.4 I2C控制字配置模塊20</p><p>  5.3.5 I2S時(shí)序接口及音頻數(shù)據(jù)處理模塊27</p><p>  5.3.6 I2S串行數(shù)據(jù)轉(zhuǎn)并行數(shù)據(jù)模塊29</p><p>

17、;  6 系統(tǒng)調(diào)試31</p><p><b>  結(jié)論32</b></p><p><b>  致謝33</b></p><p><b>  參考文獻(xiàn)34</b></p><p><b>  附錄36</b></p><p

18、>  附錄1 電路圖36</p><p>  附錄2 源代碼36</p><p>  AUD_TOP .v37</p><p>  set_wm8731.v39</p><p>  i2c_com.v45</p><p>  I2S_com.v49</p><p>  I2

19、S_data.v53</p><p>  clkdivz .v55</p><p>  外文資料翻譯(附原文)60</p><p><b>  1 緒論</b></p><p>  1.1研究的背景及意義</p><p>  FPGA(Field-Programmable Gate Arr

20、ay),即現(xiàn)場可編程門陣列,它是在PAL、GAL、CPLD等可編程器件的基礎(chǔ)上進(jìn)一步發(fā)展的產(chǎn)物。它是作為專用集成電路(ASIC)領(lǐng)域中的一種半定制電路而出現(xiàn)的,既解決了定制電路的不足,又克服了原有可編程器件門電路數(shù)有限的缺點(diǎn)。</p><p>  目前以硬件描述語言(Verilog 或 VHDL)所完成的電路設(shè)計(jì),可以經(jīng)過簡單的綜合與布局,快速燒錄下載至 FPGA 上進(jìn)行測試,是現(xiàn)代 IC設(shè)計(jì)驗(yàn)證的技術(shù)主流。這些

21、可編輯元件可以被用來實(shí)現(xiàn)一些基本的邏輯門電路或者更復(fù)雜一些的組合功能比如解碼器或數(shù)學(xué)方程式。在大多數(shù)的FPGA里面,這些可編輯的元件里也包含記憶元件例如觸發(fā)器(Flip-flop)或者其他更加完整的記憶塊。</p><p>  系統(tǒng)設(shè)計(jì)師可以根據(jù)需要通過可編輯的連接把FPGA內(nèi)部的邏輯塊連接起來,就好像一個(gè)電路試驗(yàn)板被放在了一個(gè)芯片里。一個(gè)出廠后的成品FPGA的邏輯塊和連接可以按照設(shè)計(jì)者而改變,所以FPGA可以完

22、成所需要的邏輯功能。</p><p>  可以說,F(xiàn)PGA芯片是小批量系統(tǒng)提高系統(tǒng)集成度、可靠性的最佳選擇之一?,F(xiàn)如今隨著FPGA技術(shù)的飛速發(fā)展,幾十萬門乃至幾百萬門的可變成邏輯陣列使用起來越來越普遍。其技術(shù)在現(xiàn)代電子技術(shù)領(lǐng)域表現(xiàn)出的明顯技術(shù)領(lǐng)先性,具有傳統(tǒng)方法無可比擬的優(yōu)越性。</p><p>  再者近幾年,嵌入式數(shù)字音頻產(chǎn)品受到越來越多消費(fèi)者的青睞。在MP3、手機(jī)等消費(fèi)類電子產(chǎn)品中,

23、人們對(duì)于這些個(gè)人終端的要求早已不限于單純通話和簡單的文字處理,音頻處理功能已成為不可或缺的重要組成部分,而高質(zhì)量的音效是當(dāng)前發(fā)展的重要趨勢(shì)。</p><p>  相對(duì)于模擬語音系統(tǒng)而言,數(shù)字化語音系統(tǒng)抗干擾能力強(qiáng),數(shù)據(jù)傳輸可靠,開發(fā)周期較短,調(diào)試容易,便于計(jì)算機(jī)存儲(chǔ)和處理。而專用的語音芯片是數(shù)字化語音系統(tǒng)的核心。</p><p>  正是基于上述優(yōu)點(diǎn),數(shù)字語音集成電路與嵌入式微處理器相結(jié)合

24、,這樣既實(shí)現(xiàn)了系統(tǒng)的小型化、低功耗,又降低了產(chǎn)品開發(fā)成本,提高了設(shè)計(jì)的靈活性,具有體積小、擴(kuò)展方便等諸多特點(diǎn),具有廣泛的發(fā)展前景,如電腦語音鐘、語音型數(shù)字萬用表、手機(jī)話費(fèi)查詢系統(tǒng)、排隊(duì)機(jī)、監(jiān)控系統(tǒng)語音報(bào)警以及公共汽車報(bào)站器等。</p><p>  1.2本設(shè)計(jì)的主要目的</p><p>  本設(shè)計(jì)是針對(duì)音頻編解碼芯片WM8731,基于FPGA器件利用Verilog HDL硬件描述語言實(shí)現(xiàn)對(duì)

25、該芯片的控制,設(shè)計(jì)出基于FPGA的音頻編解碼芯片控制器。該控制器只要進(jìn)行適當(dāng)?shù)男拚?,更改寄存器的地址和?shù)據(jù),就可實(shí)現(xiàn)控制電路的移植。</p><p>  其主要內(nèi)容包括對(duì)音頻編/解碼芯片WM8731的I2C總線配置模塊的設(shè)計(jì)方法、I2S總線數(shù)據(jù)傳輸?shù)膶?shí)現(xiàn)等。將FPGA與數(shù)字語音系統(tǒng)的優(yōu)點(diǎn)相結(jié)合,設(shè)計(jì)出一個(gè)高質(zhì)量、易操作、易于移植的語音錄放系統(tǒng)。</p><p><b>  2

26、器件介紹</b></p><p>  本設(shè)計(jì)主要用到了Wolfson Microelectronics公司生產(chǎn)的一款低功耗高品質(zhì)雙聲道數(shù)字信號(hào)編/解碼芯片WM8731,以及控制該語音芯片工作的FPGA器件EP2C35F672C6。</p><p>  2.1 語音編/解碼芯片WM8731</p><p>  WM8731是一款低功耗的高品質(zhì)雙聲道數(shù)字信號(hào)

27、編/解碼芯片,其高性能耳機(jī)驅(qū)動(dòng)器、低功耗設(shè)計(jì)、可控采樣頻率、可選擇的濾波器使得M8731 芯片廣泛使用于便攜式MP3、CD播放器。其結(jié)構(gòu)框圖如圖2.1 所示。</p><p>  圖2.1 WM8731結(jié)構(gòu)框圖</p><p>  該芯片內(nèi)置耳機(jī)輸出放大器,支持MIC和LINE IN 兩種輸入方式,且對(duì)輸入和輸出都具有可編程增益調(diào)節(jié),針對(duì)音頻領(lǐng)域的應(yīng)用,該芯片高度集成了模擬電路功能。&l

28、t;/p><p>  它能為用戶提供在單個(gè)時(shí)鐘源下可獨(dú)立編程ADC和DAC的采樣率的獨(dú)特能力,其中模數(shù)轉(zhuǎn)換和數(shù)模轉(zhuǎn)換部件高度集成在芯片內(nèi)部,且其采樣頻率為8KHZ- 96KHZ可調(diào),可轉(zhuǎn)換的數(shù)據(jù)位長度為16- 32位可調(diào)。</p><p>  WM8731帶有一個(gè)片上時(shí)鐘發(fā)生器,支持多種時(shí)鐘模式。通過一個(gè)12MHz時(shí)鐘,該器件可以直接生成44.1kHz、48kHz和96kHz等采樣率,以及MP

29、3標(biāo)準(zhǔn)定義的其他采樣率,完全不需要一個(gè)獨(dú)立的鎖相環(huán)或晶振,并支持其他公用的主時(shí)鐘頻率。</p><p>  WM8731內(nèi)部有11個(gè)寄存器。該芯片的初始化和內(nèi)部功能設(shè)置是以控制接口對(duì)其內(nèi)部的這11個(gè)寄存器進(jìn)行相應(yīng)的配置來實(shí)現(xiàn)的??刂破骺赏ㄟ^控制接口對(duì)WM8731中的寄存器進(jìn)行編程配置,該控制接口符合的SPI(三線操作)和I2C(雙線操作)規(guī)范。通過對(duì)MODE端口的狀態(tài)來選擇控制接口類型。WM8731支持右對(duì)齊、左

30、對(duì)齊、I2S以及DSP四種數(shù)字音頻接口模式,通過數(shù)字音頻接口讀寫數(shù)據(jù)音頻信號(hào)。</p><p>  由于具有上述優(yōu)點(diǎn),使得WM8731是一款非常理想的音頻模擬I/O 器件,可以很好地應(yīng)用在各種數(shù)字音頻領(lǐng)域。</p><p>  2.2 FPGA器件EP2C35F672C6</p><p>  本設(shè)計(jì)用到的是 Altera公司的 FPGA器件EP2C35F672C6,

31、該器件隸屬于Cyclone II系列,它采用了TSMC驗(yàn)證的90 nm低K介電質(zhì)工藝制造的成本優(yōu)化架構(gòu),具有更大的容量和極低的單位邏輯單元成本。從結(jié)構(gòu)上看,該器件具有多達(dá)150個(gè)嵌入18×18乘法器,適合于實(shí)現(xiàn)低成本數(shù)字信號(hào)處理(DSP)應(yīng)用;它包含每塊具有4608 bit的M4K存儲(chǔ)塊,提供高達(dá)1.1Mbit的片內(nèi)存儲(chǔ)器,支持多種配置;它能以688 Mbps 的速率同DDR、DDR II 和SDR SDRAM 器件及QDRI

32、I SRAM 器件相連接,并支持多種單端和差分I / O 標(biāo)準(zhǔn);支持Nios II系列嵌入式處理器,具有低成本和完整的軟件開發(fā)工具。</p><p>  Altera也為Cylcone II器件客戶提供了40多個(gè)可定制IP核,Altera和Altera Megafunction伙伴計(jì)劃(AMPPSM)合作者提供的不同的IP核是專為Cyclone II架構(gòu)優(yōu)化的,包括:Nios II嵌入式處理器;DDR SDRAM

33、控制器;FFT/IFFT;PCI編譯器;FIR編譯器;NCO編譯器;POS-PHY編譯器;Reed Solomon編譯器;Viterbi編譯器等等。</p><p><b>  3 協(xié)議介紹</b></p><p>  本設(shè)計(jì)主要涉及I2C總線和I2S總線兩種總線協(xié)議。I2C總線主要運(yùn)用在控制接口,F(xiàn)PGA器件通過該接口對(duì)語音編/解碼芯片WM8731控制字的寫入。而

34、I2S總線則是用在音頻數(shù)據(jù)接口,主要負(fù)責(zé)FPGA器件與語音編/解碼芯片的音頻數(shù)據(jù)傳輸。</p><p>  3.1 I2C總線</p><p>  I2C(Inter-Integrated Circuit,內(nèi)部集成電路)總線是Philips 公司開發(fā)的芯片間串行通訊總線,它利用SDI(串行數(shù)據(jù)線)和SCLK(串行時(shí)鐘線)兩根信號(hào)線將外圍通訊模塊連接起來,進(jìn)行數(shù)據(jù)傳輸。它具有沖突偵測和仲裁

35、能力,可防止兩個(gè)或兩個(gè)以上主機(jī)同時(shí)控制總線時(shí)數(shù)據(jù)被破壞。I2C總線以其接口簡單、總線通訊模塊可裁剪等特點(diǎn)獲得了廣泛的應(yīng)用。I2C總線控制器是處理器與I2C器件之間的接口,它要完成接收處理器的控制信號(hào)、命令和數(shù)據(jù),還需發(fā)送I2C器件的數(shù)據(jù)和狀態(tài)響應(yīng)到處理器,實(shí)現(xiàn)處理器與I2C器件之間的通信。隨著可編程器件的飛速發(fā)展,用FPGA 器件實(shí)現(xiàn)I2C總線控制器接口,可以帶來很多方面的便利:不但能夠增加系統(tǒng)的擴(kuò)展能力,而且控制方式極其靈活。<

36、/p><p>  3.1.1 I2C總線的數(shù)據(jù)的有效性</p><p>  SCLK為高電平期間,SDI線上的數(shù)據(jù)需保持不變,在器件之間傳遞數(shù)據(jù)。SCLK為低電平時(shí),數(shù)據(jù)線上的數(shù)據(jù)發(fā)生跳變,改變?yōu)橄乱晃粩?shù)據(jù)的狀態(tài)。</p><p>  3.1.2 I2C總線的數(shù)據(jù)格式及時(shí)序</p><p>  一個(gè)標(biāo)準(zhǔn)的I2C總線通信數(shù)據(jù)由開始信號(hào)、從機(jī)地址

37、信號(hào)、傳輸?shù)臄?shù)據(jù)和終止信號(hào)4部分組成。在I2C總線協(xié)議的技術(shù)規(guī)范中,規(guī)定每次發(fā)送到I2C總線SDI上的數(shù)據(jù)必須是一個(gè)字節(jié),每次傳輸可以發(fā)送的字節(jié)數(shù)量是不受限制的。傳輸?shù)臄?shù)據(jù)字節(jié)按照由高位到低位的順序發(fā)送,每發(fā)送一個(gè)字節(jié)后必須跟一個(gè)響應(yīng)位(應(yīng)答信號(hào)),即發(fā)送器每發(fā)送完一個(gè)字節(jié),將數(shù)據(jù)線SDI拉高,由主控制器產(chǎn)生第9個(gè)脈沖,接收器將SDI拉低,以此作為接收器對(duì)發(fā)送器的應(yīng)答。發(fā)送器在第9個(gè)脈沖探測SDI為低,表明接收器已成功接收到發(fā)送器發(fā)送的

38、一個(gè)字節(jié),可以繼續(xù)進(jìn)行后面的通信。該過程如圖3.1所示。</p><p>  圖3.1 I2C總線的數(shù)據(jù)時(shí)序</p><p>  3.1.3 I2C總線的尋址方式</p><p>  在起始條件產(chǎn)生后,主機(jī)向總線發(fā)送一個(gè)從機(jī)地址,第一個(gè)字節(jié)的頭7位(D7-D1)為從機(jī)地址,最低位(D0)R/W決定數(shù)據(jù)的傳輸方向。最低位R/W若為‘0’,表示向從機(jī)填寫數(shù)據(jù);為‘1

39、’,表示從從機(jī)讀取數(shù)據(jù)。當(dāng)發(fā)送一個(gè)地址后,連接到總線的每個(gè)設(shè)備都會(huì)將頭7位同設(shè)備自身地址進(jìn)行比較,若相同,則該設(shè)備為被主控設(shè)備尋址,并發(fā)送應(yīng)答信號(hào),根據(jù)R/W位決定讀寫工作方式。</p><p>  3.2 I2S總線</p><p>  I2S (Inter—IC Sound)總線是飛利浦公司為數(shù)字音頻設(shè)備之間的音頻數(shù)據(jù)傳輸而制定的一種總線標(biāo)準(zhǔn),該總線專責(zé)于音頻設(shè)備之間的數(shù)據(jù)傳輸,廣泛

40、應(yīng)用于各種多媒體系統(tǒng)。它采用了沿獨(dú)立的導(dǎo)線傳輸時(shí)鐘與數(shù)據(jù)信號(hào)的設(shè)計(jì),通過將數(shù)據(jù)和時(shí)鐘信號(hào)分離,避免了因時(shí)差誘發(fā)的失真,為用戶節(jié)省了購買抵抗音頻抖動(dòng)的專業(yè)設(shè)備的費(fèi)用。</p><p>  3.1.1 I2S總線的數(shù)據(jù)格式及時(shí)序</p><p>  I2S總線一般具有5根信號(hào)線,如圖3.2所示,包括位時(shí)鐘頻率(BCLK)、DAC采樣率時(shí)鐘(DACLRC)、ADC采樣率時(shí)鐘(ADCLRC)、串

41、行數(shù)據(jù)輸入( DACDAT)和串行數(shù)據(jù)輸出(ADCDAT)。其中DACLC、ADCLC和BCLK時(shí)鐘信號(hào)在主模式下由編解碼芯片提供,而在從模式下由FPGA或DSP提供。</p><p>  圖3.2 I2S總線的數(shù)據(jù)時(shí)序</p><p>  I2S格式的信號(hào)無論有多少位有效數(shù)據(jù),數(shù)據(jù)的最高位總是出現(xiàn)在LRC變化(也就是一幀開始)后的第2個(gè)位時(shí)鐘頻率(BCLK)脈沖處。這就使得接收端與發(fā)送

42、端的有效位數(shù)可以不同。如果接收端能夠處理的有效位數(shù)少于發(fā)送端,可以放棄數(shù)據(jù)幀中多余的低位數(shù)據(jù);如果接收端能夠處理的有效位數(shù)多于發(fā)送端,可以自行補(bǔ)足剩余的位。這種同步機(jī)制使得數(shù)字音頻設(shè)備的互連更加方便,而且不會(huì)造成數(shù)據(jù)錯(cuò)位。</p><p>  3.1.2 I2S總線的數(shù)據(jù)采樣率</p><p>  I2S總線的數(shù)據(jù)采樣率可以通過主設(shè)備的時(shí)鐘頻率(MCLK)以及采樣頻率類型( 256fs或

43、384fs)來選擇。其計(jì)算公式為:數(shù)據(jù)采樣率= MCL K / 采樣頻率類型。例如主設(shè)備的時(shí)鐘頻率為18.432 MHz,若選擇采樣頻率類型為384fs,則MCLK經(jīng)過384分頻,即得到I2S總線的數(shù)據(jù)采樣率為48KHz。</p><p>  而位時(shí)鐘頻率(BCLK)的計(jì)算公式為:位時(shí)鐘頻率 = 數(shù)據(jù)采樣率×數(shù)據(jù)位×2。則上例中令數(shù)據(jù)位為17,則位時(shí)鐘頻率為1.632MHz。</p>

44、;<p><b>  4 硬件設(shè)計(jì)</b></p><p>  4.1 硬件方框圖</p><p>  硬件方框圖如圖4.1所示。</p><p>  圖4.1 硬件方框圖</p><p>  其中FPGA器件處于中心地位,F(xiàn)PGA器件主要通過I2C總線給語音芯片WM8731經(jīng)行控制字配置。初始化完成

45、后,音頻數(shù)據(jù)從MIC或Line In輸入,經(jīng)過A/D轉(zhuǎn)換后,成為串行的數(shù)字信號(hào)并由I2S總線傳入FPGA器件。經(jīng)過串并變換等處理之后,再經(jīng)過D/A轉(zhuǎn)換由Line Out輸出。</p><p>  4.2 ED-2 開發(fā)板</p><p>  本設(shè)計(jì)主要用到了Altera公司推出的ED-2開發(fā)板,該開發(fā)板是以FPGA器件EP2C35F672C6為核心,板上含有Flash、SRAM等存儲(chǔ)器,

46、標(biāo)準(zhǔn)MIC、Line-in、Line-out接口,Video-in和VGA等音頻視頻接口,以及各種輸入輸出設(shè)備。利用該開發(fā)板能方便設(shè)計(jì)開發(fā),以利于后續(xù)的功能擴(kuò)展。</p><p>  4.3 語音芯片WM8731 外圍電路</p><p>  ED-2開發(fā)板上已集成了語音芯片WM8731。并連接標(biāo)準(zhǔn)MIC、Line-in、Line-out接口以連接麥克風(fēng)和耳機(jī)等外部設(shè)備。其電路圖如圖4.

47、2所示。</p><p>  圖4.2 WM8731外圍電路</p><p>  5 硬件模塊設(shè)計(jì)與實(shí)現(xiàn)</p><p><b>  5.1 開發(fā)環(huán)境</b></p><p>  在硬件模塊設(shè)計(jì)部分,主要是利用Altera公司推出的FPGA/CPLD集成開發(fā)環(huán)境Quartus II,并使用硬件描述語言Verilog

48、 HDL對(duì)FPGA器件的編程設(shè)計(jì),以控制WM8731高品質(zhì)語音芯片正常工作,達(dá)到預(yù)期的功能。</p><p>  5.1.1 Quartus II</p><p>  Quartus II 是Altera公司的綜合性PLD開發(fā)軟件,支持原理圖、VHDL、Verilog HDL以及AHDL(Altera Hardware Description Language)等多種設(shè)計(jì)輸入形式,內(nèi)嵌自有

49、的綜合器以及仿真器,可以完成從設(shè)計(jì)輸入到硬件配置的完整PLD設(shè)計(jì)流程。提供了完善的用戶圖形界面設(shè)計(jì)方式。具有運(yùn)行速度快,界面統(tǒng)一,功能集中,易學(xué)易用等特點(diǎn)。</p><p>  Quartus II支持Altera的IP核,包含了LPM/Mega Function宏功能模塊庫,使用戶可以充分利用成熟的模塊,簡化了設(shè)計(jì)的復(fù)雜性、加快了設(shè)計(jì)速度。</p><p>  5.1.2 Verilog

50、 HDL</p><p>  Verilog HDL是一種硬件描述語言,是一種以文本形式來描述數(shù)字系統(tǒng)硬件的結(jié)構(gòu)和行為的語言,用它可以表示邏輯電路圖、邏輯表達(dá)式,還可以表示數(shù)字邏輯系統(tǒng)所完成的邏輯功能。 Verilog HDL由Gateway Design Automation公司開發(fā),是目前世界上最流行的硬件描述語言之一。</p><p>  5.2 硬件模塊設(shè)計(jì)框圖</p>

51、;<p>  硬件模塊設(shè)計(jì)框圖,如圖5.1所示。</p><p>  圖5.1 硬件模塊設(shè)計(jì)框圖</p><p>  硬件模塊的設(shè)計(jì)大致包含頂層控制器模塊、時(shí)鐘分頻模塊、I2C控制字配置模塊、I2C時(shí)序接口模塊、I2S時(shí)序接口及音頻數(shù)據(jù)處理模塊、I2S串行數(shù)據(jù)轉(zhuǎn)并行數(shù)據(jù)模塊等6個(gè)模塊。</p><p>  5.3 功能模塊的實(shí)現(xiàn)</p>

52、<p>  5.3.1 頂層控制器模塊</p><p>  此模塊主要實(shí)現(xiàn)的功能是對(duì)上述其余5個(gè)模塊的配置以及連線。圖5.2所示為該模塊的設(shè)計(jì)結(jié)果。</p><p>  圖5.2 頂層控制器模塊</p><p>  其Verilog HDL描述的設(shè)計(jì)關(guān)鍵代碼如下:</p><p>  module AUD_TOP(clock

53、_50m,sclk,sdat,dacclk,dacdat,bclk,adcdat,adcclk,rst_n,key1,key2,led1,led2,led,MCLK,sw1,sw2,LED); // 端口定義</p><p><b>  …… ……</b></p><p>  assign led=rst_n; // 復(fù)位按鈕連接一個(gè)LED燈,顯示按鈕狀

54、態(tài)</p><p>  assign MCLK=c0; // 18.432MHz主時(shí)鐘輸入</p><p>  set_wm8731(.clock_50m(clock_50m), // I2C控制字配置模塊端口連接</p><p>  .i2c_sclk(sclk),.i2c_sdat(sdat),.reset_n(rst_n),.key1(ke

55、y1),</p><p>  .key2(key2),.led1(led1),.led2(led2),.sw1(sw1),.sw2(sw2)); </p><p>  I2S_com(.clock_ref(c0), // I2S時(shí)序接口及音頻數(shù)據(jù)處理模塊端口連接</p><p>  .dacclk(dacclk),.bclk(bclk),.dacdat(d

56、acdat),.reset_n(rst_n),</p><p>  .adcclk(adcclk),.adcdat(adcdat),.data(data));</p><p>  clkdivz (.inclk0(clock_50m),.c0(c0)); //時(shí)鐘分頻模塊端口連接</p><p><b>  endmodule</b>

57、</p><p>  5.3.2 時(shí)鐘分頻模塊</p><p>  由于要使WM8731工作,必須給其提供一個(gè)主時(shí)鐘頻率。此主時(shí)鐘頻率依照該芯片工作的不同模式有12.288MHz、18.432 MHz、11.2896 MHz以及16.9344 MHz這4中頻率可選。</p><p>  在本設(shè)計(jì)中,選擇WM8731工作在普通模式(Normal mode)下,并選擇

58、18.432 MHz為其主時(shí)鐘頻率。該頻率可以通過XTI和XTO端口,由晶振提供。但本設(shè)計(jì)利用FPGA自帶的鎖相環(huán)(PLL)和全局時(shí)鐘網(wǎng)絡(luò),將DE2開發(fā)板上自帶的50MHz晶振分頻得到。因此本模塊主要運(yùn)用Quartus II環(huán)境下的Mega Wizard定制功能自動(dòng)生成的。但由于50MHz不能精確地分頻到18.432MHz,所以采用了一個(gè)能分到一個(gè)最接近的頻率,即18.421053MHz。</p><p>  如

59、圖5.3所示,該模塊以50MHz的時(shí)鐘為輸入,輸出18.432MHz分別連接到MCLK以及I2S時(shí)序接口及音頻數(shù)據(jù)處理模塊的時(shí)鐘輸入。</p><p>  圖5.3 時(shí)鐘分頻模塊</p><p>  該模塊Verilog HDL描述的設(shè)計(jì)關(guān)鍵代碼如下:</p><p>  module clkdivz ( // 端口定義</p>

60、<p>  inclk0, // 50MHz時(shí)鐘輸入</p><p>  c0); // 18.432MHz時(shí)鐘輸出</p><p><b>  …… ……</b></p><p>  altpll altpll_component (.inclk (sub_wire3), //

61、 調(diào)用altpll IP核</p><p>  .clk (sub_wire0),</p><p><b>  …… ……</b></p><p>  .vcounderrange ());</p><p><b>  defparam</b></p><p>  altpl

62、l_component.clk0_divide_by = 3125,</p><p>  altpll_component.clk0_duty_cycle = 50,</p><p>  altpll_component.clk0_multiply_by = 1152,</p><p>  altpll_component.clk0_phase_shift = &q

63、uot;0",</p><p>  altpll_component.compensate_clock = "CLK0",</p><p>  altpll_component.inclk0_input_frequency = 20000,</p><p>  altpll_component.intended_device_famil

64、y = "Cyclone II",</p><p><b>  …… ……</b></p><p><b>  endmodule</b></p><p>  5.3.3 I2C時(shí)序接口模塊</p><p>  該模塊主要實(shí)現(xiàn)對(duì)I2C時(shí)序的模擬,控制SCLK(數(shù)據(jù)時(shí)鐘)和SDA

65、T(數(shù)據(jù)線)將存放在i2c_data中的24位控制字串行發(fā)送給WM8731,該模塊例化于I2C控制字配置模塊之中,以實(shí)現(xiàn)對(duì)該芯片的控制字寫入。</p><p>  如圖5.4所示,在此模塊中i2c_data為24位控制字寫入;reset_n為復(fù)位輸入;clock_i2c為I2C接口傳輸時(shí)鐘;start為傳輸開始標(biāo)志輸入;ack為I2C時(shí)序中3位應(yīng)答位進(jìn)行或操作合并為一個(gè)應(yīng)答位的輸出;tr_end為傳輸結(jié)束信號(hào)輸出

66、; i2c_sclk為I2C接口數(shù)據(jù)時(shí)鐘輸出;i2c_sdat為I2C接口串行數(shù)據(jù)輸出。</p><p>  圖5.4 I2C時(shí)序接口模塊</p><p>  I2C時(shí)序接口模塊時(shí)序仿真,如圖5.5所示。此處以i2c_data中24位數(shù)據(jù)為0111 0011 1000 0100 1100 0111為例,當(dāng)start信號(hào)拉低后,i2c_sclk開始傳輸串行數(shù)據(jù)時(shí)鐘。這里I2C時(shí)序采用33個(gè)

67、I2C時(shí)鐘周期進(jìn)行,其中4-11位、13-20位、22-29位傳送數(shù)據(jù),12、21、30為應(yīng)答位。傳輸狀態(tài)時(shí),數(shù)據(jù)高位在前低位在后,24位數(shù)據(jù)每8位為一字節(jié),每發(fā)送1個(gè)字節(jié)的數(shù)據(jù),就應(yīng)返回一個(gè)應(yīng)答信號(hào)將i2c_sdat狀態(tài)拉高??臻e狀態(tài)時(shí),i2c_sdat為高阻態(tài),i2c_sclk為高電平狀態(tài)。</p><p>  圖5.5 I2C時(shí)序接口模塊時(shí)序仿真</p><p>  該模塊的Ver

68、ilog HDL設(shè)計(jì),關(guān)鍵代碼如下:</p><p>  module i2c_com(clock_i2c,reset_n,ack,i2c_data,start,tr_end,i2c_sclk,i2c_sdat); </p><p><b>  …… ……</b></p><p>  assign ack=ack1|ack2|ac

69、k3; // 應(yīng)答信號(hào)</p><p>  assign i2c_sclk=sclk|(((cyc_count>=4)&(cyc_count<=30))?~clock_i2c:0);</p><p><b>  // 數(shù)據(jù)時(shí)鐘</b></p><p>  assign i2c_sdat=reg_sdat?

70、1'bz:0; // 串行數(shù)據(jù)線</p><p>  always@(posedge clock_i2c or negedge reset_n) // 模擬I2C傳輸數(shù)據(jù)時(shí)鐘</p><p><b>  begin</b></p><p>  if(!reset_n) // 復(fù)位</p>

71、;<p>  cyc_count<=6'b111111;</p><p>  else begin</p><p>  if(start==0)</p><p>  cyc_count<=0;</p><p>  else if(cyc_count<6'b111111)</p>&

72、lt;p>  cyc_count<=cyc_count+1;</p><p><b>  end</b></p><p><b>  end</b></p><p>  always@(posedge clock_i2c or negedge reset_n) // 模擬I2C傳輸串行數(shù)據(jù)</p>

73、<p><b>  begin</b></p><p>  if(!reset_n) // 復(fù)位</p><p><b>  begin</b></p><p><b>  …… ……</b></p><p><b>  else

74、</b></p><p>  case(cyc_count) // I2C時(shí)鐘周期賦值</p><p>  0:begin ack1<=1;ack2<=1;ack3<=1;tr_end<=0;sclk<=1;reg_sdat<=1;</p><p><b>  end</b>&l

75、t;/p><p>  1:reg_sdat<=0; // 開始傳輸</p><p><b>  …… ……</b></p><p>  10:reg_sdat<=i2c_data[16];</p><p>  11:reg_sdat<=1; /

76、/應(yīng)答信號(hào)1</p><p>  12:begin reg_sdat<=i2c_data[15];ack1<=i2c_sdat;end</p><p><b>  …… ……</b></p><p>  19:reg_sdat<=i2c_data[8];</p><p>  20:reg_sdat<

77、;=1; //應(yīng)答信號(hào)2</p><p>  21:begin reg_sdat<=i2c_data[7];ack2<=i2c_sdat;end</p><p><b>  …… ……</b></p><p>  28:reg_sdat<=i2c_data[0];</p><p&

78、gt;  29:reg_sdat<=1; //應(yīng)答信號(hào)3</p><p><b>  …… ……</b></p><p>  32:begin reg_sdat<=1;tr_end<=1;end</p><p><b>  endcase</b></p><

79、p><b>  end</b></p><p><b>  endmodule</b></p><p>  5.3.4 I2C控制字配置模塊</p><p>  該模塊是基于I2C時(shí)序接口模塊之上的控制單元。如圖5.6所示,該模塊主要實(shí)現(xiàn)對(duì)語音芯片WM8731的初始配置、生成I2C控制時(shí)鐘、輸出音量控制以及輸出模式

80、選擇等功能。以下將以實(shí)現(xiàn)的功能為單位來介紹該模塊。</p><p>  圖5.6 I2C控制字配置模塊</p><p><b>  初始配置</b></p><p>  初始配置功能是本模塊要實(shí)現(xiàn)的主要功能。該部分主要是對(duì)I2C時(shí)序接口模塊例化,并向該模塊寫入預(yù)設(shè)定的控制字以及開始信號(hào)、等待結(jié)束信號(hào)、校驗(yàn)應(yīng)答信號(hào),以實(shí)現(xiàn)I2C設(shè)置過程。針對(duì)語

81、音芯片WM8731的10個(gè)控制寄存器預(yù)設(shè)控制字,并逐個(gè)周期將預(yù)設(shè)定的控制字寫入該芯片。該部分關(guān)鍵Verilog HDL代碼如下所示。</p><p>  i2c_com u1(.clock_i2c(clock_20k),.reset_n(reset_n),.ack(ack),</p><p>  .i2c_data(i2c_data),.start(start),.tr_end(tr_en

82、d),.i2c_sclk(i2c_sclk),</p><p>  .i2c_sdat(i2c_sdat)); // 例化I2C時(shí)序接口模塊</p><p>  always@(posedge clock_20k or negedge reset_n) // 配置過程控制</p><p><b>  begin</b></p

83、><p>  if(!reset_n)</p><p><b>  begin</b></p><p><b>  …… ……</b></p><p>  else // I2C設(shè)置過程</p><p><b>  begin&l

84、t;/b></p><p>  if(reg_index<11)</p><p><b>  begin</b></p><p>  case(config_step)</p><p><b>  0:begin</b></p><p>  i2c_data<

85、;={8'h34,reg_data}; // 寫入地址與控制字</p><p>  start<=1; // 寫入開始信號(hào)</p><p>  config_step<=1;</p><p><b>  end</b></p><p><b>  1:begin<

86、;/b></p><p>  if(tr_end) // 等待結(jié)束信號(hào)</p><p><b>  begin</b></p><p>  if(!ack) // 校驗(yàn)應(yīng)答信號(hào)</p><p>  config_step<=2;</p><p><b> 

87、 else</b></p><p>  config_step<=0;</p><p><b>  start<=0;</b></p><p><b>  end</b></p><p><b>  end</b></p><p>

88、;<b>  2:begin</b></p><p>  reg_index<=reg_index+1;</p><p>  config_step<=0;</p><p><b>  …… ……</b></p><p>  always@(reg_index) // I2

89、C配置預(yù)設(shè)數(shù)值</p><p><b>  begin</b></p><p>  case(reg_index)</p><p>  0:reg_data<=16'h011f;</p><p><b>  …… ……</b></p><p>  10:reg_

90、data<=left;</p><p>  default:reg_data<=16'h001a;</p><p><b>  endcase</b></p><p><b>  end</b></p><p><b>  生成I2C控制時(shí)鐘</b><

91、/p><p>  該部分是主要功能是產(chǎn)生I2C控制時(shí)鐘,由于WM8731允許的I2C控制時(shí)鐘在400KHz內(nèi)有效,所以無法直接用外設(shè)的50MHz的晶振頻率。出于簡單、易分頻的原則,本設(shè)計(jì)選用20KHz作為I2C總線的控制時(shí)鐘。該部分關(guān)鍵代碼如下:</p><p>  always@(posedge clock_50m or negedge reset_n) // 產(chǎn)生I2C控制時(shí)鐘-20K

92、Hz</p><p><b>  begin</b></p><p>  if(!reset_n)</p><p><b>  begin</b></p><p><b>  …… ……</b></p><p>  else if(clock_20k_c

93、nt<2499) // 計(jì)數(shù)到2500跳變一次</p><p>  clock_20k_cnt<=clock_20k_cnt+1;</p><p><b>  else</b></p><p><b>  begin</b></p><p>  clock_20k<=!clo

94、ck_20k;</p><p>  clock_20k_cnt<=0;</p><p><b>  end</b></p><p><b>  end</b></p><p><b>  輸出模式選擇</b></p><p>  由于WM8731同

95、時(shí)支持如圖5.7所示的Bypass、Side Tone和DACSEL三種模式,因此在預(yù)設(shè)控制字代碼段中加入了模式選擇控制。</p><p>  圖5.7 WM8731模式示意圖</p><p>  通過讀取開關(guān)Sw1和Sw2的值來改變預(yù)設(shè)控制字,以達(dá)到模式切換的功能。其Verilog HDL代碼如下所示:</p><p>  4: if (sw1==1)</

96、p><p>  reg_data<=16'h080a; // Bypass模式</p><p>  else if(sw2==1)</p><p>  reg_data<=16'h0825; // Side Tone模式</p><p><b>  else</b></p>

97、<p>  reg_data<=16'h0810; // DACSEL模式</p><p><b>  輸出音量控制</b></p><p>  該部分主要是實(shí)現(xiàn)通過按鍵來增大或減小音量的功能。由于存在利用按鍵改值的要求,所以去抖動(dòng)是必不可少的。因此該部分主要涉及兩個(gè)方面的程序。</p><p><b> 

98、 按鍵計(jì)時(shí)檢測程序</b></p><p>  在這一部分的程序中,主要是利用供給I2C總線的20KHz的時(shí)鐘頻率,計(jì)時(shí)每20ms檢測一次按鍵值。如果兩次相鄰時(shí)間的鍵值不同,則可判斷有按鍵按下,進(jìn)而觸發(fā)音量增減程序。具體程序代碼如下所示:</p><p>  always @ (posedge clock_20k or negedge reset_n) //按鍵計(jì)時(shí)程序<

99、/p><p><b>  begin</b></p><p>  if (!reset_n) </p><p><b>  …… ……</b></p><p>  cnt<=cnt+1'b1;</p><p><b>  end</b><

100、/p><p>  always @ (posedge clock_20k) </p><p><b>  begin</b></p><p>  if (cnt==10'd400) // 每隔20Ms檢測一次按鍵 </p><p><b>  begin</b></p>

101、<p>  key1_f<=key1;</p><p>  key2_f<=key2;</p><p><b>  end</b></p><p>  key1_f_w<=key1_f;</p><p>  key2_f_w<=key2_f;</p><p>&

102、lt;b>  end</b></p><p>  wire key1_ctrl = key1_f_w & ( ~key1_f); // 檢測兩次相鄰時(shí)間鍵值,</p><p>  wire key2_ctrl = key2_f_w & ( ~key2_f); // 若不同則改變ctrl的值</p><p><b>  

103、音量增減程序</b></p><p>  若有按鍵按下,則變量key1(2)_ctrl的值將置為一,進(jìn)而觸發(fā)對(duì)應(yīng)的音量增減程序。以增加音量為例,當(dāng)有Key1按鍵按下時(shí),key1_ctrl的值變?yōu)?,此時(shí)對(duì)應(yīng)控制音量的預(yù)設(shè)值會(huì)增加一個(gè)音量檔位。若多次增加音量以至于超過最大音量,預(yù)設(shè)值將以最大音量送入語音芯片,則音量不會(huì)繼續(xù)增大,減小音量與之類似。具體程序代碼如下所示:</p><p&

104、gt;  else if (key1_ctrl) // 按鍵增加音量</p><p><b>  begin</b></p><p>  left<=left+16'h0008; </p><p>  if(left >= 16'h057f) </p><p><b

105、>  begin</b></p><p>  left<=16'h057f;</p><p><b>  end</b></p><p>  reg_index<=4'b1010;</p><p><b>  end</b></p><

106、;p>  else if(key2_ctrl) // 按鍵減小音量</p><p><b>  begin</b></p><p><b>  …… ……</b></p><p>  5.3.5 I2S時(shí)序接口及音頻數(shù)據(jù)處理模塊</p><p>  該模塊主要是對(duì)I2S時(shí)序

107、的模擬以實(shí)現(xiàn)音頻數(shù)據(jù)的傳輸。對(duì)于I2S時(shí)序的模擬主要是將18.432MHz的主時(shí)鐘分頻,產(chǎn)生均為48KHz的數(shù)模轉(zhuǎn)換和模數(shù)轉(zhuǎn)換采樣率時(shí)鐘以及對(duì)應(yīng)的數(shù)字音頻時(shí)鐘(BCLK)。除此之外,在此模塊中還調(diào)用了I2S串行數(shù)據(jù)轉(zhuǎn)并行數(shù)據(jù)模塊,并定義變量state作為串并變換的起始標(biāo)志。</p><p>  如圖5.8所示,在該模塊中DACLC、DACDAT、ADCLC、ADCDAT以及BCLK這五個(gè)接口與WM8731相連。其

108、中DACLC、ADCLC和BCLK時(shí)鐘信號(hào)在主模式下由WM8731提供,而在從模式下由FPGA提供,因此在本設(shè)計(jì)中這三個(gè)信號(hào)均作為輸出端口。16位的data接口是串并轉(zhuǎn)換后的并行輸出;adcdat是串行音頻數(shù)據(jù)輸入;dacdat是串行音頻數(shù)據(jù)輸出;該模塊的時(shí)鐘輸入clock_ref是時(shí)鐘分頻模塊產(chǎn)生的18.432MHz的主時(shí)鐘。</p><p>  圖5.8 I2S時(shí)序接口及音頻數(shù)據(jù)處理模塊</p>

109、<p>  該模塊Verilog HDL描述的設(shè)計(jì)關(guān)鍵代碼如下:</p><p>  module I2S_com(clock_ref,dacclk,bclk,dacdat,reset_n,adcclk,adcdat,data);</p><p><b>  …… ……</b></p><p>  I2S_data u1(.bcl

110、k(bclk),.adcclk(adcclk),.adcdat(adcdat),</p><p>  .data(data),.state(state)); // 例化I2S串并轉(zhuǎn)化模塊</p><p>  always@(posedge clock_ref or negedge reset_n) // 生產(chǎn)17位數(shù)據(jù)傳輸時(shí)鐘bclk</p><p>&l

111、t;b>  begin</b></p><p>  if(!reset_n)</p><p><b>  …… ……</b></p><p>  else if(bclk_cnt>=(CLOCK_REF/(CLOCK_SAMPLE*2*17*2)-1))</p><p><b>  be

112、gin</b></p><p>  bclk<=~bclk;</p><p><b>  …… ……</b></p><p>  always@(posedge clock_ref or negedge reset_n) //生產(chǎn)48KHz的DAC時(shí)鐘dacclk</p><p><b>  

113、begin</b></p><p>  if(!reset_n)</p><p><b>  …… ……</b></p><p>  else if(dacclk_cnt>=(CLOCK_REF/(CLOCK_SAMPLE*2)-1))</p><p><b>  begin</b>

114、;</p><p>  dacclk<=~dacclk;</p><p><b>  …… ……</b></p><p>  always@(posedge clock_ref or negedge reset_n) //生產(chǎn)48KHz的ADC時(shí)鐘adcclk</p><p><b>  begin<

115、;/b></p><p>  if(!reset_n)</p><p><b>  …… ……</b></p><p>  else if(adcclk_cnt>=(CLOCK_REF/(CLOCK_SAMPLE*2)-1))</p><p><b>  begin</b></p&

116、gt;<p>  adcclk<=~adcclk;</p><p><b>  …… ……</b></p><p>  assign dacdat=adcdat; // 將ADC的數(shù)據(jù)直接從DAC輸出</p><p>  always@(negedge adcclk) // 生成串并變換的起始標(biāo)志</p>

117、<p><b>  begin</b></p><p>  if(!reset_n)</p><p><b>  …… ……</b></p><p>  else if (bclk)</p><p><b>  state<=0;</b></p>

118、<p><b>  else</b></p><p><b>  state<=1;</b></p><p><b>  end</b></p><p><b>  endmodule</b></p><p>  5.3.6 I2S串

119、行數(shù)據(jù)轉(zhuǎn)并行數(shù)據(jù)模塊</p><p>  該模塊已例化在I2S時(shí)序接口及音頻數(shù)據(jù)處理模塊之中。其功能是逐位將adcdat串行輸入的音頻數(shù)據(jù)轉(zhuǎn)化成并行數(shù)據(jù)由data端口輸出,在整個(gè)系統(tǒng)中并行data輸出端口為后續(xù)開發(fā)的預(yù)留端口。</p><p>  module I2S_data(bclk, adcclk, adcdat, data, state); </p><

120、;p><b>  …… ……</b></p><p>  always@(posedge bclk or posedge state) </p><p><b>  begin</b></p><p>  if(state) // 開始轉(zhuǎn)化標(biāo)志</p><p><b>  

121、begin</b></p><p>  num<=5'h0;</p><p><b>  end</b></p><p>  else if(!adcclk) // 隨著bclk的變化逐位轉(zhuǎn)化</p><p><b>  begin</b></p>&

溫馨提示

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

評(píng)論

0/150

提交評(píng)論