色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
电子发烧友
开通电子发烧友VIP会员 尊享10大特权
海量资料免费下载
精品直播免费看
优质内容免费畅学
课程9折专享价
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

流水線中Half-Buffer與Skid-Buffer的使用

網(wǎng)絡(luò)交換FPGA ? 來源:網(wǎng)絡(luò)交換FPGA ? 2024-11-05 17:16 ? 次閱讀

1.問題描述

在介紹skid buffer之前,我們先來假設(shè)這樣一種情況,在一個多級流水模型之中,比如最為經(jīng)典的順序五級流水的處理器模型中,各級之間通過僅通過valid-ready的握手信號進行數(shù)據(jù)傳遞,(需要注意的是,這里的輸入側(cè)和輸出側(cè)的握手信號是不建議直連的,這樣不符合流水設(shè)計思想的同時,還會加中時序壓力)當其中某級發(fā)生阻塞的時候,比如lsu的執(zhí)行訪存指令,但是cache未命中,需要從更下級的儲存器去請求數(shù)據(jù)的時候,此時需要通過握手信號來需要阻塞流水線,理所應(yīng)當?shù)模覀兝蚻su的input_ready信號來阻塞來自上級流水的輸入(比如EXU),可是問題是此時上上級(比如IDU)并未被阻塞,還在向上級(EXU)傳輸數(shù)據(jù),同樣的情況發(fā)生在所有的上游模塊。這篇文章便是用來解決上述問題。

a2b84bf6-90b3-11ef-a511-92fbcf53809c.png

2.Half-Buffer

2.1 Half-Buffer是什么?

引發(fā)上述問題的原因是未能及時阻塞之前的流水線,再深究其原因,是因為其輸入側(cè)和輸出側(cè)的握手允許在相同時鐘周期完成,所以阻塞的信息沒有同步到上級。為了解決以上問題,我們現(xiàn)在為流水線每級做如下限定:

1.輸入側(cè)和輸出側(cè)不能同時完成握手操作。

2.在沒有有效數(shù)據(jù)之前之前只能進行輸入握手,在內(nèi)部有有效數(shù)據(jù)后,只能做輸出握手,在完成握手后才能重新開始輸入。

而這種方法叫做Half-Buffer,他內(nèi)部只有一個buffer來緩存數(shù)據(jù),所以他不支持輸入和輸出側(cè)同時完成握手。他的缺點是顯而易見的,每次啟動或停止的時候需要兩個時鐘周期的同時,還讓最大帶寬減半。但是,對于內(nèi)部需要多個時鐘周期來計算結(jié)果的模塊而言,其影響并沒有那么大。

2.2 Half-Buffer源碼分析

這里我們選取fpgacpu網(wǎng)站上的源碼進行講解,網(wǎng)址會帖在文末。

首先是接口部分,需要注意的是,此處的CIRCULAR_BUFFER部分非0 時候,是允許內(nèi)部有效數(shù)據(jù)在未完成輸出側(cè)握手的情況下接受新數(shù)據(jù)對原有數(shù)據(jù)進行覆蓋的。因為這種模式我們使用不多,這里現(xiàn)不做介紹。

`default_nettype none
 
module Pipeline_Half_Buffer
#(
    parameter WORD_WIDTH            = 0,
    parameter CIRCULAR_BUFFER       = 0     // non-zero to enable
)
(
    input  wire                     clock,
    input  wire                     clear,
 
    input  wire                     input_valid,
    output reg                      input_ready,
    input  wire [WORD_WIDTH-1:0]    input_data,
 
    output reg                      output_valid,
    input  wire                     output_ready,
    output wire [WORD_WIDTH-1:0]    output_data
);
 
    localparam WORD_ZERO = {WORD_WIDTH{1'b0}};

這部分是half_buffer部分,可以看到其內(nèi)部只有一個buffer用來儲存數(shù)據(jù):

    reg half_buffer_load = 1'b0;
 
    Register
    #(
        .WORD_WIDTH     (WORD_WIDTH),
        .RESET_VALUE    (WORD_ZERO)
    )
    half_buffer
    (
        .clock          (clock),
        .clock_enable   (half_buffer_load),
        .clear          (clear),
        .data_in        (input_data),
        .data_out       (output_data)
    );

空滿信號的產(chǎn)生模塊:

    reg  set_to_empty = 1'b0;
    reg  set_to_full  = 1'b0;
    wire buffer_full;
 
    Register
    #(
        .WORD_WIDTH     (1),
        .RESET_VALUE    (1'b0)
    )
    empty_full
    (
        .clock          (clock),
        .clock_enable   (set_to_full),
        .clear          (set_to_empty),
        .data_in        (1'b1),
        .data_out       (buffer_full)
    );

然后是最為重要的邏輯模塊,我們可以發(fā)現(xiàn),在非循環(huán)模式下,input_ready和output_valid是互斥的,這也就完成了我們之前所說的每次只能完成一邊的握手。
在完成輸入握手之后將full信號拉高,并將數(shù)據(jù)寫入buffer,在完成輸出握手之后,將empty信號拉高。同時我們看到,在初始情況下,內(nèi)部為empty,所以必須先完成empty->full->empty這個流程,這與我們預(yù)期相符。

 always @(*) begin
        input_ready      = (buffer_full   == 1'b0) || (CIRCULAR_BUFFER != 0);
        output_valid     = (buffer_full   == 1'b1);
        set_to_full      = (input_valid   == 1'b1) && (input_ready  == 1'b1);
        set_to_empty     = (output_valid  == 1'b1) && (output_ready == 1'b1) && (set_to_full == 1'b0);
        set_to_empty     = (set_to_empty  == 1'b1) || (clear == 1'b1);
        half_buffer_load = (set_to_full   == 1'b1);
    end
 
endmodule

3.Skid Buffer

3.1 Skid Buffer是什么?

那么有沒有其他方法能夠解決問題的同時,避免到Half-Buffer帶來的損耗呢?如果輸入輸出同時允許握手帶來的后果是可能在阻塞的情況下沖刷掉內(nèi)部的有效數(shù)據(jù),那么如果我們讓內(nèi)部不止一個Buffer是不可以解決這個問題呢?

Skid Buffer就是這么來的,它其實是是一個最小的FIFO,深度為2,一個用于輸出,一個用來緩存,同時在緩存的這個周期,就能將下一級的阻塞信號傳遞到上級,這樣便可以在允許兩次同時握手,消除Half-Buffer帶來的兩個周期和最大帶寬的損耗的同時,擁有更好的布局布線空間。

3.2 Skid Buffer源碼分析

這里我們同樣選取fpgacpu網(wǎng)站上的源碼進行講解(ps:這個真的是最近發(fā)現(xiàn)的最寶藏的網(wǎng)站,之后如果有時間,可以會出一個專門介紹和解析這個網(wǎng)站源碼的一個專欄)

首先是接口部分,需要注意的是,此處的CIRCULAR_BUFFER部分非0 時候,是指可以在內(nèi)部數(shù)據(jù)已經(jīng)滿的情況下,進行覆蓋,同理,我們對該模式不做解析。

`default_nettype none
 
module Pipeline_Skid_Buffer
#(
    parameter WORD_WIDTH                = 0,
    parameter CIRCULAR_BUFFER           = 0     // non-zero to enable
)
(
    input   wire                        clock,
    input   wire                        clear,
 
    input   wire                        input_valid,
    output  wire                        input_ready,
    input   wire    [WORD_WIDTH-1:0]    input_data,
 
    output  wire                        output_valid,
    input   wire                        output_ready,
    output  wire    [WORD_WIDTH-1:0]    output_data
);
 
    localparam WORD_ZERO = {WORD_WIDTH{1'b0}};

然后是數(shù)據(jù)部分,我們可以清楚地看到,此處使用了兩個Buffer,data_buffer_out為緩存buffer,output_Data為輸出的數(shù)據(jù),通過2mux1來決定輸出來源于緩存還是input_data。他這個地方還有個聰明之處在于他將數(shù)據(jù)通路和狀態(tài)解耦,這樣大大的便捷了整體的設(shè)計,是一個值得學(xué)習(xí)的地方。

 reg                     data_buffer_wren = 1'b0; // EMPTY at start, so don't load.
    wire [WORD_WIDTH-1:0]   data_buffer_out;
 
    Register
    #(
        .WORD_WIDTH     (WORD_WIDTH),
        .RESET_VALUE    (WORD_ZERO)
    )
    data_buffer_reg
    (
        .clock          (clock),
        .clock_enable   (data_buffer_wren),
        .clear          (clear),
        .data_in        (input_data),
        .data_out       (data_buffer_out)
    );
 
    reg                     data_out_wren       = 1'b1; // EMPTY at start, so accept data.
    reg                     use_buffered_data   = 1'b0;
    reg [WORD_WIDTH-1:0]    selected_data       = WORD_ZERO;
 
    always @(*) begin
        selected_data = (use_buffered_data == 1'b1) ? data_buffer_out : input_data;
    end
    Register
    #(
        .WORD_WIDTH     (WORD_WIDTH),
        .RESET_VALUE    (WORD_ZERO)
    )
    data_out_reg
    (
        .clock          (clock),
        .clock_enable   (data_out_wren),
        .clear          (clear),
        .data_in        (selected_data),
        .data_out       (output_data)
    );

接下來是最為重要的控制部分,首先我們先來將系統(tǒng)劃分為以下幾個狀態(tài):

a2deb5a2-90b3-11ef-a511-92fbcf53809c.png

Empty:輸出和緩存區(qū)都沒有數(shù)據(jù)。

Busy :在輸出寄存器有一個有效值待處理,緩存區(qū)為空。

Full : 輸出寄存器和緩存區(qū)都有有效數(shù)據(jù)待處理 。

需要注意的是,在Empty下,只支持輸入側(cè)的握手,在Full模式下,只支持輸出側(cè)的握手,這樣可以有效防止數(shù)據(jù)的覆蓋和重復(fù)讀取。

我們來看一下每個狀態(tài)之間的轉(zhuǎn)換條件:

load:緩存區(qū)和輸出寄存器為空,數(shù)據(jù)直接載入輸出寄存器。(輸入握手,輸出沒握手)

fill:輸出寄存器為空,將數(shù)據(jù)載入緩存區(qū)。(輸入握手,輸出沒握手)

flow:輸出寄存器的值被下級接收的同時,將輸入的數(shù)據(jù)載入到輸出寄存器。(輸入輸出同時握手)

flush:輸出寄存器的值被下級接受,將緩存區(qū)的有效數(shù)據(jù)載入輸出寄存器(輸入沒握手,輸出握手)

unload:輸出寄存器的被下級接受,現(xiàn)在輸出和緩存區(qū)都為空。(輸入沒握手,輸出握手)。

在得到所有的轉(zhuǎn)化條件之后,我們還需要去決定輸入的ready和輸出valid信號。我們只需要在當前非滿時拉高ready信號,在當前非空的時候拉高valid信號即可。

    Register
    #(
        .WORD_WIDTH     (1),
        .RESET_VALUE    (1'b1) // EMPTY at start, so accept data
    )
    input_ready_reg
    (
        .clock          (clock),
        .clock_enable   (1'b1),
        .clear          (clear),
        .data_in        ((state_next != FULL) || (CIRCULAR_BUFFER != 0)),
        .data_out       (input_ready)
    );
 
    Register
    #(
        .WORD_WIDTH     (1),
        .RESET_VALUE    (1'b0)
    )
    output_valid_reg
    (
        .clock          (clock),
        .clock_enable   (1'b1),
        .clear          (clear),
        .data_in        (state_next != EMPTY),
        .data_out       (output_valid)
    );
 

然后,在輸入握手時插入數(shù)據(jù),在輸出握手時移除數(shù)據(jù):

    reg insert = 1'b0;
    reg remove = 1'b0;
 
    always @(*) begin
        insert = (input_valid  == 1'b1) && (input_ready  == 1'b1);
        remove = (output_valid == 1'b1) && (output_ready == 1'b1);
    end

最后便是狀態(tài)的轉(zhuǎn)化和數(shù)據(jù)通路的選擇部分,在此不做贅述。

    reg load    = 1'b0; // Empty datapath inserts data into output register.
    reg flow    = 1'b0; // New inserted data into output register as the old data is removed.
    reg fill    = 1'b0; // New inserted data into buffer register. Data not removed from output register.
    reg flush   = 1'b0; // Move data from buffer register into output register. Remove old data. No new data inserted.
    reg unload  = 1'b0; // Remove data from output register, leaving the datapath empty.
    reg dump    = 1'b0; // New inserted data into buffer register. Move data from buffer register into output register. Discard old output data. (CBM)
    reg pass    = 1'b0; // New inserted data into buffer register. Move data from buffer register into output register. Remove old output data.  (CBM)
    always @(*) begin
        load    = (state == EMPTY) && (insert == 1'b1) && (remove == 1'b0);
        flow    = (state == BUSY)  && (insert == 1'b1) && (remove == 1'b1);
        fill    = (state == BUSY)  && (insert == 1'b1) && (remove == 1'b0);
        unload  = (state == BUSY)  && (insert == 1'b0) && (remove == 1'b1);
        flush   = (state == FULL)  && (insert == 1'b0) && (remove == 1'b1);
        dump    = (state == FULL)  && (insert == 1'b1) && (remove == 1'b0) && (CIRCULAR_BUFFER != 0);
        pass    = (state == FULL)  && (insert == 1'b1) && (remove == 1'b1) && (CIRCULAR_BUFFER != 0);
    end
    always @(*) begin
        data_out_wren     = (load  == 1'b1) || (flow == 1'b1) || (flush == 1'b1) || (dump == 1'b1) || (pass == 1'b1);
        data_buffer_wren  = (fill  == 1'b1)                                      || (dump == 1'b1) || (pass == 1'b1);
        use_buffered_data = (flush == 1'b1)                                      || (dump == 1'b1) || (pass == 1'b1);
    end
endmodule

4.剛玉中的流水代碼分析

在開源代碼剛玉中大量運用了流水線,我們以其為例子進行分析。我們以其axi_register_rd中對于ar port的流水處理進行分析。

剛玉采用了三種可選方式,bypass,Half-Buffer以及Skid-Buffer。我們針對其后兩種進行分析。需要說明的是,其中s_axi為輸入側(cè),m_axi為輸出側(cè)。ps:剛玉的作者Alex的代碼水平真的十分高,他經(jīng)常用一些互斥條件的組合來代替狀態(tài)機的書寫,所以對我來說想要理解往往需要花費一定的時間。

4.1 剛玉中的Half-Buffer

// enable ready input next cycle if output buffer will be empty
wire s_axi_arready_early = !m_axi_arvalid_next;
 
always @* begin
    // transfer sink ready state to source
    m_axi_arvalid_next = m_axi_arvalid_reg;
 
    store_axi_ar_input_to_output = 1'b0;
    if (s_axi_arready_reg) begin
        m_axi_arvalid_next = s_axi_arvalid;
        store_axi_ar_input_to_output = 1'b1;
    end else if (m_axi_arready) begin
        m_axi_arvalid_next = 1'b0;
    end
end

我們可以看到,只有在輸出側(cè)在下一拍為低的時候,才拉高輸入側(cè)的ready信號,保證每一拍只有一側(cè)的握手是可以完成的。

然后在輸入側(cè)ready的情況下,將上一級的有效信號傳遞到輸出寄存器,這里比較有意思的是,他沒有等到輸入握手成功再傳遞,而是直接傳遞,這是因為輸入側(cè)的ready和輸出側(cè)的valid是互斥的,即使沒有握手就傳遞,也不會出現(xiàn)兩邊同時握手的情況。

如果輸入側(cè)的ready無效,但是輸入側(cè)的ready有效時,將下一拍的輸出側(cè)的有效信號拉低,我當初看到這里很疑惑,后來一想其實很簡單,因為輸入側(cè)的ready無效就意味著當前拍的輸出側(cè)valid肯定是拉高的,這句話其實可以理解成完成輸出側(cè)握手后,將已經(jīng)處理過的有效信號拉低的操作。

4.2 剛玉中的Skid-Buffer

wire s_axi_arready_early = m_axi_arready | (~temp_m_axi_arvalid_reg & (~m_axi_arvalid_reg | ~s_axi_arvalid));
 
always @* begin
    // transfer sink ready state to source
    m_axi_arvalid_next = m_axi_arvalid_reg;
    temp_m_axi_arvalid_next = temp_m_axi_arvalid_reg;
 
    store_axi_ar_input_to_output = 1'b0;
    store_axi_ar_input_to_temp = 1'b0;
    store_axi_ar_temp_to_output = 1'b0;
    if (s_axi_arready_reg) begin
        // input is ready
        if (m_axi_arready | ~m_axi_arvalid_reg) begin
            // output is ready or currently not valid, transfer data to output
            m_axi_arvalid_next = s_axi_arvalid;
            store_axi_ar_input_to_output = 1'b1;
        end else begin
            // output is not ready, store input in temp
            temp_m_axi_arvalid_next = s_axi_arvalid;
            store_axi_ar_input_to_temp = 1'b1;
        end
    end else if (m_axi_arready) begin
        // input is not ready, but output is ready
        m_axi_arvalid_next = temp_m_axi_arvalid_reg;
        temp_m_axi_arvalid_next = 1'b0;
        store_axi_ar_temp_to_output = 1'b1;
    end
end

首先還是先來分析輸入側(cè)的ready信號,可以看到,他拉高的條件有兩個,首先是輸入側(cè)的ready為高,這是為什么?我們來簡單分析一下,當輸出側(cè)的ready為高的時候,他的輸出寄存器主要有效,那么一定會被讀取,所以當前狀態(tài)永遠不會是full,所以可以拉高。

第二個條件:

(~temp_m_axi_arvalid_reg & (~m_axi_arvalid_reg | ~s_axi_arvalid))

我們來解析一下,首先他要求緩存寄存器為空的同時,輸入側(cè)和輸出寄存器不能同時有待處理的請求,這個也很好理解,我們這個系統(tǒng)最大的待處理請求只能是兩個,如果不滿足以上條件,那么系統(tǒng)中可能會出現(xiàn)待處理請求,緩存區(qū)的請求有被覆蓋的風險。

    if (s_axi_arready_reg) begin
        // input is ready
        if (m_axi_arready | ~m_axi_arvalid_reg) begin
            // output is ready or currently not valid, transfer data to output
            m_axi_arvalid_next = s_axi_arvalid;
            store_axi_ar_input_to_output = 1'b1;
        end else begin
            // output is not ready, store input in temp
            temp_m_axi_arvalid_next = s_axi_arvalid;
            store_axi_ar_input_to_temp = 1'b1;
        end

然后就是接下來的部分,我們看到,在輸入側(cè)ready的情況下,如果輸出側(cè)ready有效或者沒有待處理的請求時,可以將新的請求從輸入加載到輸出寄存器。又是很奇怪是不是?這里真的感嘆一句Alex的水平之高,好了,我們來認真分析一下,如果輸出側(cè)ready有效,那意味著當前狀態(tài)不為full,那么任何被傳遞的請求都是可以被下級處理的,同理,如果下級已經(jīng)沒有待處理的請求,那么自然可以加載新的有效請求。然后,如果下級不能處理新的請求的時候,也就是對應(yīng)我們之前的BUSY狀態(tài)下,可以完成輸入側(cè)握手,不能完成輸出側(cè)握手的時候,我們就需要把輸入側(cè)的請求存入緩存區(qū)。

    end else if (m_axi_arready) begin
        // input is not ready, but output is ready
        m_axi_arvalid_next = temp_m_axi_arvalid_reg;
        temp_m_axi_arvalid_next = 1'b0;
        store_axi_ar_temp_to_output = 1'b1;
    end

最后,便是輸出側(cè)可以完成握手,但是輸入側(cè)不能完成的時候,對應(yīng)之前的flush狀態(tài),輸出寄存器被下級讀取之后,我們把緩存區(qū)的數(shù)據(jù)載入到輸出寄存器即可。

5.結(jié)語

文章主要分析了流水線中的Half-Buffer與Skid-Buffer的使用,之后如果有機會,將繼續(xù)分享更多DE技巧。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 處理器
    +關(guān)注

    關(guān)注

    68

    文章

    19658

    瀏覽量

    232467
  • 流水線
    +關(guān)注

    關(guān)注

    0

    文章

    123

    瀏覽量

    26381
  • 模型
    +關(guān)注

    關(guān)注

    1

    文章

    3448

    瀏覽量

    49706

原文標題:Half-Buffer與Skid-Buffer介紹及其在流水線中的應(yīng)用

文章出處:【微信號:gh_cb8502189068,微信公眾號:網(wǎng)絡(luò)交換FPGA】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 0人收藏

    評論

    相關(guān)推薦

    FPGA流水線設(shè)計

    處理速度)。第二 什么時候用流水線設(shè)計使用流水線一般是時序比較緊張,對電路工作頻率較高的時候。典型情況如下:1)功能模塊之間的流水線,用乒乓 buffer 來交互數(shù)據(jù)。代價是增加了 m
    發(fā)表于 10-26 14:38

    現(xiàn)代RISC流水線技術(shù)

    流水線技術(shù)是提高系統(tǒng)吞吐率的一項強大的實現(xiàn)技術(shù),并且不需要大量重復(fù)設(shè)置硬件。20世界60年代早期的一些高端機器第一次采用了流水線技術(shù)。第一個采用指令流水線的機器是IBM7030(又稱
    發(fā)表于 03-01 17:52

    周期精確的流水線仿真模型

    使用軟件仿真硬件流水線是很耗時又復(fù)雜的工作,仿真過程由于流水線的沖突而導(dǎo)致運行速度緩慢。本文通過對嵌入式處理器的流水線, 指令集, 設(shè)備控制器等內(nèi)部結(jié)構(gòu)的分析和
    發(fā)表于 12-31 11:30 ?9次下載

    什么是流水線技術(shù)

    什么是流水線技術(shù) 流水線技術(shù)
    發(fā)表于 02-04 10:21 ?4001次閱讀

    流水線的相關(guān)培訓(xùn)教程[1]

    流水線的相關(guān)培訓(xùn)教程[1]  學(xué)習(xí)目標     理解流水線相關(guān)的分類及定義;
    發(fā)表于 04-13 15:56 ?1149次閱讀

    流水線的相關(guān)培訓(xùn)教程[3]

    流水線的相關(guān)培訓(xùn)教程[3] (1) 寫后讀相關(guān)(RAW:Read After Write) (命名規(guī)則) :j 的執(zhí)行要用到 i 的計算結(jié)果,當它們在流水線重疊執(zhí)行時,j 可
    發(fā)表于 04-13 16:02 ?892次閱讀

    流水線的相關(guān)培訓(xùn)教程[4]

    流水線的相關(guān)培訓(xùn)教程[4] 下面討論如何利用編譯器技術(shù)來減少這種必須的暫停,然后論述如何在流水線實現(xiàn)數(shù)據(jù)相關(guān)檢測和定向。
    發(fā)表于 04-13 16:09 ?4875次閱讀

    電鍍流水線的PLC控制

    電鍍流水線的PLC控制電鍍流水線的PLC控制電鍍流水線的PLC控制
    發(fā)表于 02-17 17:13 ?36次下載

    采用單通道通訊協(xié)議設(shè)計高速異步流水線控制器STFB電路的設(shè)計

    單元GasP電路,在文中提出的準延時無關(guān)QDI異步流水線控制單元WCHB(weak condition half buffer)、PCHB(precharged fullbuffer),以及在文中提出的基于單通道通訊協(xié)議的QDI
    的頭像 發(fā)表于 08-30 08:04 ?2911次閱讀
    采用單通道通訊協(xié)議設(shè)計高速異步<b class='flag-5'>流水線</b>控制器STFB電路的設(shè)計

    各種流水線特點及常見流水線設(shè)計方式

    按照流水線的輸送方式大體可以分為:皮帶流水裝配線、板鏈線、倍速鏈、插件線、網(wǎng)帶線、懸掛線及滾筒流水線這七類流水線
    的頭像 發(fā)表于 07-05 11:12 ?7735次閱讀
    各種<b class='flag-5'>流水線</b>特點及常見<b class='flag-5'>流水線</b>設(shè)計方式

    滾筒輸流水線故障排除方法

    在工程建造,滾筒流水線演著重要的角色。在一些工程建造過程,經(jīng)常看到滾筒流水線的身影。在工業(yè)不斷發(fā)展下的今天,滾筒流水線日益增長,走向多元
    發(fā)表于 07-08 09:32 ?1992次閱讀

    如何選擇合適的LED生產(chǎn)流水線輸送方式

    LED生產(chǎn)流水線輸送形式分為平面直線傳輸流水線、各種角度平面轉(zhuǎn)彎傳輸流水線、斜面上傳流水線、斜面下傳流水線這四種輸送方式,企業(yè)也是可以根據(jù)L
    發(fā)表于 08-06 11:53 ?1129次閱讀

    嵌入式_流水線

    ,每個子過程由專門的功能部件來實現(xiàn)。? 把多個處理過程在時間上錯開,依次通過各功能段,這樣,每個子過程就可以與其他的子過程并行進行。流水線的每個子過程及其功能部件稱為流水線的級或段,段與段相互連接形成
    發(fā)表于 10-20 20:51 ?6次下載
    嵌入式_<b class='flag-5'>流水線</b>

    CPU流水線的問題

    1989 年推出的 i486 處理器引入了五級流水線。這時,在 CPU 不再僅運行一條指令,每一級流水線在同一時刻都運行著不同的指令。這個設(shè)計使得 i486 比同頻率的 386 處理器性能提升了不止一倍。
    的頭像 發(fā)表于 09-22 10:04 ?2190次閱讀

    什么是流水線 Jenkins的流水線詳解

    jenkins 有 2 種流水線分為聲明式流水線與腳本化流水線,腳本化流水線是 jenkins 舊版本使用的流水線腳本,新版本 Jenkin
    發(fā)表于 05-17 16:57 ?1206次閱讀

    電子發(fā)燒友

    中國電子工程師最喜歡的網(wǎng)站

    • 2931785位工程師會員交流學(xué)習(xí)
    • 獲取您個性化的科技前沿技術(shù)信息
    • 參加活動獲取豐厚的禮品
    主站蜘蛛池模板: 日本强好片久久久久久AAA | 亚洲欧美成人无码久久久 | 国产MD视频一区二区三区 | 黑人 尺寸 强行害怕 痛哭 | 中文字幕高清在线中文字幕 | 免费欧美大片 | 亚洲国产成人精品青青草原100 | 国语自产精品一区在线视频观看 | 最新高清无码专区 | 成人在线精品视频 | 久久免费看少妇高潮A片特爽 | 国产乱人偷精品视频A人人澡 | 亚洲欧美在无码片一区二区 | 欧洲日韩av无线在码 | 日韩AV片无码一区二区三区不卡 | 亚洲中文字幕AV在天堂 | 欧美.亚洲.日韩.天堂 | 亚洲AV无码乱码国产精品品麻豆 | 亚洲高清中文字幕免费 | xxxx18动漫| 国产三级在线观看视频 | 99久久精品免费精品国产 | 2022久久精品国产色蜜蜜麻豆 | 亚洲精品资源网在线观看 | 三男强一女90分钟在线观看 | 99视频这里只有精品国产 | 国语对白嫖老妇胖老太 | 国产精品线路一线路二 | 美女露出撒尿的部位 | 草699一码二码三码四码 | 伦理片在线线249 | 久久r视频 | 十八禁久久成人一区二区 | YY8848高清私人影院 | 亚洲色图p| adc影院欢迎您大驾光临入口 | 亚洲综合国产在不卡在线 | 亚洲精品国产第一区第二区 | 久久强奷乱码老熟女 | 日本人HD18HD18| 在线观看免费毛片 |