• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于FPGA和VHDL的USB2.0控制器設(shè)計(jì)

    基于FPGA和VHDL的USB2.0控制器設(shè)計(jì)

    作者: 時(shí)間:2010-05-21 來(lái)源:網(wǎng)絡(luò) 收藏

      由于USB2.0協(xié)議定義的事務(wù)操作以8bit為單位,因此完成一次32bit的DMA操作需要進(jìn)行4次寫(xiě)8bit。內(nèi)部DMA采用高效的One-hot狀態(tài)機(jī)設(shè)計(jì)方法,狀態(tài)轉(zhuǎn)換如圖7所示。當(dāng)需要將接收到的數(shù)據(jù)存儲(chǔ)到SRAM(rx_dma_en=1)時(shí)進(jìn)入WAIT_MRD狀態(tài),在該狀態(tài)選中一個(gè)臨時(shí)數(shù)據(jù)寄存器,并向存儲(chǔ)器發(fā)送請(qǐng)求信號(hào)mreq,從存儲(chǔ)器中預(yù)取4字節(jié)(當(dāng)接收到的數(shù)據(jù)少于4字節(jié)時(shí),保證有4字節(jié)的數(shù)據(jù)寫(xiě)入存儲(chǔ)器)到該寄存器中,然后進(jìn)入MEM_WR狀態(tài)。當(dāng)PL的分組拆裝器接收到1字節(jié)數(shù)據(jù)時(shí),將該字節(jié)寫(xiě)入臨時(shí)存儲(chǔ)器,轉(zhuǎn)入下一狀態(tài)MEM_WR1;當(dāng)分組拆裝器沒(méi)數(shù)據(jù)給DMA仲裁器時(shí)則進(jìn)入MEM_WR2狀態(tài),在此狀態(tài)將臨時(shí)存儲(chǔ)器中的數(shù)據(jù)寫(xiě)入SRAM,然后回到IDLE狀態(tài)。在操作過(guò)程中,使用計(jì)數(shù)器adr_cb對(duì)傳輸字節(jié)數(shù)進(jìn)行計(jì)數(shù),通過(guò)addr_cb[1:0]的值標(biāo)識(shí)當(dāng)前傳輸?shù)氖?2bit中的哪個(gè)字節(jié)。計(jì)數(shù)器sizu_c每接收1字節(jié)數(shù)值加1。

    狀態(tài)轉(zhuǎn)換圖

      在需要讀取SRAM中的數(shù)據(jù)(tx_dma_en=1)時(shí),DMA仲裁器由IDIE狀態(tài)進(jìn)入MEM_RD1狀態(tài),讀取4字節(jié)數(shù)據(jù)到發(fā)送緩沖區(qū)中,然后進(jìn)入狀態(tài)MEM_RD2,再讀4字節(jié)進(jìn)入狀態(tài)MEM_RD3,這8字節(jié)輪流使用Buffer0和Buffer1緩沖區(qū):

      在需要讀取SRAM中的數(shù)據(jù)(tx_dma_en=1)時(shí),DMA仲裁器由IDLE狀態(tài)進(jìn)入MEM_RD1狀態(tài),讀取4字節(jié)數(shù)據(jù)到發(fā)送緩沖區(qū)中,然后進(jìn)入狀態(tài)MEM_RD2,再讀4字節(jié)進(jìn)入狀態(tài)MEM_RD3,這8字節(jié)輪流使用Buffer0和Buffer1緩沖區(qū):

      if((NOT adr_cb[2]) AND mack

      then Buffer0=SRAM_DATA_I;

      elsif (adr_cb[2] AND mack)

      then Buffer1=SRAM_DATA_I;

      end if;

      在MEM_RD3狀態(tài)判斷是否還需要讀下一個(gè)數(shù)據(jù),如果需要再進(jìn)入狀態(tài)MEM_RD2,否則在傳輸完所有字節(jié)后,返回到IDLE狀態(tài)。在發(fā)送數(shù)據(jù)過(guò)程中,使用14bit計(jì)數(shù)器sizd_c決定傳輸字節(jié)數(shù),取自Ep_BUF[30:17],每發(fā)送1字節(jié)數(shù)據(jù),它的值減1。在圖7中的各個(gè)狀態(tài)中,由于超時(shí)、CRC校驗(yàn)錯(cuò)誤或得到的數(shù)據(jù)發(fā)生錯(cuò)誤時(shí),PE產(chǎn)生的Abort信號(hào)會(huì)使當(dāng)前狀態(tài)都回到IDLE。

      文中闡述了USB2.0功能控制器的一種實(shí)現(xiàn)方案。 其VHDL語(yǔ)言實(shí)現(xiàn)代碼,已在XILINX公司的 Virtex XVV3006fg456中通過(guò)了Xilinx ISE的仿真、綜合及布局布線。的規(guī)模是32萬(wàn)門(mén),1536個(gè)CLB(可配置邏輯單元)。該控制模塊占用2050個(gè)Slice(66%),使用了1697個(gè)Slice觸發(fā)器(27%)和3047個(gè)4輸入LUT表(49%)。整個(gè)的速度可達(dá)到56.870MHz,完全滿足視頻數(shù)據(jù)的高速傳輸(對(duì)32bit數(shù)據(jù)操作,達(dá)到480Mb/s的速度時(shí)鐘只需15MHz)。該方案實(shí)現(xiàn)的控制器便于修改且易于實(shí)現(xiàn),可作為一個(gè)功能模塊嵌入到SOC中,可使不同情況最大限度地靈活設(shè)計(jì)片上系統(tǒng)。


    上一頁(yè) 1 2 3 4 5 下一頁(yè)

    評(píng)論


    相關(guān)推薦

    技術(shù)專區(qū)

    關(guān)閉
    主站蜘蛛池模板: 溧阳市| 涪陵区| 柳林县| 云南省| 梧州市| 内丘县| 胶州市| 鹿泉市| 曲阳县| 明溪县| 凤冈县| 朔州市| 通城县| 安远县| 宁陵县| 腾冲县| 华容县| 南京市| 太白县| 息烽县| 陵川县| 罗定市| 哈巴河县| 修文县| 五大连池市| 壶关县| 武强县| 沁水县| 文山县| 定日县| 新乡市| 清远市| 杭锦后旗| 瓦房店市| 峨边| 共和县| 汝南县| 正定县| 绥棱县| 隆子县| 红原县|