NO IMAGE

FSM的描述方法

在FPGA設計中,“有限狀態機”(Finite State Machine,FSM)的描述方式主要有三種方式:一段式、兩段式、三段式。

一段式寫法,整個狀態機寫到一個always塊(程序)中。在該always塊中,即描述了狀態轉移,又描述了狀態的輸入和輸出。

二段式寫法,狀態機用兩個always塊描述。在其中一個always塊中,採用同步方式描述狀態轉移;在另外一個always塊中,採用組合邏輯判斷狀態轉移條件、狀態轉移規律和輸出。

三段式寫法,狀態機用三個always快描述。第一個always塊採用同步方式描述狀態轉移;第二個always塊採用組合邏輯判斷狀態轉移條件,描述狀態轉移規律;第三個always塊,利用組合或者同步邏輯描述狀態輸出。

  ‘兩段式寫法’相比於‘一段式寫法’,優點在於將同步邏輯和組合邏輯放入兩個always塊中,便於理解和維護,利於綜合器優化程式碼,利於使用者新增合適的時序約束條件,利於佈局佈線;缺點,則是當前狀態的輸出用組合邏輯實現,用以產生毛刺。‘三段式寫法’則彌補了‘兩段式寫法’的不足,其根據狀態轉移規律,在上一狀態根據輸入條件,判斷出當前狀態的輸出,從而在不插入額外時鐘條件的情況下,實現暫存器輸出。

例如,編寫‘101’序列檢測器的狀態機程式,當檢測到輸入序列為101時,輸出一個高電平訊號。

  

三段式寫法

moduleseqcheck_101(clk,rst,din,dout);

   inputclk;//clock signal

   inputrst;//reset signal

   inputdin;//data in

   outputreg dout;//data out

   parameteridle=3’b000,one=3’b001,two=3’b010,three=3’b100;

   reg[2:0] c_state;

   reg[2:0] n_state;

   //sequentialstate transition

   [email protected](posedge clk)

   begin

     if(!rst)

       c_state<=idle;

     else

       c_state<=n_state;

   end

   //combinationalcondition judgment

   [email protected](c_state or din)

   begin

     n_state=3’bx;

     case(c_state)

     idle:

     begin

       if(din)   

         n_state=one;

       else    

         n_state=idle;

     end

     one:

     begin

       if(din) 

         n_state=one;

       else    

         n_state=two;

     end

     two:

     begin

       if(din)   

         n_state=three;

       else    

         n_state=idle;

     end

     three:

     begin

       if(din)   

         n_state=one;

       else    

         n_state=two;

     end

     default:

       n_state=idle; 

     endcase

   end

   //thesequential output

   [email protected](posedge clk)

   begin

     if(!rst)

       dout<=1’b0;

     else

       begin

         case(n_state)

           idle:dout<=1’b0;

           one:dout<=1’b0;

           two:dout<=1’b0;

           three:dout<=1’b1;

           default:dout<=1’b0;

         endcase

       end

   end

endmodule

推薦使用三段式描述法,即利於維護,又不會產生毛刺。

————————————————————————————————————————————————————–

DC和APR階段,setup,hold的解決辦法

DC時,

setup violation解決:

pipeline, retime

              降低頻率;

              增加前級的面積,加大drive,decrease time。

hold violation 解決:等APR後再一起處理

APR時,

setup violation解決:工具自動解決不了的,再ECO

hold violation 解決:加入buffer

buffer, latch, FF, register 區別

buffer:

       兩個反相器,先後連線

Latch:

       開關,加上兩個反相器,頭尾互連

Flip flop:

       兩個latch,控制開關為相反訊號

Register:

       一般由D 觸發器組成