色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 影響FPGA設(shè)計(jì)中時(shí)鐘因素的探討

          影響FPGA設(shè)計(jì)中時(shí)鐘因素的探討

          ——
          作者: 時(shí)間:2008-07-21 來(lái)源:電子開發(fā)網(wǎng) 收藏

          et ;
          input req_0 ;
          input req_1 ;
          //-------------Output Ports----------------------------
          output gnt_0 ;
          output gnt_1 ;
          //-------------Input ports Data Type-------------------
          wire clock ;
          wire reset ;
          wire req_0 ;
          wire req_1 ;
          //-------------Output Ports Data Type------------------
          reg gnt_0 ;
          reg gnt_1 ;
          //-------------Internal Constants--------------------------
          parameter SIZE = 3 ;
          parameter IDLE = 3'b001 ,
          GNT0 = 3'b010 ,
          GNT1 = 3'b100 ;
          //-------------Internal Variables---------------------------
          reg [SIZE-1:0] state ;// Seq part of the FSM
          wire [SIZE-1:0] next_state ;// combo part of FSM
          //----------Code startes Here------------------------
          assign next_state = fsm_function(req_0, req_1);
          function [SIZE-1:0] fsm_function;
          input req_0;
          input req_1;
          case(state)
          IDLE : if (req_0 == 1'b1)
          fsm_function = GNT0;
          else if (req_1 == 1'b1)
          fsm_function= GNT1;
          else
          fsm_function = IDLE;
          GNT0 : if (req_0 == 1'b1)
          fsm_function = GNT0;
          else
          fsm_function = IDLE;
          GNT1 : if (req_1 == 1'b1)
          fsm_function = GNT1;
          else
          fsm_function =IDLE;
          default : fsm_function = IDLE;
          endcase
          endfunction
          always@(posedge clock)
          begin
          if (reset == 1'b1)
          state <=IDLE;
          else
          state <=next_state;
          end
          //----------Output Logic-----------------------------
          always @ (posedge clock)
          begin
          if (reset == 1'b1) begin
          gnt_0 <= #1 1'b0;
          gnt_1 <= #1 1'b0;
          end
          else begin
          case(state)
          IDLE : begin
          gnt_0 <= #1 1'b0;
          gnt_1 <= #1 1'b0;
          end
          GNT0 : begin
          gnt_0 <= #1 1'b1;
          gnt_1 <= #1 1'b0;
          end
          GNT1 : begin
          gnt_0 <= #1 1'b0;
          gnt_1 <= #1 1'b1;
          end
          default : begin
          gnt_0 <= #1 1'b0;
          gnt_1 <= #1 1'b0;
          end
          endcase
          end
          end // End Of Block OUTPUT_
          endmodule

          本文引用地址:http://cafeforensic.com/article/85938.htm

            狀態(tài)機(jī)通常要寫成3段式,從而避免出現(xiàn)過(guò)大的組合邏輯。

            上面說(shuō)的都是可以通過(guò)流水的方式切割組合邏輯的情況,但是有些情況下我們是很 難去切割組合邏輯的,在這些情況下我們又該怎么做呢?

            狀態(tài)機(jī)就是這么一個(gè)例子,我們不能通過(guò)往狀態(tài)譯碼組合邏輯中加入流水。如果我們的設(shè)計(jì)中有一個(gè)幾十個(gè)狀態(tài)的狀態(tài)機(jī),它的狀態(tài)譯碼邏輯將非常之巨大,毫無(wú)疑問(wèn),這極有可能是設(shè)計(jì)中的關(guān)鍵路徑。那我們?cè)撛趺醋瞿??還是老思路,減少組合邏輯。我們可以對(duì)狀態(tài)的輸出進(jìn)行分析,對(duì)它們進(jìn)行重新分類,并根據(jù)這個(gè)重新定義成一組組小狀態(tài)機(jī),通過(guò)對(duì)輸入進(jìn)行選擇(case語(yǔ)句)并去觸發(fā)相應(yīng)的小狀態(tài)機(jī),從而實(shí)現(xiàn)了將大的狀態(tài)機(jī)切割成小的狀態(tài)機(jī)。在ATA6的規(guī)范中(硬盤的標(biāo)準(zhǔn)),輸入的命令大概有20十種,每一個(gè)命令又對(duì)應(yīng)很多種狀態(tài),如果用一個(gè)大的狀態(tài)機(jī)(狀態(tài)套狀態(tài))去做那是不可想象的,我們可以通過(guò)case語(yǔ)句去對(duì)命令進(jìn)行譯碼,并觸發(fā)相應(yīng)的狀態(tài)機(jī),這樣做下來(lái) 這一個(gè)模塊的頻率就 可以跑得比較高了。



          關(guān)鍵詞: FPGA 時(shí)鐘

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉