通常在設計中我們採用多級流水線對組合邏輯進行分割,流水線的設計不僅使系統擁有更好的timing 並且當流水線級數較多時還可以有效的壓縮bubble。
這裡簡單介紹一種基於ready/valid握手訊號的pipeline的設計方法。乙個**流水線的結構如下圖所示:
對於如圖所示的pipeline 有
ready0=~(valid0&!ready1);
ready1=~(valid1&!ready2);
ready2=~(valid2&!ready_out);即對於每個fliflop 當資料準備好但與後一級握手失敗時才會將ready訊號拉低。
always@(posedge clk)
begin
if(valid(x-1)&readyx)
data x<=data x-1;
endalways @(posedge clk)
begin
if(readyx)
validx<=validx-1;
end可以看到當輸出的ready_out拉低時 流水線不會馬上停住,仍然會讓每乙個fliflop中吃滿資料時再停止工作。當pipeline處於停滯狀態時,當ready_out拉高後流水線可以馬上開始工作。因此採用流水線設計可以有效的壓縮bubble。且由於多級流水線將組合邏輯切斷,可以使系統擁有更大的吞吐率
makefile的簡單寫法
makefile 使用方法 vi 乙個makefile檔案 cc g 指的是用什麼編譯器 rm rm rf 定義乙個刪除的指令 變數 cflags c wall i.d debug 編譯標誌 冒號左邊是目標,右邊是依賴 client main.o client.o logreader.o conso...
簡單的單態寫法
public static gamemanager instance private static gamemanager instance null void awake 使自己成為唯一的例項 instance this 如果存在多關卡切換,就需要加上下面這句 dontdestroyonload ...
Tower of Hanoi 簡單易懂的寫法
hanoi塔問題的大意是將所有的盤子從最左邊 from 的柱子轉移到最右邊的柱子 to 上,可以借助中間的柱子 temp 而且移動過程中要滿足一下規則 1 每次只能移動1個圓盤 2 任何時刻都不允許將較大的圓盤壓在較小的圓盤之上 hanio塔問題是一道經典的遞迴問題了,但是很多人第一次看都會一臉懵逼...