日本a√视频在线,久久青青亚洲国产,亚洲一区欧美二区,免费g片在线观看网站

        <style id="k3y6c"><u id="k3y6c"></u></style>
        <s id="k3y6c"></s>
        <mark id="k3y6c"></mark>
          
          

          <mark id="k3y6c"></mark>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > FPGA:EPP(增強(qiáng)型并行端口)

          FPGA:EPP(增強(qiáng)型并行端口)

          作者: 時(shí)間:2024-01-04 來(lái)源:EEPW編譯 收藏

          使與 PC 的通信變得快速而簡(jiǎn)單。
          在這里,我們使用Pluto-P 板與支持的PC進(jìn)行通信。

          本文引用地址:http://yuyingmama.com.cn/article/202401/454465.htm

          1 - 什么是 EPP?

          EPP 是 IEEE 1284(并行端口標(biāo)準(zhǔn))的一部分。
          IEEE 1284 還定義了 SPP 和 ECP,但 EPP 提供了兩者的優(yōu)點(diǎn),即速度和簡(jiǎn)單性。

          EPP的主要特點(diǎn)是:

          • 通過(guò)并行端口提供雙向通信,即對(duì)連接到 PC 并行端口的外圍設(shè)備進(jìn)行讀寫的方式。

          • 事務(wù)是 8 位寬的,并且是原子的。主機(jī) (PC) 始終是事務(wù)的發(fā)起者,讀取或?qū)懭搿?/p>

          • 沒(méi)有爆發(fā)的概念。您可以發(fā)送 1 個(gè)字節(jié),如果需要,也可以發(fā)送 1000000 個(gè)字節(jié),只需在 PC 上使用軟件循環(huán)即可。 您還可以按任意順序混合讀取和寫入。

          EPP 允許“地址”和“數(shù)據(jù)”交易。
          換言之,可以從 PC 發(fā)出四種類型的 EPP 交易:

          • 寫入地址

          • 讀取地址

          • 寫入數(shù)據(jù)

          • 讀取數(shù)據(jù)

          我們將把連接到EPP端口。 當(dāng) PC 執(zhí)行“寫入地址”(或“寫入數(shù)據(jù)”)時(shí),它實(shí)際上只是向 發(fā)送 8 位,并指示它是“地址”或“數(shù)據(jù)”。 FPGA可以使用“address”或“data”值做任何事情。 FPGA 可以實(shí)現(xiàn)一個(gè)寄存器組(有 256 個(gè)寄存器)。 或者,它可以使用“地址”來(lái)閃爍LED,并使用“數(shù)據(jù)”來(lái)發(fā)出聲音。 PC 不會(huì)知道其中的區(qū)別。

          讀取也是如此,PC可以讀取“地址”或“數(shù)據(jù)”,這實(shí)際上可能是FPGA返回的任何8位值。

          EPP 2 - 軟件

          EPP軟件支持非常簡(jiǎn)單。 我看看。

          BIOS

          首先進(jìn)入 PC 的 BIOS(通電時(shí)可訪問(wèn))并啟用 EPP(在并行端口屬性中)。

          并行端口地址

          從軟件的角度來(lái)看,EPP 事務(wù)需要 IO 讀取或?qū)懭搿?/p>

          最常見(jiàn)的 EPP 端口地址是 0x378。在 Window 的控制面板中找到它。

          C 函數(shù)

          首先是 EPP_init() 函數(shù)。

          #define EPP_port_addr 0x378 // your parallel port address

          void EPP_init()
          {
          IO_WRITE(EPP_port_addr+2, 0x04);
          }

          很簡(jiǎn)單,對(duì)吧?

          實(shí)際上,如果您的編譯器不提供 IO 函數(shù),您可能需要自己編寫 IO 函數(shù)。

          void IO_WRITE(WORD addr, BYTE data)
          {
          _asm
          {
          mov dx, addr
          mov al, data
          out dx, al
          }
          }

          BYTE IO_READ(WORD addr)
          {
          _asm
          {
          mov dx, addr
          in al, dx
          }
          }

          現(xiàn)在我們看到 EPP 支持四種類型的事務(wù)。讓我們?yōu)槊總€(gè)函數(shù)編寫一個(gè)函數(shù)。

          void EPP_write_addr(BYTE address)
          {
          IO_WRITE(EPP_port_addr+3, address);
          }

          void EPP_write_data(BYTE data)
          {
          IO_WRITE(EPP_port_addr+4, data);
          }

          BYTE EPP_read_addr()
          {
          return IO_READ(EPP_port_addr+3);
          }

          BYTE EPP_read_data()
          {
          return IO_READ(EPP_port_addr+4);
          }

          就這樣。
          EPP 硬件處理所有 EPP 協(xié)議細(xì)節(jié),因此軟件不必執(zhí)行太多操作。

          EPP 3 - 硬件協(xié)議

          下面是來(lái)自 PC 的 DB25 打印機(jī)連接器的視圖。

          引腳 2 至 9 是 8 位總線。在 EPP 模式下,8 位總線是雙向的。
          還有其他重要的引腳是:

          引 腳名字方向積極
          17地址選通PC -> FPGA地址交易
          14數(shù)據(jù)選通PC -> FPGA數(shù)據(jù)事務(wù)
          11FPGA -> PC對(duì)頻閃的響應(yīng)
          1PC -> FPGA0 表示寫入事務(wù),1 表示讀取事務(wù)

          您可以看到有 2 個(gè)“頻閃”信號(hào)和一個(gè)“等待”信號(hào)。 “閃光燈”來(lái)自 PC,而“等待”來(lái)自 PC。

          其工作原理如下:對(duì)于每筆交易,PC 都會(huì)斷言其中一個(gè)選通,F(xiàn)PGA 會(huì)以等待來(lái)響應(yīng)。
          讓我們選擇一個(gè)頻閃信號(hào)(一次只激活一個(gè)),讓我們看一個(gè) EPP 事務(wù):

          解釋:

          1. 電腦想要啟動(dòng)事務(wù)。它斷言其中一個(gè)頻閃 (=low)。
            如果事務(wù)是寫,則 PC 也會(huì)將“寫”驅(qū)動(dòng)為低電平,并驅(qū)動(dòng) 8 位總線。否則,它將“寫”驅(qū)動(dòng)為高電平,并使 8 位總線懸空。

          2. FPGA 檢測(cè)到其中一個(gè)選通被置位,并通過(guò)取消置位“等待”(=高電平)進(jìn)行響應(yīng)。
            如果事務(wù)是讀取,則 FPGA 開(kāi)始驅(qū)動(dòng) 8 位總線。

          3. PC 檢測(cè)到等待已取消置位,因此它會(huì)取消置位選通。
            如果事務(wù)是寫入,則 PC 將停止驅(qū)動(dòng) 8 位總線。

          4. FPGA 檢測(cè)到選通已取消置位,因此它斷言“等待”。
            如果事務(wù)是讀取,則FPGA停止驅(qū)動(dòng)8位總線。

          所有這些都是在硬件中完成的;除了啟動(dòng)交易之外,PC 軟件無(wú)需執(zhí)行任何操作。

          EPP 4 - HDL

          讓我們看看在 FPGA 中實(shí)現(xiàn) EPP 端口是多么容易。

          首先,讓我們從并行端口信號(hào)創(chuàng)建一些信號(hào)。 我們反轉(zhuǎn)一些信號(hào),使所有新信號(hào)都處于高電平有效狀態(tài)。

          // Let's create a few signals from the "PP" parallel port pins
          // first for the EPP outputs (i.e. outputs from the PC, inputs for us)
          wire EPP_write = ~PP[1];wire EPP_addr_strobe = ~PP[17];
          wire EPP_data_strobe = ~PP[14];
          wire [7:0] EPP_datain = PP[9:2];
          // now for the EPP inputs
          wire EPP_wait;
          assign PP[11] = EPP_wait;
          wire [7:0] EPP_dataout;
          assign PP[9:2] = EPP_dataout;

          現(xiàn)在,大多數(shù)FPGA設(shè)計(jì)都使用自己的時(shí)鐘。 讓我們將時(shí)鐘稱為“clk”,并將頻閃信號(hào)與時(shí)鐘同步。

          // Use a 3-taps shift register to synchronize EPP_strobe to our clock
          wire EPP_strobe = EPP_data_strobe | EPP_addr_strobe;  // only one is active at a time
          reg [2:0] EPP_strobe_reg;
          always @(posedge clk) EPP_strobe_reg <= {EPP_strobe_reg[1:0], EPP_strobe};

          // detect the strobe edges
          wire EPP_strobe_edge1 = (EPP_strobe_reg[2:1]==2'b01);
          wire EPP_strobe_edge2 = (EPP_strobe_reg[2:1]==2'b10);

          // respond right away to a transaction
          assign EPP_wait = EPP_strobe_reg[1];

          現(xiàn)在我們可以處理 EPP 寫入了。讓我們將接收到的值存儲(chǔ)到寄存器中。

          // EPP writes
          reg [7:0] addr_reg, data_reg;
          always @(posedge clk) if(EPP_strobe_edge1 & EPP_write & EPP_addr_strobe) addr_reg <= EPP_datain;
          always @(posedge clk) if(EPP_strobe_edge1 & EPP_write & EPP_data_strobe) data_reg <= EPP_datain;

          EPP 現(xiàn)在閱讀。讓我們回讀寄存器中存儲(chǔ)的內(nèi)容......

          // EPP reads
          wire EPP_read = ~EPP_write;
          wire [7:0] EPP_data_mux = EPP_addr_strobe ? addr_reg : data_reg;
          assign EPP_dataout = (EPP_read & EPP_wait) ? EPP_data_mux : 8'hZZ;

          就是這樣。
          祝賀!您現(xiàn)在可以使用 EPP 讀取和寫入 FPGA。

          接下來(lái)要嘗試什么?

          • 延遲EPP_wait信號(hào)(如果使用長(zhǎng)并行電纜,信號(hào)的穩(wěn)定速度可能會(huì)很慢,因此可能需要延遲)。

          • 使用自動(dòng)遞增地址計(jì)數(shù)器創(chuàng)建寄存器庫(kù)。

          輪到你來(lái)實(shí)驗(yàn)了!



          評(píng)論


          相關(guān)推薦

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

          關(guān)閉