中文字幕 另类精品,亚洲欧美一区二区蜜桃,日本在线精品视频免费,孩交精品乱子片免费

<sup id="3hn2b"></sup>

    1. <sub id="3hn2b"><ol id="3hn2b"></ol></sub><legend id="3hn2b"></legend>

      1. <xmp id="3hn2b"></xmp>

      2. 新聞中心

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

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

        ——
        作者: 時(shí)間:2008-07-21 來(lái)源:電子開(kā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://www.antipu.com.cn/article/85938.htm

          狀態(tài)機(jī)通常要寫(xiě)成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)行重新分類(lèi),并根據(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ī)范中(硬盤(pán)的標(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ù)專(zhuān)區(qū)

        關(guān)閉