亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于Verilog HDL的電子電路設(shè)計圖的一種可視化編程方法

        2014-11-19 16:25:23鄧凱升趙宇晴
        卷宗 2014年10期
        關(guān)鍵詞:端口變量電路

        鄧凱升 趙宇晴

        隨著計算機軟件工程技術(shù)的迅速發(fā)展,可視化編程技術(shù)已經(jīng)成為當(dāng)今軟件開發(fā)最重要的工具和手段。尤其是Power Builder、Visual C++等開發(fā)工具的出現(xiàn),大大推動了可視化編程技術(shù)的發(fā)展。本文旨在探索可視化編程技術(shù)在基于硬件描述語言的電子電路設(shè)計領(lǐng)域的實現(xiàn),介紹一種將電路設(shè)計圖自動轉(zhuǎn)換成硬件描述語言(Verilog HDL)的方法。

        1.設(shè)計思想及實現(xiàn)方法

        1.1.電路圖的處理思想

        電路圖的處理是指將電路設(shè)計圖的信息轉(zhuǎn)換成可處理的數(shù)據(jù)存儲到數(shù)據(jù)結(jié)構(gòu)中的過程。在電子電路圖設(shè)計者完成畫圖后,將電路圖的圖形信息轉(zhuǎn)化成數(shù)據(jù)結(jié)構(gòu)信息進行存儲,方便進行接下來硬件描述語言的自動生成。我們選擇在電路圖完成后統(tǒng)一進行信息轉(zhuǎn)換,這樣不容易出錯,而且實時轉(zhuǎn)換可能會造成轉(zhuǎn)換信息的反復(fù)更新重寫,增加了轉(zhuǎn)換過程的設(shè)計負擔(dān)、降低了效率。具體的數(shù)據(jù)結(jié)構(gòu)描述見1.2。

        1.2 主要數(shù)據(jù)結(jié)構(gòu)

        每個電路圖都由一個類對象存儲,類對象的定義如下:

        struct mycircuit

        {

        gate[];//gate類數(shù)組,記錄門信息

        ngate; //整型變量,記錄電路中門的個數(shù)

        pin[]; //pin類數(shù)組,記錄端口詳細信息

        npin; //整型變量,記錄電路中端口的個數(shù)

        wire[]; //wire類數(shù)組,記錄線路信息

        nwire; //整型變量,記錄電路中連線的條數(shù)

        }此處引入一個新的概念——電路信息表,是在邏輯上存儲電路連接關(guān)系的數(shù)據(jù)結(jié)構(gòu)。和路由器維護的路由表原理相似,電路圖中的每個元件都會維護一張電路信息表,這張表記錄了該元件的位置,該元件的種類,以及該元件的連線情況。

        下面以組合邏輯電路為例建立示范電路信息表:

        struct position /* Position類,記錄元器件所在位置的坐標*/ {x;y;};

        struct gate/* gate類,記錄門信息*/ {

        inwrie[];//整型數(shù)組,輸入線路編號

        nwin;//整型變量,輸入線路數(shù)量

        outwrie[];//整型數(shù)組,輸出線路編號

        nwrout;//整型變量,輸出線路數(shù)量

        psi;//position類對象,門的位置信息

        type;//整型標志位,區(qū)分電路中門類型

        };

        struct pin/* pin類,記錄輸出輸出端口信息*/ {

        psi;//position類對象,記錄端口位置

        type;//整型變量,標志位,0為輸入端口,1為輸出端口

        iowire;//整型變量,記錄與該端口連接的線路編號

        };

        struct wire/*wire類,存儲連線相關(guān)的信息*/ {

        start;//position類對象,線頭位置

        end;//position類對象,線尾位置

        endgate;//整型變量,起點連接的門編號

        startgate;//整型變量,終點連接的門編號

        endpin;//整型變量,起點連接的端口編號

        startpin;/整型變量,終點連接的端口編號

        status;//整形變量,生成硬件描述語言過程中的狀態(tài)位,當(dāng)前算法生成過程只需一次掃描

        };

        為了提高效率,電路信息表中對其他類的保存均由整型數(shù)組記錄其編號,編號是自動分配的,具體分配方法見1.3。

        電路信息表亦可設(shè)置為在每個gate類對象與pin類對象中記錄其上游器件和下游器件,這樣則不用設(shè)置wire類,但生成硬件描述語言時需要對電路進行深度優(yōu)先遍歷,增加了時間復(fù)雜度,本文采用的記錄方法,只需對每個門生成對應(yīng)賦值語句,不用考慮遍歷順序,詳細算法見1.4.2。

        1.3.生成電路信息表

        生成電路信息表的過程主要包括對預(yù)處理得到的關(guān)鍵字段的處理和電路連接關(guān)系的判斷。其中關(guān)鍵字段的處理主要包括:連線信息處理、輸入輸出端口以及門信息處理。

        其中連線信息處理包括線路信息提取、拐線合并和線路排序。為了方便存儲,我們并不存儲完整的拐線,而是將其分割為相連接的直線,故一條完整的拐線由若干條直線連接而成,記錄每條wire的坐標時按照從上到下,從左到右的順序區(qū)分起點和終點。

        考慮到硬件描述語言的連續(xù)賦值語句中會出現(xiàn)線路編號,為了增加交互性和可讀性,我們這里按照線路起點的橫坐標由小到大、縱坐標從小到大進行排序,自動匹配編號,方便用戶對應(yīng)位置來理解、檢查電路。

        輸入輸出端口編號也會出現(xiàn)在最終生成的Verilog 硬件描述語言中,因此需要也根據(jù)端口位置信息進行一次排序處理。

        通過以上操作,我們已經(jīng)將電路設(shè)計圖的元件位置信息以及元件編號都存到了相應(yīng)的數(shù)據(jù)結(jié)構(gòu)中,接下來的電路的邏輯連接關(guān)系判斷正是基于坐標信息實現(xiàn)的。判斷一條連線是否連接到端口或門,是通過連線的起點、終點坐標和端口或門的尺寸大小及坐標等信息來判定的。在這一結(jié)論的基礎(chǔ)上,我們可以對電路信息表中的各字段進行賦值從而完成電路信息表的構(gòu)建。

        1.4.生成數(shù)據(jù)流描述的Verilog HDL硬件描述語言

        1.4.1模塊及聲明

        Verilog HDL中,需要在模塊開始就聲明所有端口和模塊名,算法如下:先輸出固定字符“module test(”,然后在括號內(nèi)執(zhí)行:

        for(1;i<=pin的個數(shù);i++){

        輸出“pin_i”;

        if(i不等于pin的個數(shù)){

        輸出“,”;

        }

        else 輸出“);”

        }

        然后進行端口指定,即聲明端口的輸入輸出屬性,算法如下:

        for(i=1;i<=pin的個數(shù);i++){

        if(pin[i].type = 0)

        輸出“input pin_i”;

        else if(pin[i].type = 1)

        輸出“output pin_i”;

        }

        接下來聲明wire型變量,需要注意的是,如果連線的一端有輸入輸出端口,則在連續(xù)賦值語句中不會出現(xiàn)該線路而是由相應(yīng)的輸入輸出端口替代,相應(yīng)實現(xiàn)過程算法為:

        for(i=1;i<=wire的個數(shù);i++)

        if(wire[i]的首尾均是gate)

        輸出“wire W_i;”

        1.4.2連續(xù)賦值語句

        由于數(shù)據(jù)流描述的模塊是連線與端口的邏輯運算的描述,即有多少個門就有多少連續(xù)賦值語句,所以只需要對門進行一次遍歷。

        生成算法為:

        for (gate[i]){

        輸出“gate[i]的輸出線路 or該線路終點連接的端口”;//賦值表達式左端

        輸出 “=”; //賦值運算符

        for(gate[i]的每個輸入線路j) //賦值表達式右端{

        輸出“j or j起點連接的端口”;

        if(j不是最后一條線路)

        輸出“gate[i].type對應(yīng)的邏輯運算符”;

        }

        }

        上述算法中,若連線的一端連接端口,則在生成過程中用端口名替換線路名。

        以這種方法對每個門進行掃描,最后加上“endmodule”即完成了數(shù)據(jù)流的模塊硬件語言描述轉(zhuǎn)換。

        1.5.結(jié)構(gòu)化模塊調(diào)用

        結(jié)構(gòu)化模塊調(diào)用是Verilog HDL普遍使用的一種描述方法:對于用戶已經(jīng)連接好的模塊,進行封裝保存,記錄該模塊的名稱、輸入輸出接口和對應(yīng)的Verilog HDL代碼。當(dāng)用戶在圖形化界面中調(diào)用自定義模塊時,先是生成自定義模塊的實例化代碼,保存為單獨的用戶自定義Verilog文件,然后將該模塊視作一個封裝起來的元件,用基于位置的連接判斷方法確定每個接口與當(dāng)前電路中wire的連接關(guān)系。然后在頂層模塊生成過程中,根據(jù)用戶指定的函數(shù)名稱和判斷得到的端口信息來調(diào)用該模塊。

        本文以組合邏輯電路為例,介紹了一種將電子電路設(shè)計圖自動轉(zhuǎn)化為Verilog HDL硬件描述語言的方法,若再進行引腳分配,將生成的硬件描述語言下載到現(xiàn)場可編程邏輯陣列中,就可以完成整個EDA的設(shè)計。該方法可以作為可視化編程工具的原型進行學(xué)習(xí)、使用和進一步開發(fā)。

        猜你喜歡
        端口變量電路
        電路的保護
        抓住不變量解題
        一種端口故障的解決方案
        也談分離變量
        解讀電路
        巧用立創(chuàng)EDA軟件和Altium Designer軟件設(shè)計電路
        電子制作(2019年24期)2019-02-23 13:22:20
        基于MATLAB模擬混沌電路
        電子制作(2018年17期)2018-09-28 01:56:44
        端口阻塞與優(yōu)先級
        SL(3,3n)和SU(3,3n)的第一Cartan不變量
        初識電腦端口
        電腦迷(2015年6期)2015-05-30 08:52:42
        在线视频自拍视频激情| 国产精品无码日韩欧| 久久人妻AV无码一区二区| 永久免费中文字幕av| 蜜臀av一区二区三区久久| 色费女人18毛片a级毛片视频| 色婷婷欧美在线播放内射| 中文无码免费在线| 亚洲中文字幕精品久久吃奶| 日本最新免费二区三区| 老太脱裤让老头玩ⅹxxxx| 久久久久无码中文字幕| 久久一区二区三区老熟女| 国产精品泄火熟女| 二区三区视频| 久久精品国产亚洲av调教| 国产成人一区二区三区乱| 亚洲熟妇av日韩熟妇在线| 国产午夜福利精品| 少妇又紧又色又爽又刺| 欧美激情视频一区二区三区免费 | 国产人妻久久精品二区三区特黄| 久久亚洲AV无码精品色午夜| 看中文字幕一区二区三区| 人妻丰满熟妇av无码区app| 欧美日韩一卡2卡三卡4卡 乱码欧美孕交 | 91九色精品日韩内射无| 免费a级毛片无码a∨蜜芽试看| 国产人与禽zoz0性伦| 中文字幕无码高清一区二区三区| 亚洲在线精品一区二区三区| 人妻 色综合网站| 国产精品自产拍在线观看免费| 91中文在线九色视频| 成人免费无码视频在线网站 | 国产高清av首播原创麻豆| 亚洲中文字幕久久精品蜜桃| 国产一区二区三区白浆肉丝| 精品国产第一国产综合精品| 久久99国产亚洲高清观看韩国| 国产最新一区二区三区|