新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 采用VC++程序的FPGA重配置設(shè)計方案

        采用VC++程序的FPGA重配置設(shè)計方案

        作者: 時間:2010-04-21 來源:網(wǎng)絡(luò) 收藏


        Windows XP操作系統(tǒng)中的驅(qū)動開發(fā)主要是基于Win32模式驅(qū)動,即基于WDM(Win32 Driver Model)。在WDM驅(qū)動模型中,每個硬件設(shè)備至少有兩個驅(qū)動:總線驅(qū)動程序和功能驅(qū)動程序。其中總線驅(qū)動程序由Windows提供,需要考慮的是負責實現(xiàn)PCI設(shè)備邏輯功能的功能驅(qū)動程序。所以,驅(qū)動程序分為以動態(tài)鏈接庫形式的儀器驅(qū)動程序和以WDM格式的底層的接口驅(qū)動程序。前者用于實現(xiàn)對目標硬件的操作,即下載數(shù)據(jù)流對;后者則可實現(xiàn)資源分配、接口管理及數(shù)據(jù)的控制傳輸。

        3 數(shù)據(jù)分析

        中的應(yīng)用軟件所要下載的配置數(shù)據(jù)流是由硬件者根據(jù)需求提供的,是以二進制形式存儲的.rpd文件。可以根據(jù)不同的來選擇不同的外圍存儲芯片(如EPCS1,EPCS16),從而生成不同大小的配置數(shù)據(jù)流。由于軟件中,每次下發(fā)的數(shù)據(jù)一定,所以,由數(shù)據(jù)流的大小就能決定循環(huán)發(fā)送數(shù)據(jù)的次數(shù)。

        由于硬件設(shè)計者提供的.rod文件中的數(shù)據(jù)并不是原始的配置數(shù)據(jù),而是所要配置的數(shù)據(jù)經(jīng)過反轉(zhuǎn)生成的新的配置數(shù)據(jù)流,所以,要先將.rpd中的數(shù)據(jù)反轉(zhuǎn)處理后再發(fā)送給硬件。通過用戶界面可以二進制的形式打開.rod文件并讀數(shù),將配置數(shù)據(jù)流以單字節(jié)的形式暫存在一數(shù)組中,然后對數(shù)據(jù)進行反轉(zhuǎn)處理。數(shù)組中每個單字節(jié)數(shù)據(jù)的反轉(zhuǎn)過程為:unsigned char strl=DE,反轉(zhuǎn)后為strl=7B,定義無符號char型變量bi(i為小于8的整數(shù)),可由下面的轉(zhuǎn)換完成:



        由此可以得到:strl=7B。對反轉(zhuǎn)處理生成的單字節(jié)數(shù)據(jù)經(jīng)過組合處理后,最終便可得到對進行配置所需要的數(shù)據(jù)流。

        4 儀器驅(qū)動函數(shù)的設(shè)計

        根據(jù)硬件設(shè)計,儀器驅(qū)動需將配置數(shù)據(jù)以長整型的形式發(fā)送,即32位。因為配置數(shù)據(jù)的長度為16位,所以發(fā)送數(shù)據(jù)時,每次要傳兩個數(shù),高16位和低16位分別放一個數(shù)。當應(yīng)用程序打開.rpd文件時,應(yīng)將其中配置數(shù)據(jù)流保存在數(shù)組ww[f]中,而反轉(zhuǎn)處理后得到的數(shù)據(jù)依然放在數(shù)組ww[f]中并覆蓋原來的數(shù)據(jù),然后根據(jù)公式(1)進行組合處理,以得到最終要發(fā)送的32位數(shù)據(jù)并保存在長整型數(shù)組comdata[f]中。數(shù)組comdata[j]中的每個數(shù)據(jù)實際上包含兩個配置數(shù)據(jù),第一個數(shù)放在高16位,第二個數(shù)放在低16位,依次類推。確定好數(shù)據(jù)后,便可以調(diào)用動態(tài)連接庫中的發(fā)送數(shù)據(jù)函數(shù)并發(fā)送給硬件。

        comdata[j]=(ww[i]24)O(ww[i+1]16)O(ww[i+2]8)Oww[i+3](1)


        評論


        相關(guān)推薦

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

        關(guān)閉
        主站蜘蛛池模板: 庆城县| 苏尼特右旗| 仪征市| 慈利县| 柳州市| 阜宁县| 离岛区| 大安市| 石屏县| 阿巴嘎旗| 威信县| 梨树县| 明光市| 光山县| 白银市| 珲春市| 莱州市| 嘉兴市| 常宁市| 太和县| 华安县| 阿鲁科尔沁旗| 兴国县| 饶阳县| 贡嘎县| 宁陵县| 唐山市| 岑溪市| 安新县| 开江县| 安远县| 阿克| 崇义县| 旬邑县| 浦东新区| 宁强县| 玉屏| 延寿县| 新蔡县| 永仁县| 澄城县|