新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > FPGA/CPLD狀態機的穩定性設計

        FPGA/CPLD狀態機的穩定性設計

        作者: 時間:2010-09-19 來源:網絡 收藏

          mach_input:in std_logic;

          mach_outputs:out std_logic_vector(0 to 1));

          endexample;

          architecture behave of example is

          constant st0:std_logic_vector(0 to 3):=0001;

          constant st1:std_logic_vector(0 to 3):=0010;

          constant st2:std_logic_vector(0 to 3):=0100;

          constant st3:std_logic_vector(0 to 3):=1000;

          signal current_state,next_state:std_logic vector(0 to 3);

          begin

          ……

          對FLEX10K系列器件綜合后的仿真結果如圖3所示.

          

          圖3 采用“ONEHOT”編碼的機綜合后的波形

          如圖3所示,在輸入信號穩定以后,機的輸出信號也穩定下來,定義這種風格的碼來基于FPGA的狀態機是一種不錯的選擇.

          然而在輸入信號跳變時,電路還是會出現不穩定現象.此時我們已不能只從狀態值編碼方式尋找解決方法.回頭看看狀態機的原理框圖不難發現:狀態寄存器的輸出值是必須符合建立保持時間約束關系的.在上述狀態機中雖然采用了各種不同的編碼方式但都不能徹底消除這種過渡狀態,我們將電路結構稍作改進,一種更好的結構如圖4所示.這種結構的狀態機可有效抑制過渡狀態的出現.這是因為輸出寄存器只要求狀態值在時鐘的邊沿穩定.將上述程序改進之后的程序如圖4.

          ……

          architecture behave of example1is

          type states is(st0,st1,st2,st3); 定義states為枚舉類型

          signal current_state,next_state:states;

          signal temp:std_logic_vector(0 to 1); 定義一個信號用于引入輸出寄存器

          begin

          state_change:process(clk) --狀態改變進程

          begin

          wait until clk'eventandclk='1';

          current_state=next_state;

          mach_outputs=temp;

          end process state_change;

          ……

          

          

          圖5 改進后的狀態機綜合后的波形

          顯然這種結構的狀態機優于一般結構的狀態機,但是它占用的邏輯資源更多,電路的速度可能下降,在時應綜合考慮.

          另外,為防止電路進入非法狀態,可以成自啟動結構,在VHDL描述的狀態機中添加一個“when others”語句是行之有效的.

          3 選擇不同編碼方式、不同結構的狀態機的技巧

          3.1 針對不同結構器件選擇不同編碼風格

          基于乘積項結構的CPLD器件適合于設計全編碼狀態機,在全編碼狀態機中采用格雷碼表示狀態值.這對于邏輯資源較少的器件是一種不錯的優化方法.

          基于查找表結構的FPGA器件適合于設計成“ONEHOT”方式編碼的狀態機,這種結構狀態機只用一位二進制數表示一個狀態,可提高,但要占用更多的邏輯資源.

          3.2 根據邏輯資源大小選擇狀態機結構

          當設計的狀態機狀態轉換次序出現多路徑時,采用格雷碼表示狀態值不會有任何作用,因為此時有些相鄰狀態不只是一位不同.在邏輯資源允許的情況下,可以考慮在狀態機后級增加一級輸出寄存器,可確保輸出不產生毛刺,使狀態機輸出穩定可靠的信號.


        上一頁 1 2 3 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 固安县| 青浦区| 东平县| 嫩江县| 卢龙县| 策勒县| 库伦旗| 若尔盖县| 塔城市| 沅江市| 凯里市| 马龙县| 体育| 太仓市| 邹城市| 定安县| 丹巴县| 黔江区| 佛冈县| 夏津县| 苏州市| 南陵县| 昔阳县| 合水县| 灵山县| 青浦区| 敦煌市| 遂川县| 海门市| 南木林县| 信阳市| 尉犁县| 大余县| 波密县| 邯郸市| 和龙市| 县级市| 南郑县| 襄垣县| 浮山县| 大宁县|