新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 一種基于CPLD的單片機與PCI接口設計方案

        一種基于CPLD的單片機與PCI接口設計方案

        作者: 時間:2009-11-11 來源:網絡 收藏

        內設有13個8位寄存器用來保存進行一次PCI總線讀寫時所需要的數據,其中pci_address0~pci_address3是讀寫時的地址數據;

        一種基于CPLD的單片機與PCI接口設計方案

        圖1 簡化的PCI寫操作時序

        pcidatas0~pci_datas3是要往PCI設備寫的數據;pci_cbe[3~0]保存地址周期時的總線命令;pci_cbe[7~4]保存數據周期時的字節使能命令;pci_data0~pci_data3保存從PCI設備返回的數據;pci_request是PCI總線讀寫操作狀態寄存器,用于向返回一些信息。當往pci_cbe寄存器寫入一個字節的時候,會復位中的狀態機,觸發進行PCI總線的讀寫操作;則通過查詢pci_request寄存器得知讀寫操作完成,再從pci_data寄存器讀出PCI設備返回的數據。

        CPLD中狀態機的狀態轉移圖如圖2所示。每一個狀態對應FRAME與IRD信號的一種輸出,而其它輸入輸出信號線可由這兩個信號線和pci_cbe的值及TRDY的狀態決定。當FRAME為有效時,AD[31~0]由pci_address驅動,而C/BE[3~0]由pci_cbe低4位驅動;當IRDY有效時,C/BE[3~0]視總線命令,要么由pci_cbe高4位驅動,要么設為高阻態,而AD[31~0]在pci_cbe[0]為“0” (PCI讀命令)時,設為高阻態,而在pci_cbe[0]為“1” (PCI寫命令)時由pci_datas驅動。另外一方面,一旦TRDY信號線變為低電平,AD[31~0]線上的數據被送入pci_data寄存器,而C/BE[3~0]線上的數據被送入pci_request寄存器的低4位。

        狀態轉移圖

        圖2 狀態轉移圖

        考慮到在不正常情況下,PCI設備不會對PCI總線作出響應,即TRDY不會有效,為了不使狀態機陷入狀態S2的僵持局面,另外增設了一個移位計

        數器mycounter。當IRD信號有效時,計數器開始計數。計數溢出之后,不論PCI總線操作是否完成,狀態機都會從狀態S2轉移到狀態S3,即結束PCI總線操作。當TRDY有效時,會立即置位mycounter.cout。

        PCI總線操作是否正確完成,可查詢pci_request的最高位是否為“1”,而IRDY與FRAME的值可分別查詢pci_request的第4位和第5位。這兩位反映了PCI總線操作所處的狀態,兩位都為“1”時可以認為PCI總線操作已經完成。在實踐中,如果單片機的速度不是足夠快的話,可以認為PCI總線操作總是即時完成的。

        2 PCI接口實現

        2.1 CPLD VHDL程序

        我們針對8位單片機控制PCI以太網卡進行了程序,CPLD器件選用Xilinx的XC95216系列。針對以太網卡的特點在邏輯上進行了再次簡化,最終程序將適配進XC95261芯片中,并在實踐中檢驗通過。

        以太網卡僅支持對配置空間和I/O空間的讀寫操作,而且這兩個空間的地址都可以設置在0xFF以內,所以可以只用一個pci_address0寄存器,其它地址都直接設為“0”;如果再限制,每次只往網卡寫入一個字節數據,則可以只用一個pci_datas0寄存器,其它數值在具體操作時設成與pci_datas0寄存器的一樣即可。



        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 资中县| 布尔津县| 临城县| 治多县| 老河口市| 乌拉特中旗| 宣化县| 阜新市| 四子王旗| 灌南县| 托克逊县| 蒙自县| 华蓥市| 额尔古纳市| 浑源县| 钦州市| 阿拉善盟| 梁河县| 车险| 梁山县| 故城县| 天门市| 星座| 惠州市| 九龙城区| 乐清市| 潢川县| 琼海市| 普兰县| 东乡族自治县| 曲阜市| 长寿区| 什邡市| 南溪县| 抚州市| 苍南县| 紫阳县| 镇安县| 临清市| 绥中县| 渝北区|