利用FPGA實現PCI總線接口及Windows驅動實現


利用FPGA實現PCI總線接口及Windows驅動實現

關於PCI總線協議,資料網上、書本都是。這里我們僅僅對重點對利用FPGA實現PCI總線接口問題進行簡單分析。下圖是PCI總線接口信號:


配置空間寄存器操作時序如下圖:


配置寄存器空間寫時序如下圖:


依照狀態機的編程思路。

部分Verilog代碼如下:

      ST_CFGREAD: begin

           enable <= EN_RD;

           if (~irdy || trdy) begin

                case (address)

                    0: data <= { DEVICE_ID,VENDOR_ID };

                    1: data <= { 5'b0,DEVSEL_TIMING, 9'b0,  14'b0, memen,1'b0};

                    2: data <= {DEVICE_CLASS, DEVICE_REV };

                    4: data <= { 12'b0,baseaddr, 8'b0, 4'b0010 }; // baseaddr + request mem < 1Mbyte

                    11: data <={SUBSYSTEM_ID, SUBSYSTEM_VENDOR_ID };

                    16: data <= { 24'b0,baseaddr };

                    default: data <='h00000000;

               endcase

                address <= address + 1'b1;

           end

           if (frame && ~irdy && ~trdy) begin

                devsel <= 1;

                state <= ST_IDLE;

                enable <= EN_TR;

           end

       end

 

       ST_CFGWRITE: begin

           enable <= EN_WR;

           if (~irdy) begin

                case (address)

                    4: baseaddr <=ad[19:12];  // XXX examine cbe

                    1: memen <= ad[1];

                    default: ;

                endcase

                address <= address + 1'b1;

                if (frame) begin

                    devsel <= 1;

                    state <= ST_IDLE;

                    enable <= EN_TR;

                end

           end

       end

完整代碼地址(QuartusII 9.0 (32-Bit)):http://download.csdn.net/detail/li171049/6784589

針對以上部分的windows驅動開發,就像我一篇文章(http://blog.csdn.net/li171049/article/details/17612283)中提到的windows對I/O讀寫的原理是一樣的。這部分驅動vc6.0+DDK2600我也實現了。----

--參見:http://download.csdn.net/detail/li171049/6784595

對於PCI總線讀寫時序,我還在研究中,這里就不瞎說了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM