1. 程式人生 > >組合邏輯LUT和時序邏輯REG

組合邏輯LUT和時序邏輯REG

LUT(Look-Up-Table):查詢表。 
LUT本質上就是一個RAM。它把資料事先寫入RAM後, 
每當輸入一個訊號就等於輸入一個地址進行查表,找出地址對應的內容,然後輸出。

LATCH :就是鎖存器。由電平觸發,非同步控制。在使能訊號有效時latch相當於通路,在使能訊號無效時latch保持輸出狀態。

LUT和LATCH 他們的共同點是:均屬於組合邏輯(和時鐘沒有半點關係)。

不同點是:LUT是FPGA最小單元的組成結構,而LATCH不是。

說道LATCH就不得不提到FF,FF(Flip Flop):觸發器。

那麼DFF就是,眾所周知的D類觸發器。它是邊沿觸發的,歸為時序邏輯。

他和reg又有著什麼關係呢?reg就是由DFF組成的。一個8位的暫存器,就是用了8個同步的D觸發器。

一般一個FPGA最小單元就會包含多個LUT和多個REG,且REG的個數多於LUT。(這個以後再具體分析)

關係都找出來了,我們來做些實驗,看看下列程式碼都能綜合出什麼東西:

實驗1:

module testlatch
(
	input a,
	input b,
	output reg q
);

	always @(a or b)
		if(a == 1'b1)
			q = b;
	
endmodule

image

實驗2:

module testlatch
(
	input a,
	input b,
	output reg q
);

	always @(a or b)
		if(a == 1'b1)
			q = b;
		else 
			q = a;
	
endmodule

image

實驗3:

module testlatch
(
	input CLK,
	input a,
	input b,
	output reg q
);

	always @(posedge CLK)
		if(a == 1'b1)
			q = b;

endmodule


image

總結:
1、always (*)或者 assign 綜合出的就是LUT構建的東西,可認為就是LUT。
2、在always (*)的情況下,如果if 或者cace 不完整的話,會綜合出latch,導致不穩定。

3、在always (posedge CLK)的情況下,綜合出的是reg,即使if,或者case不完整,也不會綜合出latch。

4、不要用latch作為模組名,會報錯,這個名字已經被Quartus佔用了。

大家可能會說,並沒有看到LUT,我們知道LUT就是查詢表,去technology Map Viewer,去看看: 

image

就知道RTL那些  “梯形的選擇器” ,其實就是由LUT構成的!!

梯形選擇器,類似於:

         

一句話點題:

            萬能查表法再加上暫存器就保證了快速運算邏輯,這就是FPGA!

技術討論歡迎加群~~電子技術協會   362584474