cpld-數(shù)字系統(tǒng)設(shè)計(jì)課件_第1頁
cpld-數(shù)字系統(tǒng)設(shè)計(jì)課件_第2頁
cpld-數(shù)字系統(tǒng)設(shè)計(jì)課件_第3頁
cpld-數(shù)字系統(tǒng)設(shè)計(jì)課件_第4頁
cpld-數(shù)字系統(tǒng)設(shè)計(jì)課件_第5頁
已閱讀5頁,還剩90頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

基于PLD的數(shù)字系統(tǒng)設(shè)計(jì)基于PLD的數(shù)字系統(tǒng)設(shè)計(jì)1.PLD的分類集成度低密度:PROM,PLA,PAL,GAL高密度:CPLD,FPGA結(jié)構(gòu)特點(diǎn)陣列型的PLD器件(與或陣列):PROM,PLA,PAL,GAL及絕大多數(shù)CPLD單元型的PLD器件(邏輯單元):FPGA按編程次數(shù)分類按不同的編程元件和編程工藝劃分編程特性GAL結(jié)構(gòu)與PAL類似:與陣列可編程改寫;與PAL的不同的是:PAL的輸出口為定型為緩沖器/驅(qū)動(dòng)器,GAL的輸出單元為輸出邏輯宏單元(OLMC),其結(jié)構(gòu)和功能可由用戶改寫。1.PLD的分類集成度低密度:PROM,PLA,PAL,G2、PLD的結(jié)構(gòu):(1)PLD的基本結(jié)構(gòu)輸入緩沖電路輸出緩沖電路或陣列與陣列任何組合邏輯電路均可化為“與或”表達(dá)式,用“與門-或門”二級(jí)電路實(shí)現(xiàn)。任何時(shí)序電路又都是由組合電路加上存儲(chǔ)元件(觸發(fā)器)構(gòu)成的。2、PLD的結(jié)構(gòu):(1)PLD的基本結(jié)構(gòu)任何組合邏輯電路均(2)基于乘積項(xiàng)的CPLD的基本結(jié)構(gòu)這種CPLD主要包括三塊結(jié)構(gòu):邏輯陣列塊(LAB):由若干個(gè)宏單元(Marocell)組成,是CPLD內(nèi)部最基本的結(jié)構(gòu)可編程連線(PIA)I/O控制塊(2)基于乘積項(xiàng)的CPLD的基本結(jié)構(gòu)這種CPLD主要包括三塊cpld-數(shù)字系統(tǒng)設(shè)計(jì)課件cpld-數(shù)字系統(tǒng)設(shè)計(jì)課件CPLD中的宏單元乘積項(xiàng)陣列,實(shí)際就是一個(gè)與或陣列,每一個(gè)交叉點(diǎn)都是一個(gè)可編程熔絲,如果導(dǎo)通就是實(shí)現(xiàn)“與”邏輯。后面的乘積項(xiàng)選擇矩陣是一個(gè)“或”陣列。兩者一起完成組合邏輯??删幊藾觸發(fā)器,它的時(shí)鐘,清零輸入都可以編程選擇,可以使用專用的全局清零和全局時(shí)鐘,也可以使用內(nèi)部邏輯(乘積項(xiàng)陣列)產(chǎn)生的時(shí)鐘和清零。如果不需要觸發(fā)器,也可以將此觸發(fā)器旁路,信號(hào)直接輸給PIA或輸出到I/O腳。

CPLD中的宏單元乘積項(xiàng)陣列,實(shí)際就是一個(gè)與或陣列,每一個(gè)交(3)基于查找表(LUT)的FPGA的結(jié)構(gòu)

A:查找表(Look-Up-Table)例:LUT實(shí)現(xiàn)的四輸入與門實(shí)際邏輯電路LUT的實(shí)現(xiàn)方式

a,b,c,d輸入邏輯輸出地址RAM中存儲(chǔ)的內(nèi)容00000000000001000010....0...01111111111本質(zhì)上就是一個(gè)RAMFPGA中多使用4輸入的LUT,所以每一個(gè)LUT可以看成一個(gè)有4位地址線的16x1的RAM(3)基于查找表(LUT)的FPGA的結(jié)構(gòu)A:查找表(0000010100000101輸入A輸入B輸入C輸入D

查找表輸出實(shí)際的16x1RAM結(jié)構(gòu)多路選擇器0000010100000101輸入A輸入BFLEX10K系列器件:FLEX10K系列器件:LAB:LAB:邏輯單元LE邏輯單元LE進(jìn)位鏈連通LAB中的所有LE進(jìn)位鏈連通LAB中的所有LE兩種不同的級(jí)聯(lián)方式兩種不同的級(jí)聯(lián)方式連續(xù)布線(Altera基于查找表(LUT)的FPGA)連續(xù)布線(Altera基于查找表(LUT)的FPGAFPGA/CPLD生產(chǎn)商FPGA/CPLD生產(chǎn)商LATTICEVANTIS(AMD)ispLSI系列:1K、2K、3K、5K、8KispLSI1016、ispLSI2032、ispLSI1032E、ispLSI3256AMACH系列ispPAC系列:

其他PLD公司:ACTEL公司:ACT1/2/3、40MXATMEL公司:ATF1500AS系列、40MXCYPRESS公司QUIKLOGIC公司

CPLDSOMUCHIC!FPGACPLDLATTICEispLSI系列:1K、2K、3K、5K、8K3、CPLD和FPGA的性能對(duì)比(1)適合結(jié)構(gòu)CPLD是“邏輯豐富”型的,更適合完成各種算法和組合邏輯,FPGA是“時(shí)序豐富”型的,更適合于完成時(shí)序邏輯。原因:CPLD的一個(gè)宏單元可以分解十幾個(gè)甚至20~30個(gè)組合邏輯輸入。而FPGA的1個(gè)LUT只能處理4輸入的組合邏輯CPLD適合用于設(shè)計(jì)譯碼等復(fù)雜組合邏輯。但FPGA的制造工藝確定了FPGA芯片中包含的LUT和觸發(fā)器的數(shù)量非常多,集成度更高,而PLD一般只能做到512個(gè)邏輯單元,所以如果設(shè)計(jì)中使用到大量觸發(fā)器,例如設(shè)計(jì)一個(gè)復(fù)雜的時(shí)序邏輯,就使用FPGA。3、CPLD和FPGA的性能對(duì)比(1)適合結(jié)構(gòu)(2)運(yùn)行速度CPLD優(yōu)于FPGA。因?yàn)?CPLD是邏輯塊級(jí)編程,且其邏輯塊互連是集總式的,CPLD通過修改具有固定內(nèi)連電路的邏輯功能來編程;而FPGA是門級(jí)編程,且LAB之間是采用分布式互連,FPGA主要通過改變內(nèi)部連線的布線來編程。同時(shí),由于CPLD有專用連線每個(gè)宏單元相連,信號(hào)到每個(gè)宏單元的延時(shí)相同并且延時(shí)最短。因此CPLD比FPGA有較大的時(shí)間可預(yù)測(cè)性,產(chǎn)品可以給出引腳到引腳的最大延遲時(shí)間。(2)運(yùn)行速度CPLD優(yōu)于FPGA。(3)編程方式目前的CPLD主要是基于E2PROM或FLASH存儲(chǔ)器編程,編程次數(shù)達(dá)1萬次,其優(yōu)點(diǎn)是在系統(tǒng)斷電后,編程信息不丟失,且無需外部存儲(chǔ)器芯片,使用簡(jiǎn)單。CPLD又可分為在編程器上編程和在系統(tǒng)編程(InSystemProgramma2ble,ISP)兩種。ISP器件的優(yōu)點(diǎn)是不需要編程器,可先將器件裝焊于印制板,再經(jīng)過編程電纜進(jìn)行編程,編程、調(diào)試和維護(hù)都很方便。FPGA大部分是基于SRAM編程其優(yōu)點(diǎn)是可進(jìn)行任意次數(shù)的編程,并可在工作中快速編程,實(shí)現(xiàn)板級(jí)和系統(tǒng)級(jí)的動(dòng)態(tài)配置,因此可稱為可重配置硬件。其缺點(diǎn)是編程信息需存放在外部存儲(chǔ)器上,每次上電時(shí),需從器件的外部存儲(chǔ)器或計(jì)算機(jī)中將編程數(shù)據(jù)寫入SRAM中,使用方法復(fù)雜,且編程數(shù)據(jù)信息在系統(tǒng)斷電時(shí)丟失。(3)編程方式目前的CPLD主要是基于E2PROM或F4、CPLD和FPGA的編程與配置根據(jù)器件的不同結(jié)構(gòu),基于電可擦除存儲(chǔ)單元的EEPROM或Flash技術(shù)的CPLD的在系統(tǒng)下載稱為編程(Program),而把基于SRAM查找表結(jié)構(gòu)的FPGA的在系統(tǒng)下載稱為配置(Configure)4、CPLD和FPGA的編程與配置根據(jù)器件的不同結(jié)構(gòu)此接口既可作編程下載口,也可作JTAG接口(1)ALTERA的ByteBlaster并行下載方式此接口既可作編(1)ALTERA的ByteBlastByteBlaster支持兩種數(shù)據(jù)下載模式:被動(dòng)串行同步(PS)方式:可對(duì)ACEX1K,FLEX10K,FLEX6000和FLEX8000等器件進(jìn)行配置;JTAG方式:具有電路邊界掃描測(cè)試功能??蓪?duì)FLEX10K系列器件進(jìn)行配置以及對(duì)MAX9000,MAX7000S和MAX7000A等系列器件進(jìn)行在線編程。下載時(shí)再結(jié)合Altera提供的仿真軟件Max+plusII或者Quartus就可以進(jìn)行編程與配置。ByteBlaster支持兩種數(shù)據(jù)下載模式:被動(dòng)串行同步(ISP功能提高設(shè)計(jì)和應(yīng)用的靈活性減少對(duì)器件的觸摸和損傷不計(jì)較器件的封裝形式允許一般的存儲(chǔ)樣機(jī)制造方便支持生產(chǎn)和測(cè)試流程中的修改允許現(xiàn)場(chǎng)硬件升級(jí)迅速方便地提升功能未編程前先焊接安裝系統(tǒng)內(nèi)編程--ISP在系統(tǒng)現(xiàn)場(chǎng)重編程修改ISP功能提高設(shè)計(jì)和應(yīng)用的靈活性減少對(duì)器件的觸摸和損傷允許一ByteBlaster程序下載接口DCLK(時(shí)鐘信號(hào))CONFDONE(配置控制),nCONFIG(配置控制),nSTATUS(配置狀態(tài)),DATA0(到器件的數(shù)據(jù))TCK(時(shí)鐘信號(hào));TDO(來自器件的數(shù)據(jù));TMS(JTAG狀態(tài)機(jī)控制);TDI(到器件的數(shù)據(jù))ByteBlaster程序下載接口DCLK(時(shí)鐘信號(hào))JTAG模式下對(duì)CPLD(MAX7000AE)器件進(jìn)行編程JTAG模式下對(duì)CPLD(MAX7000AE)器件進(jìn)行編程多CPLD的ISP方式編程多CPLD的ISP方式編程PS方式下對(duì)FLEX10K器件進(jìn)行配置電纜VCC為+5V,不會(huì)對(duì)3.3V被編程器件造成損壞PS方式下對(duì)FLEX10K器件進(jìn)行配置電纜VCC為+5V,多FPGA芯片配置電路多FPGA芯片配置電路(2)用專用配置器件配置FPGAFPGA器件有兩種配置下載方式:主動(dòng)配置方式:由FPGA器件引導(dǎo)配置操作過程,它控制著外部存儲(chǔ)器和初始化過程被動(dòng)配置方式:由外部計(jì)算機(jī)或控制器控制配置過程。FPGA在正常工作時(shí),它的配置數(shù)據(jù)存儲(chǔ)在SRAM中。由于SRAM的易失性,每次加電時(shí),配置數(shù)據(jù)都必須重新下載。實(shí)驗(yàn)系統(tǒng)中,通常采用外部計(jì)算機(jī)或控制器進(jìn)行調(diào)試,可使用被動(dòng)配置方式。當(dāng)數(shù)字系統(tǒng)設(shè)計(jì)完畢需要正式投入使用時(shí),

FPGA將主動(dòng)從外圍專用存儲(chǔ)芯片中獲得配置數(shù)據(jù)。FPGA上電自動(dòng)配置可采用EPROM,專用的配置器件或FlashROM等等。(2)用專用配置器件配置FPGAFPGA器件有兩種配置專用專用配置器件配置FPGA專用專用配置器件配置FPGA(3)單片機(jī)配置FPGA(3)單片機(jī)配置FPGAPS模式配置時(shí)序>2us>60us>5sPS模式配置時(shí)序>2us>60us>5s5、設(shè)計(jì)實(shí)例:多路音頻采集系統(tǒng)(1)設(shè)計(jì)要求:四路模擬音源的同時(shí)實(shí)時(shí)采集。模擬音源可以是麥克風(fēng)輸出或其它音頻設(shè)備的模擬音頻輸出。模擬信號(hào)的數(shù)字化。系統(tǒng)先將模擬信號(hào)數(shù)字化后,再通過網(wǎng)絡(luò)發(fā)送。采樣率:44.1kHz。采樣精度:16位。AGC(自動(dòng)增益控制)功能。提供至少1KB數(shù)據(jù)緩沖。5、設(shè)計(jì)實(shí)例:多路音頻采集系統(tǒng)(1)設(shè)計(jì)要求:(2)系統(tǒng)設(shè)計(jì)及方案選擇(2)系統(tǒng)設(shè)計(jì)及方案選擇需考慮的因素前置放大器(AIC31)的配置問題;(MCU)A/D變換器的時(shí)鐘供給問題;(CPLD)數(shù)據(jù)存儲(chǔ)方式:

Bigendian:低字節(jié)放低地址,高字節(jié)放高地址。直觀的字節(jié)序

LittleEndian:符合人類思維的字節(jié)序數(shù)據(jù)緩沖區(qū)的大小(4x1K)及緩沖方案:

FIFO:數(shù)據(jù)從一側(cè)流入,另一側(cè)流出。FIFO具有兩套數(shù)據(jù)線而無地址線。

高速SRAM切換:用兩片SRAM構(gòu)成,在某一時(shí)刻,CPLD和DS80C400分時(shí)輪流對(duì)讀寫??偩€切換電路復(fù)雜。

雙口RAM:雙口RAM具有兩套獨(dú)立的數(shù)據(jù)、地址和控制總線,可從兩個(gè)端口同時(shí)讀寫而互不干擾需考慮的因素前置放大器(AIC31)的配置問題;(MCU)地址分配問題地址分配問題CPLD功能塊劃分:檢測(cè)來自微控制器的啟動(dòng)/停止信號(hào);產(chǎn)生對(duì)微控制器的中斷信號(hào);并控制狀態(tài)LED。為AIC31提供時(shí)鐘信號(hào),接收自AIC31的串行數(shù)字音頻數(shù)據(jù),音頻信號(hào)的串并轉(zhuǎn)換,并行音頻數(shù)據(jù)的RAM存儲(chǔ)。

產(chǎn)生寫RAM的時(shí)序,生成寫地址;接收ADC接口傳送的數(shù)據(jù),并執(zhí)行RAM寫操作CPLD功能塊劃分:檢測(cè)來自微控制器的啟動(dòng)/停止信號(hào);為AI(3)CPLD接口設(shè)計(jì)微控制器接口模塊(3)CPLD接口設(shè)計(jì)微控制器接口模塊名稱方向描述clkInClock。時(shí)鐘輸入。(22.5792MHz,即每個(gè)clk周期約為44ns

)resetInReset。復(fù)位信號(hào),低電平有效。fullIn高電平有效。來自RAM控制模塊,每個(gè)緩沖周期末,該信號(hào)有效一個(gè)clk周期。st_ucInStart。啟動(dòng)/停止信號(hào),低電平:?jiǎn)?dòng);高電平:停止。irq_ucOutInterruptrequest。中斷請(qǐng)求信號(hào),低有效。當(dāng)檢測(cè)到full信號(hào)的上升沿時(shí),產(chǎn)生中斷,通知網(wǎng)絡(luò)微處理器讀取音頻數(shù)據(jù)并發(fā)送到網(wǎng)絡(luò)。ledOutLED狀態(tài)控制信號(hào)。當(dāng)系統(tǒng)處于采集狀態(tài)時(shí),LED閃爍,否則,常亮。sys_enOutSystemenable。系統(tǒng)使能信號(hào),高有效。當(dāng)系統(tǒng)處于工作狀態(tài)時(shí),sys_en有效。名稱方向描述clkInClock。時(shí)鐘輸入。(22.5792ADC接口模塊AIC31的時(shí)序115162321116153LeftchannelRightchannelWCLKBCLKSDMSBLSBMSBLSBADC接口模塊AIC31的時(shí)序11516232111615接口圖接口圖端口描述名稱方向描述clkInputClock。時(shí)鐘輸入。resetInputReset。復(fù)位信號(hào),低電平有效。sys_enInputSystemenable。系統(tǒng)使能信號(hào),高有效。mclkOutputMainclock。AIC31工作的主時(shí)鐘,與clk同頻bclkOutputBitclock。向AIC31提供的串行數(shù)字音頻接口的位時(shí)鐘,由CPLD將clk16分頻得到。wclkOutputWordclock。向AIC31提供的串行數(shù)字音頻接口的字節(jié)選時(shí)鐘,選擇輸出左聲道數(shù)據(jù)還是右聲道數(shù)據(jù)。由CPLD將clk512分頻得到。端口描述名稱方向描述clkInputClock。時(shí)鐘輸入。r名稱方向描述sd0InputSerialdata0。AIC31的串行數(shù)字音頻數(shù)據(jù)。sd1InputSerialdata1。AIC31的串行數(shù)字音頻數(shù)據(jù)。dsOutputDatavalidstrobe。數(shù)據(jù)有效指示信號(hào),上升沿有效。hlbOutputHigh/lowbyte。高/低字節(jié)指示信號(hào),0為低字節(jié),1為高字節(jié)。lrcOutputLeft/rightchannel。左/右聲道指示信號(hào),0為左聲道,1為右聲道。data0[7:0]Output并行音頻數(shù)據(jù)。data1[7:0]Output并行音頻數(shù)據(jù)。名稱方向描述sd0InputSerialdata0。AIRAM控制模塊(ram_control)clkdsce_lwe_laddr_ldata_ldata0data1RAM寫時(shí)序RAM控制模塊(ram_control)clkdsce_lw名稱方向描述clkInputClock。時(shí)鐘輸入。resetInputReset。復(fù)位信號(hào),低電平有效。dsInputDatavalidstrobe。數(shù)據(jù)有效指示信號(hào),上升沿有效。hlbInputHigh/lowbyte。高/低字節(jié)指示信號(hào),0為低字節(jié),1為高字節(jié)。lrcInputLeft/rightchannel。左/右聲道指示信號(hào),0為左聲道,1為右聲道。data0[7:0]Input并行音頻數(shù)據(jù)。data1[7:0]Input并行音頻數(shù)據(jù)。名稱方向描述clkInputClock。時(shí)鐘輸入。reset名稱方向描述ce_lOutputChipenable。雙口RAM左端口片選信號(hào)。oe_lOutputOutputenable。雙口RAM左端口讀選通信號(hào)。we_lOutputWriteenable。雙口RAM左端口寫選通信號(hào)。addr_l[12:0]OutputAddressbus。雙口RAM左端口地址總線。data_l[7:0]In/OutDatabus。雙口RAM左端口數(shù)據(jù)總線。addr12_rOutputAddressbus。雙口RAM右端口地址線A12。fullOutput緩沖區(qū)寫滿指示信號(hào)。高電平有效。名稱方向描述ce_lOutputChipenable。雙口cpld-數(shù)字系統(tǒng)設(shè)計(jì)課件cpld-數(shù)字系統(tǒng)設(shè)計(jì)課件(4)程序設(shè)計(jì)A:uc_interface:模塊功能(每個(gè)功能對(duì)應(yīng)一個(gè)線程)延時(shí)st_uc延遲full信號(hào)生成irq_uc信號(hào)生成sys_en信號(hào)生成led工作指示信號(hào)(4)程序設(shè)計(jì)A:uc_interface:libraryIEEE;useIEEE.STD_LOGIC_1164.ALL;useIEEE.STD_LOGIC_ARITH.ALL;useIEEE.STD_LOGIC_UNSIGNED.ALL;entityuc_interfaceisPort(reset:instd_logic;clk:instd_logic;st_uc:instd_logic;sys_en:outstd_logic;full:instd_logic;irq_uc:outstd_logic;led:outsta_logic;)

endad_interface;architectureBehavioralofad_interfaceis此處定義信號(hào)常量beginlibraryIEEE;延時(shí)st_ucst_ucclkst_d1st_d2st_d0CPLDst_d0st_d1st_d2

&st_d0st_d1st_d2≥1st_orst_and延時(shí)st_ucst_ucclkst_d1st_d2st_d0process(reset,clk)-------延時(shí)st_ucbeginifreset=RESET_ACTIVEthenst_uc_d0<=‘1’;st_uc_d1<=‘1’;st_uc_d2<=‘1’;elseifclk’eventandclk=‘1’thenst_uc_d0<=st_uc;st_uc_d1<=st_uc_d0;st_uc_d2<=st_uc_d1;endifendprocess;process(reset,clk)-------process(reset,clk)--------產(chǎn)生sys_enbeginifreset=RESET_ACTIVEthens_sys_en=‘0’;elseifclk’eventandclk=‘1’thenifs_sys_en=‘0’thenif(st_uc_d0orst_uc_d1orst_uc_d2)=‘0’then

s_sys_en=‘1’endif

elseifs_sys_en=‘1’thenif(st_uc_d0andst_uc_d1andst_uc_d2)=‘1’then

s_sys_en=‘0’endifendifendifendprocess;process(reset,clk)------process(reset,clk)--------延遲full信號(hào)beginifreset=RESET_ACTIVEthen

s_full_d0<=‘0’;s_full_d1<=‘0’;elseifclk’evevtandclk=‘1’thens_full_d0<=full;s_full_d1<=s_full_d0;endifendprocess;process(reset,clk)------process(reset,clk)--------生成irq_uc信號(hào)beginifreset=RESET_ACTIVEthenirq_uc<=notIRQ_ACTIVE;elseifclk’evevtandclk=‘1’thenif(fullors_full_d0ors_full_d1)=‘1’thenirq_uc<=IRQ_ACTIVE;elseirq_uc<=notIRQ_ACTIVE;endifendifendprocess;process(reset,clk)------process(reset,clk)--------生成led信號(hào)beginifs_sys_en=‘0’thens_ledcnt<=(others=>0);elseifclk’evevtandclk=‘1’theniffull=‘1’thens_ledcnt<=s_ledcnt+1;endif;endifendprocess;led<=s_ledcnt(LEDCNT_WIDTH-1)

process(reset,clk)------B:ad_interfaceentityad_interfaceisPort(reset:instd_logic;clk:instd_logic;sys_en:instd_logic;sd0:instd_logic;sd1:instd_logic;sck:outstd_logic;bck:outstd_logic;lrck:outstd_logic;ds:outstd_logic; --datavalidstobe,highedgeactivehlb:outstd_logic;lrc:outstd_logic;data0:outstd_logic_vector(7downto0);data1:outstd_logic_vector(7downto0));endad_interface;B:ad_interfaceentityad_interADC工作特性:115162321116153LeftchannelRightchannelWCLKBCLKSDMSBLSBMSBLSBADC工作特性:115162321116153Leftch時(shí)鐘產(chǎn)生器clk_cnt(8)cnt_clrClkcounter&clktickclk_cnt(7)clk_cnt(6)clk_cnt(5)clk_cnt(4)clk_cnt(3)clk_cnt(2)clk_cnt(1)clk_cnt(0)wclkbclksys_en

時(shí)鐘產(chǎn)生器clk_cnt(8)cnt_clrClk&clktprocess(clk,reset)-----processtogeneratethecounterbegin ifreset=RESET_ACTIVEthen s_cnt<=(others=>'0');elsifclk'eventandclk='1'then s_cnt<=s_cnt+1;endif;endprocess;cpld-數(shù)字系統(tǒng)設(shè)計(jì)課件--------------------------------------------------Outputtheclocksignal---------------------------------------------------sck<=clk;bck<=s_cnt(3);lrck<=s_cnt(8);------------------------------process(reset,clk)-------theprocesstogeneratetheticksignalbegin ifreset=RESET_ACTIVEthen tick<='0';elsifclk'eventandclk='1'then ifs_cnt(7downto0)="01111111"then tick<='1';else tick<='0';endif;endif;endprocess;process(reset,clk)-------thehlb與lrc信號(hào)的判斷LeftchannelRightchannel181618161WCLKBCLKtickdshlblrchlb與lrc信號(hào)的判斷LeftchannelRight數(shù)據(jù)接收主狀態(tài)機(jī)Idlewaitrecvrecvresetassertedresetnegatedsys_en=1wclkringingedgewclkrisingedgesys_en=0數(shù)據(jù)接收主狀態(tài)機(jī)Idlewaitrecvrecvreset音頻數(shù)據(jù)采集示意圖Shift_reg1Buffer1Sd1Shift_enLoad_enData1Shift_reg0Buffer0Sd0Data0音頻數(shù)據(jù)采集示意圖Shift_reg1Buffer1Sd1S

Therecievemaimstatemachineprocess(reset,clk)beginifreset=RESET_ACTIVEthen state<=idle;elsifclk'eventandclk='1'thencasestateis whenidle=> ifsys_en='1'then state<=waitrecv;else state<=idle;endif;Therecievemaimstatemachinwhenwaitrecv=> ifs_lrck='1'ands_lrck_d='0'then state<=recv;else state<=waitrecv;endif;whenrecv=> ifs_lrck='1'ands_lrck_d='0'andsys_en='0'then state<=idle;else state<=recv;endif;whenothers=> state<=idle;endcase; endif;endprocess;whenwaitrecv=>thestatemachineoutputprocess(reset,clk)variabletemp:std_logic_vector(2downto0);beginifreset=RESET_ACTIVEthen s_ds<='0'; s_hlb<='0'; s_lrc<='0'; s_data0<=(others=>'0'); s_data1<=(others=>'0');thestatemachineoutputproceselsifclk'eventandclk='1'then ifstate=recvthen temp:=s_lrck&s_lrck_d&s_tick; casetempis when"111"=> --leftchannel,highbyte s_ds<='1'; s_data0<=s_shift_reg0; s_data1<=s_shift_reg1; s_hlb<='1'; s_lrc<='0';

elsifclk'eventandclk='1'when"001"=>--rightchannel,highbyte s_ds<='1'; s_data0<=s_shift_reg0; s_data1<=s_shift_reg1; s_hlb<='1'; s_lrc<='1'; when"010"=>--leftchannel,lowbyte s_ds<='1'; s_data0<=s_shift_reg0; s_data1<=s_shift_reg1; s_hlb<='0'; s_lrc<='0';when"001"=>--riwhen"100"=> --rightchannel,lowbyte s_ds<='1'; s_data0<=s_shift_reg0; s_data1<=s_shift_reg1; s_hlb<='0'; s_lrc<='1'; whenothers=> s_ds<='0'; s_data0<=s_data0; s_data1<=s_data1; s_hlb<=s_hlb; s_lrc<=s_lrc;endcase;when"100"=>else s_ds<='0'; s_data0<=(others=>'0'); s_data1<=(others=>'0'); s_hlb<='0'; s_lrc<='0'; endif; endif;endprocess;else

process(reset,clk)-------processtosamplesd0andsd1beginifreset=RESET_ACTIVEthen s_sd0<='0'; s_sd1<='0';elsifclk'eventandclk='1'thens_sd0<=sd0;s_sd1<=sd1;endif;endprocess;

process(reset,clk)-------pr

componentshiftisgeneric(SHIFT_WIDTH:integer:=8);Port(clk:instd_logic;en:instd_logic; --shiftenable,activehighsi:instd_logic;q:outstd_logic_vector(SHIFT_WIDTH-1downto0));endcomponent;componentshiftisShiftreginstantation

shift_reg0_inst:shiftgenericmap(SHIFT_WIDTH=>SHIFT_WIDTH)

portmap(clk=>clk, en=>s_shift_reg_en,

si=>s_sd0, q=>s_shift_reg0);shift_reg1_inst:shiftgenericmap(SHIFT_WIDTH=>SHIFT_WIDTH)

portmap(clk=>clk, en=>s_shift_reg_en,

si=>s_sd1, q=>s_shift_reg1);Shiftreginstantationshift_shiftregenablecontrolprocess(state,s_bck,s_bck_d)beginifstate=recvands_bck='1'ands_bck_d='0'then

s_shift_reg_en<='1';

else s_shift_reg_en<='0';endif;endprocess;shiftregenablecontrolprocesC:ram_interface寫RAM時(shí)序clkdsce_lwe_laddr_ldata_ldata0data1C:ram_interface寫RAM時(shí)序clkdsce_RAM控制主狀態(tài)機(jī):IdleWrite0Write1dsrisingedgewccnt=WCCNT_MAXwccnt=WCCNT_MAXRAM控制主狀態(tài)機(jī):IdleWrite0Write1dsr地址產(chǎn)生器地址產(chǎn)生器entityram_ctrlisgeneric(ADDR_WIDTH:integer:=12);Port(reset:instd_logic;clk:instd_logic;ds:instd_logic; --highedgeactivelrc:instd_logic;hlb:instd_logic;data0:instd_logic_vector(7downto0);data1:instd_logic_vector(7downto0);full:outstd_logic;ce:outstd_logic; oe:outstd_logic;we:outstd_logic;addr:outstd_logic_vector(ADDR_WIDTH-1downto0);data:outstd_logic_vector(7downto0));endram_ctrl;entityram_ctrlis地址計(jì)數(shù)器

addrcnt_inst:cntgenericmap(CNT_WIDTH=>ADDRCNT_WIDTH)Portmap(clk=>clk,clr=>s_addrcnt_clr,--asynchronousclear,activehighen=>s_addrcnt_en,q=>s_addrcnt);地址計(jì)數(shù)器addrcnt_inst:cnt寫RAM計(jì)數(shù)器

wccnt_inst:cntgenericmap(CNT_WIDTH=>WCCNT_WIDTH)Portmap(clk=>clk,clr=>s_wccnt_clr,--asynchronousclear,activehigh

en=>s_wccnt_en,q=>s_wccnt);

寫RAM計(jì)數(shù)器wccnt_inst:cntprocess(pre_state,ds,s_ds,s_wccnt)begin casepre_stateis whenidle=> ifds='1'ands_ds='0'then next_state<=write0;else next_state<=idle; endif;whenwrite0=> ifs_wccnt=WCCNT_MAXthen next_state<=write1;else next_state<=write0;endif;---Thewriteramcontrolstatemachine

process(pre_state,ds,s_ds,s_wcwhenwrite1=> ifs_wccnt=WCCNT_MAXthen next_state<=idle;else next_state<=write1;endif;whenothers=> next_state<=idle; endcase;endprocess;whenwrite1=>process(clk,reset)beginifreset=RESET_ACTIVEthen pre_state<=idle;elsifclk'eventandclk='1'then pre_state<=next_state;endif;endprocess;

process(clk,reset)計(jì)數(shù)器控制信號(hào)的生成

process(pre_state,s_wccnt,lrc,hlb)beginif(pre_state=write0orpre_state=write1)then s_wccnt_clr<='0'; s_wccnt_

溫馨提示

  • 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. 人人文庫網(wǎng)僅提供信息存儲(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)論