国产精品免费无遮挡无码永久视频-国产高潮视频在线观看-精品久久国产字幕高潮-国产精品99精品无码视亚

FPGA研發之道(23)-控制(上)

發布時間:2014-12-9 13:45    發布者:看門狗
關鍵詞: FPGA
作者:阿昏豆

本質上說,FPGA的模塊設計就是將輸入轉化成想要得到的輸出結果。而除了某些簡單模塊,即在當拍內完成,即將輸入進行邏輯操作后,再輸出。(如簡單加法器等)。其余大部分的設計需要通過時序邏輯和組合邏輯混合實現,時序邏輯帶來就是延遲起效的問題,舉例說,如實現某個信號(start)起效后,接下來五個周期需要分別進行五種操作,分別是op0,op1,op2,op3,op4 等等。如何進行控制,這就是每個工程師要面對的問題。

   對于簡單控制,分別可以采用計數和移位寄存器的方式來解決問題。而對于較為復雜的控制,則需要設計狀態機來解決。下面將分別介紹

  計數器: 對于上述操作來說,start起效后,可以通過計數實現,設置寄存器count[2:0],有效信號開始時計數自加。 計數的方式帶來的問題就是,計數從零開始還是從1開始,假如計數器初始化為0,則從0-4狀態可以分別輸出op0,op1,op2,op3,op4,但是在無有效信號時,計數會保持0,從而造成op0的輸出。 上述舉例雖然簡單,但是確實很多初學者或者工程師在仿真時會經常會犯的錯誤。從設計來說,計數需要考慮初始值對于輸出的影響。同樣計數帶來的另一個問題就是,從零開始的計數會導致設計與實際不一致,例如,一個信號9拍后拉低,但從零計數到8時,已經到9拍了(0-8),這種設計會導致命名count==8 與9拍存在不一致的現象。當然也可以從1計數到9,這樣狀態在count==9時觸發。這樣就會初始化需要復位寄存器為1。當然這個問題大端和小端的爭斗一樣,沒有終點。一個設計中如果多種計數來驅動計數的話,就需要特別小心這個問題計數。當然也可把問題交給仿真器,仿真時根據波形調整,計數的狀態。

    移位寄存器:如采用移位寄存器,根據上述例子,則start信號有效后,設計5bit的移位寄存器flag[4:0]分別利用寄存器的某BIT來控制輸出,從而在每BIT有效時,分別輸出op0,op1,op2,op3,op4。假設此種狀態較少,FPGA寄存器資源較為豐富,因此利用移位寄存器是一個不錯的注意。

   assign op4 = ( count == 3’b100) ;

   assign op4 = flag[4] ;

  比較上述兩種輸出,則可以看出,通過計數的方式占用輸出資源較多,而移位寄存器在此種應用下,占用邏輯就相對簡單。(僅針對小規模的計數來說,對于超過16的計數,則使用計數器更優)。另外,通過移位寄存器可以方便的進行時序控制,不用糾結從零開始還是從1開始的問題,在某些簡單的處理下能夠達到更小的面積和更快的時序。

   對于復雜的控制,則狀態機,就是必須的。對于FPGA實現狀態機,其實并不需要那么多的設計的方法。主要就是兩個要點。(1)獨熱碼。(2)三段式。

   對于第一點來說,獨熱碼,因為FPGA內部寄存器資源較多,另外獨熱碼將會帶來額外的面積和時序優化的好處。則以上述例子為例,增加狀態轉移的觸發信號,狀態轉移圖如下所示:

   

狀態獨熱碼(也可以用define  localparam)建議使用parameter或者localparam

parameter     idle == 6’b000001,

             op0_state == 6’b000010,

             op1_state == 6’b000100,

             op2_state == 6’b001000,

             op3_state == 6’b010000,

             op4_state == 6’b100000;

三段式結構如下

//(1)當前狀態

always@(posedge sys_clk or negedge rst_n)

       if(!rst_n)

         cs_state <= idle;

       else

         cs_state <= ns_state;

        

//(2)下一狀態的賦值

always@(*)

      case(cs_state)     

         idle : if(start)

                  ns_state =  op0_state;

                else

                  ns_state =  idle;

                  

         op0_state :

                if(op0_over)

                  ns_state =  op1_state;

                else

                  ns_state =  op0_state;

                 

         op1_state :

                if(op1_over)

                  ns_state =  op2_state;

                else

                  ns_state =  op1_state;

         op2_state :

                if(op2_over)

                  ns_state =  op3_state;

                else

                  ns_state =  op2_state;

         op3_state :

                if(op3_over)

                  ns_state =  op4_state;

                else

                  ns_state =  op3_state;

         op4_state :

                if(op4_over)

                  ns_state =  op4_state;

                else

                  ns_state =  idle;

         default ns_state = idle;

        

       endcase

      

//(3)輸出狀態

assign out1 = (cs_state ==  op0_state);

always@(posedge sys_clk or negedge rst_n)

       if(!rst_n)

         out2_reg <= 1'b0;

       else if (cs_state ==  op2_state)

         out2_reg <= 1'b1;

       else

         out2_reg <= 1'b0;

   上述例子,介紹獨熱碼和三段式。三段式的好處不用說,就是邏輯清楚。可以看出out1輸出為組合輸出。out_2_reg為寄存輸出。那么獨熱碼在FPGA內部的優勢又有哪些?

(1)綜合后,邏輯簡單

         例如assign out1 = (cs_state ==  op0_state); 綜合后的電路等同于

assign out1= cs_state(0) ;//可以看出無邏輯消耗

             而 out2_reg 的電路等同于 將cs_state(2)寄存一拍,只需一個寄存器的消耗

     (2)時序優化。

          從上述同樣得出結論,如果是使用某狀態cs_state(n)作為其他信號的輸入來說,其本身為寄存器信號,因此關鍵路徑就會減少一級。可能運行較快的頻率就會增加。如不是獨**,對比這兩條語句cs_state = 3 與cs_state(3) 一個是組合輸出,一個寄存器輸出。其不同也就是上述計數與移位寄存器的區別一致。

  那么一般狀態機會產生的錯誤會有哪些那?

    首先;就是狀態不全產生LATCH,前文已述,這是FPGA設計的大敵,解決這個問題的方法可以通過所有分支都設定確定狀態,如上例中。有沒有更簡單的方式?

    其此:狀態機上述描述,并不直觀的顯現綜合后電路的描述,有沒有更直接的rtl的描述,一眼就能看出獨熱碼的特征和好處?

    最后:狀態機是一個較為成熟技術,還會有哪些值得關注的地方?

     這些問題,下節再述。

本文地址:http://m.4huy16.com/thread-134808-1-1.html     【打印本頁】

本站部分文章為轉載或網友發布,目的在于傳遞和分享信息,并不代表本網贊同其觀點和對其真實性負責;文章版權歸原作者及原出處所有,如涉及作品內容、版權和其它問題,我們將根據著作權人的要求,第一時間更正或刪除。
您需要登錄后才可以發表評論 登錄 | 立即注冊

廠商推薦

  • Microchip視頻專區
  • “芯”光璀璨,鵬城共賞——2025 Microchip中國技術精英年會深圳站回顧
  • 常見深度學習模型介紹及應用培訓教程
  • 電動兩輪車設計生態系統
  • 技術熱潮席卷三城,2025 Microchip中國技術精英年會圓滿收官!
  • 貿澤電子(Mouser)專區

相關視頻

關于我們  -  服務條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯系我們
電子工程網 © 版權所有   京ICP備16069177號 | 京公網安備11010502021702
快速回復 返回頂部 返回列表