新聞中心

        EEPW首頁 > EDA/PCB > 設計應用 > Verilog HDL語言在FPGA/CPLD開發中的應用

        Verilog HDL語言在FPGA/CPLD開發中的應用

        作者: 時間:2012-10-08 來源:網絡 收藏

        1 引言

        本文引用地址:http://www.104case.com/article/189865.htm

        近30年來,由于微電子學和計算機科學的迅速發展,給EDA(電子設計自動化)行業帶來了巨大的變化。特別是進入20世紀90年代后,電子系統已經從電路板級系統集成發展成為包括ASIC、和嵌入系統的多種模式。可以說EDA產業已經成為電子信息類產品的支柱產業。EDA之所以能蓬勃發展的關鍵因素之一就是采用了硬件描述語言()描述電路系統。就開發而言,比較流行的主要有 、VHDL、ABEL-HDL和 AHDL 等,其中VHDL和 HDL因適合標準化的發展方向而最終成為IEEE標準。但與VHDL相比, HDL有個最大的優點:它是一種非常容易掌握的硬件描述語言,只要有C語言的編程基礎,一般經過2~3個月的認真學習和實際操作就能掌握這種設計技術。并且完成同一功能Verilog HDL的程序條數一般僅為VHDL的1/3。而VHDL設計技術則不很直觀,需要有EDA編程基礎,通常需要有多余半年的專業培訓才能掌握這們技術。可見,用Verilog HDL語言有更高的優越性。

        2 設計實例

        通常設計數字電路大都采用自頂向下將系統按功能逐層分割的層次化設計方法,這比傳統自下向上的EDA設計方法有更明顯的優勢(當時的主要設計文件是電路圖)。因為由自頂向下的設計過程可以看出,從總體行為設計開始到最終邏輯綜合,形成網絡表為止。每一步都要進行仿真檢查,這樣有利于盡早發現系統設計中存在的問題,從而可以大大縮短系統硬件的設計周期。這也是HDL語言設計系統硬件的最突出的優點之一。并且在頂層設計中,要對內部各功能塊的連接關系和對外的接口關系進行描述。而功能塊實際的邏輯功能和具體的實現形式則由下一層模塊來描述。在系統的底層設計中,由于其對系統很強的行為描述能力,可以不必使系統層層細化,從而避開具體的器件結構,從邏輯行為上直接對模塊進行描述和設計,隨后EDA設計軟件或相應的第三方工具軟件中的綜合器將程序自動綜合成為具體/等目標芯片的網表文件,這種避開具體器件結構的方式也是它的重要優勢之一。

        下面以序列檢測器的設計為例具體說明。

        序列檢測器是時序數字電路中非常常見的設計之一。它的主要功能是:將一個指定的序列從數字碼流中識別出來。接下來就以設計“01101”這個序列的檢測器為例,說明Verilog HDL語言的具體應用。設X為數字碼流輸入,Z為檢出標記輸出,高電平表示“發現指定序列”,低電平表示“沒有發現指定的序列”。設輸入的碼流為“001101101111011111...”,則其序列檢測器的邏輯功能如表1所示。

        在時鐘2~6中,碼流X里出現指定序列“01101”,對應輸出Z在第6個時鐘變為高電平“1”,表示發現指定序列“01101”,Z輸出“1”。同理在第9個時鐘對應輸出Z也為“1”。根據這個邏輯功能描述,我們可以分析得出狀態轉換圖(見圖1)。

        其中狀態A~E表示5位序列“01101”按順序正確地出現在碼流中。因為輸入碼流X是隨機的,因此可能會有很多重疊的情況發生。這樣在轉換圖中相應的還要有狀態F和G。設初始狀態為IDLE,則有相應的Verilog HDL語言程序如下。

        module seqdet(x,z,clk,rst);

        input x,clk,rst;

        output z;

        reg[2:0] state;

        wire z;

        parameter IDLE=3'd0,

        A=3'd1,

        B=3'd2,

        C=3'd3,

        D=3'd4,

        E=3'd5,

        F=3'd6,

        G=3'd7;

        assign z=(state==D x==1)?1:0;

        always@(posedge clk or negedge rst)

        if(!rst)

        begin

        state=IDLE;

        end

        else

        casex(state)

        IDLE:if(x==0)

        state=A;

        else state=IDLE;

        A:if(x==1)

        state=B;

        else state=A;

        B:if(x==1)

        state=C;

        else state=F;

        C:if(x==0)

        state=D;

        else state=G;

        D:if(x==1)

        state=E;

        else state=A;

        E:if(x==1)

        state=C;

        else state=A;

        F:if(x==0)

        state=A;

        else state=B;

        G:if(x==0)

        state=F;

        else state=G;

        default: state=IDLE;

        endcase

        endmodule


        上一頁 1 2 下一頁

        關鍵詞: Verilog FPGA CPLD HDL

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 莱阳市| 安吉县| 宜丰县| 东莞市| 温州市| 巴中市| 六枝特区| 环江| 长乐市| 剑阁县| 庆城县| 双鸭山市| 达州市| 普定县| 杨浦区| 方正县| 沧州市| 漠河县| 平顺县| 柘荣县| 抚宁县| 阳谷县| 双城市| 洛扎县| 象州县| 木兰县| 石河子市| 扶绥县| 龙井市| 长子县| 景洪市| 和龙市| 剑河县| 孟津县| 库尔勒市| 胶州市| 潮安县| 青龙| 侯马市| 日照市| 娄底市|