1. 程式人生 > >FPGA研發之道(10)架構設計漫談(五)數位電路的靈魂-流水線

FPGA研發之道(10)架構設計漫談(五)數位電路的靈魂-流水線

流水線,最早為人熟知,起源於十九世紀初的福特汽車工廠,富有遠見的福特,改變了那種人圍著汽車轉、負責各個環節的生產模式,轉變成了流動汽車組裝線和固定操作的人員。於是,工廠的一頭是不斷輸入的橡膠和鋼鐵,工廠的另一頭則是一輛輛正在下線的汽車。這種改變,不但提升了效率,更是拉開了工業時代大生產的序幕。

這種模式常常應用於數位電路的設計之中,與現在流驅動的FPGA架構不謀而合,例如其輸入為A種資料流,而輸出則是B種資料流,其流水架構如下所示:

每個模組只負責處理其中的一部分,這種處理的好處是,1、簡化設計,每個模組只負責其中的一個功能,便於功能和模組劃分。2,時序優化,流水的處理便於進行時序的優化,特別是處理複雜的邏輯,可以通過流水設計,改善關鍵路徑,提升處理頻率,並能提升處理效能。

各個流水線之間的連線方式也可通過多種方式,如果是處理的是資料塊,流水模組之間可以通過FIFO或者RAM進行資料暫存的方式進行直接連線、也可以通過暫存器直接透傳。也可通過某些支援brust傳輸的常用業界標準匯流排介面進行點對點的互聯,例如AHBWISHBONEAVALON-ST等介面,這種設計的優點是標準化,便於模組基於標準介面複用。每個模組的接收介面為從介面(SLAVE),而傳送介面為主介面(MASTER)。

架構流水的好處一目瞭然,但另一個問題,對於某些設計就需要謹慎處理,那就是時延。對於進入流水線的資訊A,如果接入的流水處理的模組越多,其輸出時的時延也越高,因此如對處理時延要要求的設計就需要在架構設計時,謹慎對待。可以通過處理各個單元之間的延時估計,從而評估系統的時延。

流水架構在另種設計中則無能為力,那就是帶反饋的設計,如下圖所示:

圖中,需要處理模組的輸入,需要上一次計算後的結果的值,也就是輸出要反饋回設計的輸入。例如某幀影象的解壓需要解壓所後的上一幀的值,才能計算得出。此時,流水的處理就不能試用,若強行新增流水,則輸入需等待。

如上圖中,如在需反饋的設計中強加流水,則輸入資訊Ai需要等待Ai-1處理完畢後,再進行輸入,則處理模組1,就只能等待(空閒)。因此,問題出現了,流水等待實際上就是其流水處理的的效果沒有達到,白白浪費了邏輯和設計。

流水應用在呼叫式的設計中,可以通過介面與處理流水並行達到。即寫入、處理、讀出等操作可以做到流水式架構,從而增加處理的能力。

流水是FPGA架構設計中一種常用的手段,通過合理劃分流水層次,簡化設計,優化時序。同時流水在模組設計中也是一種常用的手段和技巧。這將在後續重陸續介紹。,流水本身簡單易懂,而真正能在設計中活用,就需要對FPGA所處理的業務有著深刻的理解。正如那就話,知曉容易,踐行不易,且行且珍惜。