• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    基于VerilogHDL語言的有限狀態(tài)機設計

    2014-04-29 00:44:03王塞博毛先柏
    中國電子商情 2014年5期
    關鍵詞:狀態(tài)機觸發(fā)器時序

    王塞博 毛先柏

    引言:有限狀態(tài)機及其設計技術是實用數(shù)字系統(tǒng)設計中的重要組成部分,也是實現(xiàn)高效率、高可靠和高速控制邏輯系統(tǒng)的重要途徑。VerilogHDL 是一種硬件描述語言,可以在門級和寄存器傳輸級描述硬件,在算法級對硬件加以描述。狀態(tài)機是數(shù)字系統(tǒng)的控制單元, 包括時序邏輯和組合邏輯, 語言描述較為抽象, 如果句柄編寫不規(guī)范, 綜合工具就很難把抽象思維變?yōu)殚T級電路。本文介紹了VerilogHDL語言的綜合實質, 研究了編寫可綜合的狀態(tài)機的方法、步驟以及綜合原則, 具有一定的參考價值。

    引言

    有限狀態(tài)機FSM是一種基本的、簡單的、重要的形式化技術,在軟件設計中常常采用。FSM就是描述一個由有限個獨立狀態(tài)組成的過程,這些狀態(tài)可以互相遷移,直到最終離開這個過程。采用有限狀態(tài)機可以使設計過程直觀簡單易于理解,大大加快設計流程。隨著硬件設計軟件化趨勢的加劇,在運用VerilogHDL硬件描述語言設計數(shù)字系統(tǒng)時,利用有限狀態(tài)機成為了可靠方便的途徑,有許多電路功能可以利用有限狀態(tài)機的設計方案來描述和實現(xiàn)??刂破髯鳛殡娮酉到y(tǒng)設計的核心部分,在EDA軟件平臺上,借助有限狀態(tài)機表示方法符合人的思維邏輯的特性,將控制功能用有限狀態(tài)機來建模實現(xiàn),有許多優(yōu)越之處,已使FSM成為大型控制電路設計的有力工具。

    一、狀態(tài)機的設計

    所謂狀態(tài)機,就是用來控制數(shù)字系統(tǒng),根據(jù)它的輸出逐步地進行相應操作和運算的機器(這里應理解為電路)。有限狀態(tài)機設計的關鍵是:如何把一個實際的時序邏輯關系抽象成一個時序邏輯函數(shù),傳統(tǒng)的電路圖輸入法通過直接設計寄存器組來實現(xiàn)各個狀態(tài)之間的轉換,而用硬件描述語言來描述有限狀態(tài)機,往往是通過充分發(fā)揮硬件描述語言的抽象建模能力,通過系統(tǒng)級或寄存器傳輸級進行描述來建立有限狀態(tài)機。

    一個完備的狀態(tài)機應該具有初始狀態(tài)和默認狀態(tài)。當芯片加電或者復位后,狀態(tài)機能夠自動將所有的判斷條件復位, 并進入初始狀態(tài);當轉移條件不滿足, 或者狀態(tài)發(fā)生突變時,狀態(tài)機進入一個默認(default)狀態(tài),能保證邏輯不會陷入“死循環(huán)”,這是對狀態(tài)機健壯性的一個重要要求,即自動恢復功能。Verilog中,使用“case”語句的時候要用“def ault”建立默認狀態(tài)。使用完備的“ifelse”的好處是:可以避免生成非目的性的“鎖存器”。一般采用case,casex或casez語句來建立狀態(tài)機的模型,可方便地從當前狀態(tài)分支轉向下一個狀態(tài),并設置輸出。case語句的最后一個分支default等于告訴綜合器:case語句已經(jīng)指定了所有的狀態(tài)。這樣綜合器就可以刪掉不需要的譯碼電路,使生成的電路簡潔,并與設計要求一致。

    二、一般有限狀態(tài)機的結構

    最一般和最常用的狀態(tài)機結構中通常都包含了說明部分,主控時序過程,主控組合過程,輔助過程等幾個部分。

    將以下面例子,對一個簡單的狀態(tài)機(moore型)進行分析,說明一般有限狀態(tài)機的結構。

    該狀態(tài)機狀態(tài)轉換圖如下:

    Reset

    Module moore(clk,din,op);//定義輸入、輸出以及中間變量

    Input clk,din;

    Output op;

    Reg op;

    (1)說明部分

    說明部分包含狀態(tài)轉換變量的定義和所有可能狀態(tài)的說明,必要時還要確定每一狀態(tài)的編碼形式。

    reg[1:0]current_state,next_state;

    Parameter S0=2'b00,S1=2'b01,S2=2'b10,S3=2'b11;

    (2)主控時序過程

    所謂主控時序過程是指負責狀態(tài)機運行和在時鐘驅動下負責狀態(tài)轉換的過程。狀態(tài)機是隨外部時鐘信號,以同步時序工作方式工作的,因此必須有一個時鐘信號進行驅動。

    always@(posedge clk)

    begin

    current_state<=next_state;

    end

    (3)主控組合過程

    如果將狀態(tài)機比喻成一臺機床,那么主控時序過程即為此機床的驅動電機,而主控組合過程則為機床的機械加工部分,它來表明此機床的具體作用。因此,主控組合過程也可稱為狀態(tài)譯碼過程,其任務是根據(jù)外部輸入的控制信號(包括來自狀態(tài)機外部的信號和來自狀態(tài)機內(nèi)部其他非主控的組合或時序過程的信號)以及當前狀態(tài)機的狀態(tài)值確定下一狀態(tài)的取向,以及確定對外輸出或對內(nèi)部其他組合或時序過程輸出控制信號的內(nèi)容。

    always@(current_state or din)begin

    case(current_state)

    S0:begin

    op=0;

    if(din==0)

    next_state=S0;

    else

    next_state=S1;

    end

    S1:begin

    op=0;

    if(din==0)

    next_state=S0;

    else

    next_state=S2;

    end

    S2:begin

    op=0;

    if(din==0)

    next_state=S0;

    else

    next_state=S3;

    end

    S3:begin

    op=1;

    if(din==0)

    next_state=S0;

    else

    next_state=S3;

    end

    default:begin op=0;

    next_state=S0;

    end

    endcase

    end

    endmodule

    (4)else輔助過程

    主要是用于配合狀態(tài)機工作的組合過程或時序過程,如根據(jù)狀態(tài)機的輸出繼續(xù)完成某個計算算法,或為了穩(wěn)定輸出的數(shù)據(jù)鎖存等。

    輔助過程可以不作為狀態(tài)機的組成部分,而作為單獨的電路存在。

    狀態(tài)機的一般結構示意圖

    cs

    clk

    resetns output

    input

    三、狀態(tài)機設計的一般步驟

    (1)邏輯抽象得出狀態(tài)轉移圖。即把給出的一個實際邏輯關系表示為時序邏輯關系,進而表示為時序邏輯函數(shù)。可以用狀態(tài)轉換表來描述, 也可以用狀態(tài)轉移圖來描述。

    1.分析給定的邏輯問題, 確定輸入變量、輸出變量以及電路的狀態(tài)數(shù)。通常取原因(或條件)為輸入變量,取結果為輸出變量。

    2.定義輸入、輸出邏輯狀態(tài)關系的含義,并將電路狀態(tài)順序編號。按要求列出電路的狀態(tài)轉移表或畫出狀態(tài)轉移圖。

    (2)狀態(tài)簡化。如果在狀態(tài)轉移圖中出現(xiàn)這樣兩個狀態(tài):他們在相同的輸入下轉換到同一個狀態(tài)去,并得到相同的輸出,則稱他們?yōu)榈葍r態(tài)。等價態(tài)是重復的,可以合并為一個狀態(tài),電路的狀態(tài)數(shù)越少,存儲電路就越簡單。

    (3)狀態(tài)分配,也稱狀態(tài)編碼。編碼的方案選擇得當,設計的電路就可以簡單,反之就復雜。在實際設計中主要考慮電路的復雜度和電路的性能這兩個因素。在觸發(fā)器資源豐富的FPGA或ASIC設計中,采用獨熱編碼(one hotcoding)即可以保障電路性能,又可以充分發(fā)揮觸發(fā)器數(shù)量多的優(yōu)點,提高狀態(tài)機的運行速度。

    (4)選定觸發(fā)器的類型并求出狀態(tài)方程,驅動方程和輸出方程。

    (5)按照方框圖得出邏輯圖。

    四、狀態(tài)機綜合的一般原則

    (1)綜合之前一定要進行仿真,因為仿真會暴露邏輯錯誤,如果不做仿真,沒有發(fā)現(xiàn)的邏輯錯誤會進入綜合器,使綜合的結果產(chǎn)生同樣的邏輯錯誤。

    (2)每一次布線之后都要進行仿真,在器件編程或流片之前一定要進行仿真。

    (3)用VerilogHDL語言描述的異步狀態(tài)機是不能綜合的,因此應該避免用綜合器來設計,如果一定要設計異步狀態(tài)機,則可以用電路圖輸入的方法來設計。

    (4)如果要為電平敏感的鎖存器建模,使用連續(xù)賦值語句是最簡單的方法。目前大多數(shù)綜合器往往不支持在一個always塊中有多個事件觸發(fā)的狀態(tài)機(隱含狀態(tài)機)。如果設計要求必須有不同時鐘觸發(fā)器的狀態(tài)機,可以采用以下方法:編寫另一個模塊,在那個模塊中使用另外一個時鐘;然后使用實例引用的方法在另一個模塊中把他們連接起來。為了使設計簡單,容易調試,盡量使這兩個狀態(tài)機的時鐘有一定的關系。例如甲模塊的時鐘是乙模塊時鐘同步計數(shù)器的輸出。目前大多數(shù)的綜合器不能綜合采用VerilogHDL描述的異步狀態(tài)機。異步狀態(tài)機是沒有確定時鐘的狀態(tài)機,他的狀態(tài)轉移不是由惟一的時鐘跳變沿所觸發(fā)。之所以不能用異步狀態(tài)機來綜合的原因是:異步狀態(tài)機不容易規(guī)范觸發(fā)器的瞬間, 不容易判別是正常的觸發(fā)脈沖還是冒險競爭的毛刺。

    同步狀態(tài)機的時鐘是由同一個時鐘產(chǎn)生的,通過特殊設計的全局的時鐘網(wǎng)絡連接到每一個觸發(fā)器的時鐘端, 這樣時鐘沿到達每一個觸發(fā)器的時鐘端的時刻幾乎完全相同。

    小結

    VerilogHDL語言不是為了綜合而專門設計的語言,設計出的模型與綜合出的網(wǎng)表可能會出現(xiàn)功能上的不一致,那就要進行功能驗證。一般有2種方法:

    (1)將在設計模型的仿真過程中使用的那組激勵拿來對網(wǎng)表進行仿真, 將仿真結果保存在結果文件中,然后比較兩者的仿真結果是否相同。

    (2)編寫測試平臺。用VerilogHDL編寫的模型, 并施加各種激勵、比較輸出響應、報告任何功能不一致處。在利用VerilogHDL語言進行電路設計時,必須考慮到其可綜合性。目前,VerilogHDL語言可綜合性沒有統(tǒng)一的標準,不同廠家提供的綜合工具將電路的RT L級語言描述轉換成門級網(wǎng)表的能力也不相同,所以必須掌握其技巧才能寫出可綜合風格的VerilogHDL 的RT L級語言描述程序。

    參考文獻

    [1]T homas, Mo or by.硬件描述語言Verilo g[M].第4版.劉明業(yè),蔣敬旗譯.北京:清華大學出版社,2002.

    [2]潘松、黃繼業(yè)、陳龍 eda技術與verilog hdl北京:清華大學出版社2010.

    [3]方洪浩、雷蕾 基于Verilog HDL的有限狀態(tài)機設計科學技術與工程2007.

    [4]李玲、王祖強 Verilog HDL代碼描述對狀態(tài)機綜合的研究信息技術與信息化2009.

    猜你喜歡
    狀態(tài)機觸發(fā)器時序
    時序坐標
    基于Sentinel-2時序NDVI的麥冬識別研究
    基于有限狀態(tài)機的交會對接飛行任務規(guī)劃方法
    主從JK觸發(fā)器邏輯功能分析
    電子世界(2017年22期)2017-12-02 03:03:45
    使用觸發(fā)器,強化安全性
    一種毫米波放大器時序直流電源的設計
    電子制作(2016年15期)2017-01-15 13:39:08
    DPBUS時序及其設定方法
    河南科技(2014年15期)2014-02-27 14:12:36
    對觸發(fā)器邏輯功能轉換的分析
    觸發(fā)器邏輯功能轉換的兩種方法
    FPGA設計中狀態(tài)機安全性研究
    黑龍江科學(2011年2期)2011-03-14 00:39:36
    泸州市| 乌拉特前旗| 正安县| 娄烦县| 肥西县| 观塘区| 西安市| 文昌市| 山阴县| 三穗县| 吴江市| 上思县| 东乌珠穆沁旗| 泾川县| 塔城市| 南部县| 陆河县| 柘荣县| 乳山市| 图木舒克市| 阿城市| 和政县| 汪清县| 澄迈县| 光泽县| 饶阳县| 轮台县| 德清县| 临猗县| 鸡泽县| 偏关县| 隆林| 廉江市| 房山区| 宝坻区| 宁南县| 临西县| 渑池县| 永城市| 兴文县| 凭祥市|