http://zhangzhenyuan163.blog.163.com/blog/static/85819389201331774854351/
1.3.1 可編程邏輯單元(LE)
圖1.12所示是一個典型的LE的結構圖。LE包括3個主要部分:查找表(LUT)、進位邏輯和輸出寄存器邏輯。
![]() |
圖1.12 典型的LE的結構圖 |
其中,FPGA用查找表(LUT)替代了CPLD中的乘積項陣列,它是FPGA中組合邏輯輸出乘積和的關鍵。大部分器件使用4輸入LUT,而有些器件提供輸入數量更大的LUT,以建立更復雜的功能。LUT由一系列級聯復用器構成,如圖1.13所示。
![]() |
圖1.13 查找表(LUT)結構示意圖 |
復用器輸入可以被設置為高或者低邏輯電平。邏輯之所以被稱為查找表,是因為通過"查找"正確的編程級來選擇輸出,並根據LUT輸入信號通過復用器將輸出送到正確的地方。
LUT本質上就是一個RAM。對於4輸入的LUT,每一個LUT可以看成一個有4位地址線的16×1的RAM。當用戶通過原理圖或HDL語言描述了一個邏輯電路以后,PLD/FPGA開發軟件會自動計算邏輯電路的所有可能的結果,並把結果事先寫入RAM。這樣,每輸入一個信號進行邏輯運算就等於輸入一個地址進行查表,找出地址對應的內容,然后輸出即可。
注意:相對於CPLD宏單元,產生LUT輸出可能需要更多的邏輯級。但是,它能夠靈活地建立函數和LE鏈,從而提高了性能,有助於減少資源的浪費。
LE的同步部分來自可編程寄存器,非常靈活,通常由全局器件時鍾來驅動它,而任何時鍾域都可以驅動任何LE。寄存器的異步控制信號,如清位、復位或者預設等,都可以由其他邏輯產生,也可以來自I/O引腳。
寄存器輸出通過LE后驅動至器件布線通道,還可以反饋回LUT。可以把寄存器旁路,產生嚴格的組合邏輯功能,也可以完全旁路LUT,只使用寄存器用於存儲或者同步。這種靈活的LE輸出級使其非常適合所有類型的邏輯操作。
FPGA LE含有專門的進位邏輯和LAB中的寄存器鏈布線,為這些信號提供最短鏈接。進位比特可以來自LAB中的其他LE,也可以來自器件中的其他LAB。產生的進位比特可以輸出到其他LE,或者器件互連中。
LAB中的LUT和進位邏輯可以被完全旁路,鏈接LAB中的所有LE寄存器,把它們變成移位寄存器,這適合DSP工作。和CPLD相比,進位邏輯和寄存器鏈布線的通用性進一步提高了性能,增強了對資源的管理。
注意:由於LUT和寄存器都能夠輸出至器件中的任一位置,不論是位於相同的LAB中,還是通過器件的布線通道。因此,FPGA LE可以配置完成寄存器封裝功能。采用寄存器封裝,一個LE可以輸出兩路不同的函數,一路來自LUT和進位鏈邏輯,另一路來自輸出寄存器。只使用模塊的組合邏輯部分,完全不相關的寄存器函數可以封裝到一個LE中。因此,這有助於節省器件資源。
目前為止,所討論的FPGA LE的確要比CPLD宏單元在設計上更加靈活,但還是需要LE級聯和反饋才能產生具有較多輸入的函數。為解決這個問題,一些高級FPGA使用自適應邏輯模塊(ALM)。ALM和LE相似,但有一些重要優勢。
首先,ALM包括兩個輸出寄存器,為邏輯鏈和寄存器封裝提供更多的選項,在一個邏輯模塊中生成多個函數。ALM還具有內置硬件加法器模塊。ALM中的加法器是專用資源,完成標准算術操作,不需要在LUT或者在DSP中生成這些數學函數。這提高了數學性能,簡化了LUT邏輯。
ALM中的LUT和LE的主要不同點是ALM中的LUT是自適應LUT,即ALUT。ALUT與LUT相似,但可以對它進行划分,配置為大小不同的LUT,以適應兩種類型不同的函數,包括最簡單到非常復雜的函數。所有8個輸入都可以用於完成復雜算術函數,而ALUT可以按照不同的方式來進行划分,實現簡單函數。
例如,兩個LUT,一個是3輸入,一個是5輸入。還可以划分ALUT以支持更復雜的7輸入函數,其額外的輸入用於寄存器封裝。分成兩個4輸入LUT,使ALUT后向兼容標准LE中的4輸入LUT技術。最后,如果兩個函數之間可以共享輸入,還能夠進行其他方式的划分。基於ALM的FPGA使用較少的資源和智能資源管理技術,大大提高了邏輯工作的性能。