Chương 2: Họ xilinx spartan - 3e fpga

KIẾN TRÚC HỌ XILINX SPARTAN-3E FPGA Có một số họ Spartan FPGA: Spartan-II, Spartan-IIE (tương tự như Virtex), Spartan-3 (mật độ cổng cao, đạt tới 5 triệu cổng hệ thống), Spartan-3E (tương tự như Virtex-4, và tối ưu cho chi phí của logic), Spartan-3A (tối ưu cho chi phí pin), Spartan-3AN (cao cấp với flash), Spartan-3ADSP (cao cấp cho xử lý tín hiệu). Ta xét kiến trúc của họ Xilinx Spartan-3E FPGA có giá các logic thấp, nhưng mật độ cổng tương đối cao và đủ các đặc tính cho thiết kế phần cứng nhiều chức năng dựa trên KIT phát triển Spartan-3E và các công cụ phần mềm của Xilinx

docx41 trang | Chia sẻ: tlsuongmuoi | Lượt xem: 4206 | Lượt tải: 5download
Bạn đang xem trước 20 trang tài liệu Chương 2: Họ xilinx spartan - 3e fpga, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
h phần nhớ trực tiếp, mà những thành phần nhớ này có thể được sử dụng như các flip-flops hoặc các mạch chốt. Các LUT có thể được sử dụng như bộ nhớ 16x1 (RAM16) hoặc như là thanh ghi dịch 16-bit (SRL16), và các bộ nhân bổ xung và logic carry làm đơn giản các chức năng số học và logic. Hầu hết logic đa năng trong thiết kế được tự động sắp xếp vào các tài nguyên của mảnh trong các CLB. Hình 2.5:Sắp xếp của các CLBs trong một mảng cân đối Mảng các CLB: các CLB được sắp xếp trong một mảng cân đối các hàng và các cột như chỉ ra ở hình 2.5. Mật độ các CLB trong các dòng và cột của từng chip FPGA trong họ Spartan-3E là khác nhau và được liệt kê trong bảng 2.2. Bảng 2.2: Các tài nguyên của CLB của họ Spartan-3E FPGA Các mảnh của CLB: mỗi một CLB gồm có 4 mảnh. Các mảnh được nhóm lại thành từng cặp. Mỗi cặp được tổ chức như là một cột với một chuỗi carry độc lập. Cặp bên trái hỗ trợ cả các chức năng nhớ và logic, và các mảnh của nó được gọi là SLICEM. Cặp bên phải chỉ hỗ trợ chức năng logic và các mảnh của nó được gọi là SLICEL (hình 2.6). Như vậy, có một nửa số LUT hỗ trợ cả các chức năng logic và nhớ (gồm cả RAM16 và các thanh ghi dịch SRL16), trong khi một nửa các LUT còn lại chỉ hỗ trợ chức năng logic. Cả hai loại LUT này thay đổi thông lượng của các cột mảng. Mảnh SLICEL giảm kích thước của CLB và chi phí của thiết bị, và cũng có thể bảo đảm ưu điểm hiệu năng so với mảnh SLICEM. Phần mềm phát triển của Xilinx thiết kế vị trí của một mảnh tương ứng với các tọa độ X và Y của nó, bắt đầu trong góc phải đáy như chỉ ra ở hình 2.5. Chữ ‘X’ theo sau là một số xác định các cột của các mảnh, tăng dần từ phía trái đến phía phải của miếng (die) FPGA. Chữ ‘Y’ theo sau là số xác định vị trí của từng mảnh trong từng cặp cũng như chỉ ra hàng của CLB, tăng dần từ đáy của miếng FPGA. Hình 2.6 chỉ ra CLB ở vị trí góc thấp bên tay trái của miếng FPGA. Mảnh SLICEM luôn có số chẵn sau ‘X’, và mảnh SLICEL luôn có một số lẻ sau ‘X’. Hình 2.6: Sắp xếp của các mảnh trong một CLB Hình 2.7: Các tài nguyên trong một mảnh SLICEM và SLICEL Cả mảnh SLICEM và SLICEL đều có các thành phần chung sau đây để đảm bảo các chức năng logic, số học, và ROM: 2 LUT 4-đầu vào (F và G) thực hiện bất kỳ chức năng logic 4-đầu vào: Hoặc là 16-bit x 1 sync RAM (chỉ SLICEM): RAM16 Hoặc là 16-bit shift register (chỉ SLICEM): SRL16 2 thành phần nhớ (register) 2 bộ dồn kênh chức năng rộng: F5MUX và FiMUX Carry & Control: Logic số học nhanh (Fast arithmetic logic) Logic nhân (Multiplier logic) Logic dồn kênh (Multiplexer logic) Đối với các mảnh SLICEM, các LUT có thể được cấu hình: như LUT (F và G), hoặc như 16x1 RAM phân tán (RAM16), hoặc như thanh ghi dịch 16-bit (SRL16). Hình 2.8: Sơ đồ của mảnh SLICEM Hình 2.8 là sơ đồ chi tiết của mảnh SLICEM. Nó thể hiện một tập hợp lớn các thành phần và các kết nối có trong tất cả các mảnh. Các đường nét đứt chỉ các tài nguyên chỉ có trong mảnh SLICEM và không có trong SLICEL. Mỗi một mảnh có hai nửa: đỉnh (top portion) và nửa đáy (botton portion) để phân biệt chúng với các mảnh trên và dưới trong một CLB. Các đầu vào điều khiển cho đồng hồ (CLK), cho phép đồng hồ CE (Clock Enable), cho phép ghi mảnh SLICEWE1 (Slice Write Enable), và xóa/thiết lập RS (Reset/Set) được chia sẻ trong phần logic chung (common logic) giữa hai nửa. Các LUT ở trong các nửa đỉnh và đáy của mảnh được tham chiếu như ‘G’ và ‘F’, hoặc ‘G-LUT’ và ‘F-LUT’. Các thành phần nhớ ở trong hai nửa này được gọi tương ứng là FFY và FFX. Mỗi một mảnh có 2 bộ dồn kênh với F5MUX ở nửa đáy và FiMUX ở nửa đỉnh. Phụ thuộc vào mảnh, FiMUX có tên là F6MUX, F7MUX, hoặc F8MUX, tương ứng với vị trí của nó trong chuỗi các bộ dồn kênh. Các mảnh phía thấp (cả SLICEL và SLICEM) có một F6MUX. Mảnh SLICEM phía trên có một F7MX, và mảnh SLICEL phía trên có một F8MUX. Năm bộ dồn kênh điều khiển chuỗi: CYINT, CY0F, và CYMUXF trong nửa đáy và CY0G và CYMUXG trong nửa đỉnh. Logic số học bao gồm các mạch cổng XORF và XORG, các mạch cổng FAND và GAND (tương ứng cho nửa đáy và nửa đỉnh). Logic cells: tổ hợp của một LUT và một thành phần nhớ tạo thành một “logic cell”. Các chức năng bổ xung trong một mảnh, như các bộ dồn kênh mở rộng trực tiếp, carry logic, và các mạch cổng số học, cần thêm các LUT để thực hiện logic. 2.2.2. LUT Trong họ Spartan-3E, mỗi một mảnh có 2 LUT. Các LUT là những thành phần cơ sở để dựa vào RAM để thực hiện chức năng logic, nên nó được gọi là bộ tạo tạo chức năng. Bất kỳ chức năng nào với 4-đầu vào và 1 đầu ra. LUT n-bit có thể mã hóa bất kỳ hàm Boole n-đầu vào nào nhờ các bảng chân lý. Hình 2.9 là một ví dụ cấu hình LUT để tạo các hàm logic, trong đó, các tổ hợp của 4 bit đầu vào X1, X2 , X3 và X4, cho các giá trị của tín hiệu đầu ra Y trong các bảng chân lý cho ta các hàm logic tương ứng sau khi tối thiểu hóa. Hình 2.9: Bảng chân lý và sơ đồ tạo các mạch logic từ cấu hình LUT LUT cũng có thể được mô tả như một bộ dồn kênh 16:1 với 4 đầu vào nhị phân, và các gía trị được lập trình vào trong LUT phục vụ như là dữ liệu đã được chọn (hình 2.10). Hình 2.10: LUT được mô hình như là bộ dồn kênh 16:1 0000 0001 00110 0010 0100 0101 0111 01100 1000 1001 1011 1010 1100q00 11010 1111000 1110 1 0 1 1 1 0 0 0 1 1 1 0 1 0 0 1 D A[3:0] Trong Spartan-3E 500K, các LUT trong từng cặp mảnh SLICEM có thể được cấu hình như là các RAM phân tán hoặc như thanh ghi 16-bit. Mỗi một LUT (F và G) trong một mảnh có 4 đầu vào logic A4-A1 và 1 đầu ra D. Các hàm logic với nhiều đầu vào hơn có thể được thực hiện nhờ nối cascade các LUT hoặc nhờ các bộ dồn kênh chức năng rộng. Đầu ra của LUT có thể nối với logic bộ dồn kênh rộng, với logic số học và carry, hoặc nối trực tiếp với đầu ra của CLB hoặc với thành phần nhớ của CLB (hình 2.11). Hình 2.11: Các tài nguyên của LUT trong mảnh 1. Kết hợp LUT với các bộ dồn kênh mở rộng trực tiếp: Mỗi một mảnh có 2 bộ dồn kênh mở rộng trực tiếp với F5MUX ở nửa đáy và FiMUX ở nửa đỉnh (hình 2.12). Chúng kết hợp hiệu quả các LUT để thực hiện các logic phức tạp hơn. FiMUX có tên là F6MUX, F7MUX, hoặc F8MUX, tương ứng với vị trí của nó trong chuỗi các bộ dồn kênh. Các mảnh phía thấp (cả SLICEL và SLICEM) có một F6MUX. Mảnh SLICEM phía trên có một F7MX, và mảnh SLICEL phía trên có một F8MUX. Năm bộ dồn kênh điều khiển chuỗi: CYINT, CY0F, và CYMUXF trong nửa đáy và CY0G và CYMUXG trong nửa đỉnh. Logic số học bao gồm các mạch cổng XORF và XORG, các mạch cổng FAND và GAND (tương ứng cho nửa đáy và nửa đỉnh). Các bộ dồn kênh mở rộng trực tiếp: F5MUX, F6MUX, F7MUX, và F8MUX cho phép tạo ra bất kỳ các hàm logic 5 đầu vào, 6 đầu vào, 7 đầu vào, và 8 đầu vào. Hình 2.13 chỉ ra các tên của các bộ dồn kênh trong từng vị trí trong Spartan-3E CLB. Hình 2.12: Các bộ dồn kênh trong Spartan-3E CLB Hình 2.13: Các bộ dồn kênh và liên hệ ngược trong một CLB F5MUX kết hợp 2 LUT trong một mảnh để tạo ra: Hàm bất kỳ 5 đầu vào (LUT5): 4 đầu vào đúp cho 2 LUT và 1 đầu vào điều khiển dồn kênh (hình 2.14, hình 2.15). Hoặc các hàm tùy chọn giới hạn có 9 đầu vào, nếu 2 LUT có các tổ hợp vào độc lập với nhau. Hoặc bất kỳ hàm 6 đầu vào (bộ dồn kênh 4:1). Bảng 2.3 chỉ ra các kết nối cho từng bộ dồn kênh và số lượng các đầu vào có thể có cho các loại chức năng khác nhau. Hình 2.14: Hàm 5-đầu vào được tạo từ hai LUT và F5MUX Hình 2.15: Hàm 5-đầu vào được tạo từ hai LUT và F5MUX với các tổ hợp Bảng 2.3: Các khả năng của bộ dồn kênh MUX Sử dụng Nguồn vào Số lượng đầu vào cho một chức năng Cho hàm bất kỳ Cho MUX Cho hàm tùy chọn giới hạn F5MUX F5MUX LUT 5 6 (4:1 MUX) 9 FiMUX F6MUX F5MUX 6 11 (8:1 MUX) 19 F7MUX F6MUX 7 20 (16:1 MUX) 39 F8MUX F7MUX 9 37 (32:1 MUX) 79 Sơ đồ bộ dồn kênh F5MUX cho ở hình 2.16 (F6MUX, F7MUX, F8MUX cũng tương tự). F5MUX có hai đầu vào I0 và I1, đầu vào chọn S, hai đầu ra chung O và đầu ra cục bộ LO. Khi S ở mức thấp (‘0’) thì đầu vào I0 được chọn và O=LO=I0. Khi S ở mức cao (‘1’) thì đầu vào I1 được chọn và O=LO=I1. Hình 2.16: F5MUX Theo bảng 2.3, ta thấy: F6MUX kết hợp 2 mảnh SLICEM (2 F5MUX) để tạo ra: Bất kỳ hàm 6 đầu vào (LUT6) Hoặc các hàm tùy chọn giới hạn 19 đầu vào Hoặc bất kỳ hàm 11 đầu vào (bộ dồn kênh 8:1). MUXF7 kết hợp bốn mảnh của CLB thông qua 2 F6MUX để tạo ra: Bất kỳ hàm 7 đầu vào (LU7) Hoặc các hàm tùy chọn giới hạn 39 đầu vào Hoặc bất kỳ hàm 20 đầu vào (bộ dồn kênh 16:1) MUXF8 kết hợp hai CLB từ hai MUXF7 để tạo ra: Hàm bất kỳ 9 đầu vào (LUT9) Hoặc hàm tùy chọn 79 đầu vào Hoặc hàm bất kỳ 37 đầu vào (bộ dồn kênh 32:1). 2. Cấu hình LUT như RAM phân tán: Các LUT thuộc các mảnh SLICEM có thể được cấu hình như các bộ nhớ RAM phân tán (hình 2.17) như sau: Một LUT được cấu hình thành 16x1 RAM (RAM16X1S) với 1 cổng dữ liệu ra (O), 1 cổng dữ liệu vào (D), 4 cổng địa chỉ (A0, A1, A2, A3), 1 cổng cho phép ghi (WE), và 1 cổng xung nhịp ghi (WCLK). Hai LUT kết hợp song song được cấu hình thành 32x1 RAM (RAM32Z1S) hoặc thành 16x2 RAM (RAM16X2S) với hai cổng vào dữ liệu (D0, D1) và 2 cổng ra dữ liệu (O0, O1) Hai LUT kết hợp cascade được cấu hình thành RAM dung lượng lớn hơn, RAM16X1D. Các RAM có ghi đồng bộ, và đọc đồng bộ/ không đồng bộ. Các FF có thể được sử dụng cho đọc đồng bộ. Hình 2.17: Cấu hình các LUT thành các RAM phân tán 3. Cấu hình LUT như thanh ghi dịch: Mỗi LUT trong mảnh SLICEM có thể được cấu hình như là một số loại thanh ghi dịch 16-bit (shift register LUT) (hình 2.18) có đầu vào (IN) và đầu ra (OUT) tuần tự mà không sử dụng các FF có sẵn trong từng mảnh. Spartan-3 có thể có các cấu hình các loại thanh ghi dịch sau đây: SRLC16: Thanh ghi dịch LUT 16-bit với carry (Shift Register Look-up Table with Carry) (hình 2.18). Các thao tác dịch đồng bộ với nhịp đồng hồ, và có thể linh hoạt chọn lựa độ dài của đầu ra của thanh ghi dịch. Vì đầu ra được tách biệt nên nó cho phép nối tiếp nhau (cascade) bất kỳ số lượng thanh ghi dịch 16-bit nào để tạo ra thanh ghi dịch có độ dài bit bất kỳ mong theo mong muốn. Các đầu vào A[3:0] chọn độ dài cho cổng ra của thanh ghi dịch. Thanh ghi dịch có thể có độ dài cố định, tĩnh hoặc linh hoạt điều chỉnh. Các nội dung của thanh ghi dịch SRLC16 được khởi tạo nhờ gán một gía trị gồm 4 chữ số ở hex cho thuộc tính INIT (trong VHDL hay Verilog). Chữ đầu tiên, hoặc chữ số hex ở bên trái nhất là bit trọng lớn nhất (MSB). Nếu gía trị INIT không được xác định, thì gía trị mặc định là 0000, như vậy thanh ghi dịch sẽ được xóa trong khi cấu hình. Dữ liệu vào (D) được nạp bít đầu tiên của thanh ghi dịch SRLC16 khi nhịp đồng hồ CLK chuyển từ thấp lên cao. Trong các thời điểm CLK chuyển từ thấp lên cao, dữ liệu được dịch sang vị trí bit cao hơn. Dữ liệu xuất hiện ở đầu ra Q khi độ dài của thanh ghi dịch, được xác định nhờ các đầu vào địa chỉ A[3:0], đạt được. Đầu ra Q15 (hay MC15), gọi là đầu ra Carry, sẵn có để có thể cấu hình nối tiếp (cascade) các thanh ghi dịch tiếp theo để tạo ra các thanh ghi dịch có độ dài lớn hơn. Các đầu vào của LUT không đồng bộ (hay linh hoạt) chọn 1 trong 16 thành phần nhớ (FF) của thanh ghi dịch). Nếu cổng Q được sử dụng như là đầu ra Q của thanh ghi dịch thay vì sử dụng Q15/MC15, ta thiết lập địa chỉ thành 7 (0111) để chọn Q7 như là đầu ra của thanh ghi dịch 8-bit. Hình 2.18: LUT được cấu hình như thanh ghi dịch SRL1616-bit có thể địa chỉ 0000 0001 00110 0010 0100 0101 0111 01100 1000 1001 1011 1010 1100q00 11010 1111000 1110 Q A[3:0] D Q D Q D Q CLK D Q15/ MC15 D Q D Q D Q D Q D Q D Q D Q D Q D Q D Q D Q D Q D Q Hình 2.19: Sơ đồ khối của thanh ghi dịch 16-bit có thể địa chỉ, SRLC16 SRLC16 D CLK A[3:0] Q Q15 Để có thanh ghi dịch có độ dài cố định, các giá trị đầu vào A[3:0] phải tĩnh. Độ dài của thanh ghi dịch có thể thay đổi từ 1 bit đến 16 bit và được xác định bởi công thức sau: Độ dài = (8*A3) + (4*A2) + (2*A1) + A0 + 1 Nếu A3, A2, A1, và A0 đều bằng 0, (0000), thì thanh ghi dịch có độ dài 1 bit. Nếu tất cả chúng đều bằng 1, (1111) thì thanh ghi dịch có độ dài 16 bit. Có thể thay đổi linh hoạt độ dài của thanh ghi dịch nhờ thay đổi các gía trị vào A[3:0]. Ví dụ, nếu A2, A1, và A0 đều bằng 1 và A3 thay đổi giữa 1 và 0, thì độ dài của thanh ghi dịch thay đổi từ 16 bit xuống 8 bit. Bên trong, độ dài thanh ghi dịch SRL16 luôn là 16 bit và các đường dây A[3:0] để chọn bit nào trong 16 bit của SRL16 đi ra ngoài cổng ra. SRLC16_1: thanh ghi này khác với SLC16 bởi tác dụng của CLK. Dữ liệu vào D được nạp bít đầu tiên của thanh ghi dịch SRL16 khi nhịp đồng hồ CLK chuyển từ cao xuống thấp (hình 2.20). Trong các thời điểm CLK chuyển từ cao xuống thấp, dữ liệu được dịch sang vị trí bit cao hơn. Dữ liệu xuất hiện ở đầu ra Q khi độ dài của thanh ghi dịch, được xác định nhờ các đầu vào địa chỉ A[3:0], đạt được. Đầu ra Q15 (hay MC15), gọi là đầu ra Carry, sẵn có để có thể cấu hình nối tiếp (cascade) các thanh ghi dịch tiếp theo để tạo ra các thanh ghi dịch có độ dài lớn hơn. Hình 2.20: Sơ đồ khối của thanh ghi dịch 16-bit có thể địa chỉ, SRLC16_1 SRLC16_1 D CLK A[3:0] Q Q15 SRLC16E: thanh ghi dịch LUT 16-bit với carry và cho phép nhịp đồng hồ (16-Bit Shift Register Look-Up-Table (LUT) with Carry and Clock Enable). Dữ liệu (D) được nạp vào bit đầu tiên của thanh ghi dịch khi CLK chuyển từ thấp lên cao. Khi CE ở mức cao, trong những thời diểm tiếp theo khi CLK chuyển từ thấp lên cao, dữ liệu được dịch sang bit cao tiếp theo. Dữ liệu xuất hiện ở đầu ra Q khi độ dài của thanh ghi dịch, được xác định nhờ các đầu vào địa chỉ A[3:0], đạt được. Đầu ra Q15 (hay MC15), gọi là đầu ra Carry, sẵn có để có thể cấu hình nối tiếp (cascade) các thanh ghi dịch tiếp theo để tạo ra các thanh ghi dịch có độ dài lớn hơn (hình 2.21). Hình 2.21: Sơ đồ khối của thanh ghi dịch 16-bit có thể địa chỉ, SRLC16E SRLC16E D CE CLK A[3:0] Q Q15 SRLC16E_1: thanh ghi này khác với SLC16E bởi tác dụng của CLK. Dữ liệu (D) được nạp vào bit đầu tiên của thanh ghi dịch khi CLK chuyển từ cao xuống thấp. Khi CE ở mức cao, trong những thời diểm tiếp theo khi CLK chuyển từ cao xuống thấp, dữ liệu được dịch sang bit cao tiếp theo. Dữ liệu xuất hiện ở đầu ra Q khi độ dài của thanh ghi dịch, được xác định nhờ các đầu vào địa chỉ A[3:0], đạt được. Đầu ra Q15 (hay MC15), gọi là đầu ra Carry, sẵn có để có thể cấu hình nối tiếp (cascade) các thanh ghi dịch tiếp theo để tạo ra các thanh ghi dịch có độ dài lớn hơn (hình 2.22). Hình 2.22: Sơ đồ khối của thanh ghi dịch 16-bit có thể địa chỉ, SRLC16E_1 SRLC16E D CE CLK A[3:0] Q Q15 SRL16: Dữ liệu vào (D) được nạp bít đầu tiên của thanh ghi dịch SRL16 khi nhịp đồng hồ CLK chuyển từ thấp lên cao. Trong các thời điểm CLK chuyển từ thấp lên cao, dữ liệu được dịch sang vị trí bit cao hơn. Dữ liệu xuất hiện ở đầu ra Q khi độ dài của thanh ghi dịch, được xác định nhờ các đầu vào địa chỉ A[3:0], đạt được (hình 2.23). Hình 2.23: Sơ đồ khối của thanh ghi dịch 16-bit có thể địa chỉ, SRL16 SRL16 D CLK A[3:0] Q Có thể cấu hình LUT như thanh ghi dịch với nhịp đồng hồ (CLK) tác động bởi sườn âm, SRL16_1 (16-Bit Shift Register Look-Up-Table (LUT) with Negative-Edge Clock): dữ liệu vào (DIN) được nạp vào bit đầu tiên của thanh ghi ở thời điểm CLK chuyển từ cao xuống thấp. Trong các thời điểm tiếp theo khi CLK chuyển từ cao xuống thấp dữ liệu được dịch chuyển đến bit cao tiếp theo. Dữ liệu xuất hiện ở cổng Q khi độ dài của thanh ghi dịch đạt được xác định bởi các đầu vào địa chỉ A[3:0] đạt được (hình 2.24). Hình 2.24: Sơ đồ khối của thanh ghi dịch 16-bit có thể địa chỉ, SRL16_1 SRL16_1 D CLK A[3:0] Q Hoặc cấu hình LUT như thanh ghi dịch với cho phép nhịp đồng hồ, SRL16E (16-Bit Shift Register Look-Up-Table (LUT) with Clock Enable): khi CE ở mức cao, dữ liệu vào (D) được nạp vào bit đầu tiên của thanh ghi ở thời điểm CLK chuyển từ thấp lên cao. Trong những thời điểm tiếp theo khi CLK chuyển từ thấp lên cao, khi CE ở mức cao, dữ liệu được dịch chuyển đến bit cao tiếp theo. Dữ liệu xuất hiện ở cổng Q khi độ dài của thanh ghi dịch đạt được xác định bởi các đầu vào địa chỉ A[3:0] đạt được (hình 2.25). Khi CE ở mức thấp, thanh ghi bỏ qua các chuyển trạng thái của nhịp đồng hồ. Hình 2.25: Sơ đồ khối của thanh ghi dịch 16-bit có thể địa chỉ, SRL16E SRL16E D CE CLK A[3:0] Q Hoặc cấu hình LUT như thanh ghi dịch với cho phép nhịp đồng hồ, SRL16E_1 (16-Bit Shift Register Look-Up-Table (LUT) with Clock Enable): khi CE ở mức cao, dữ liệu vào (D) được nạp vào bit đầu tiên của thanh ghi ở thời điểm CLK chuyển từ cao xuống thấp. Trong những thời điểm tiếp theo khi CLK chuyển từ cao xuống thấp, khi CE ở mức cao, dữ liệu được dịch chuyển đến bit cao tiếp theo. Dữ liệu xuất hiện ở cổng Q khi độ dài của thanh ghi dịch đạt được xác định bởi các đầu vào địa chỉ A[3:0] đạt được (hình 2.26). Khi CE ở mức thấp, thanh ghi bỏ qua các chuyển trạng thái của nhịp đồng hồ. D CE CLK A[3:0] Hình 2.26: Sơ đồ khối của thanh ghi dịch 16-bit có thể địa chỉ, SRL16E_1 SRL16E_1 Q Mỗi một tài nguyên của CLB có thể được cấu hình sử dụng 4 trong 8 LUT như là một thanh ghi dịch 64-bit. Các thanh ghi dịch cũng có ích cho sử dụng trong các thiết kế bộ nhớ FIFO đồng bộ và có thể địa chỉ nội dung , CAM (Content-Addressable Memory). Các thanh ghi dịch cho phép phát triển các thiết kế hiệu quả cho các ứng dụng yêu cầu có sự đền bù trễ hay latency. Độ trễ tối đa 16 chu kỳ nhịp với một LUT. Kiến trúc các thanh ghi dịch cho phép cộng các tầng của đường ống để tăng thông lượng. Các đường dữ liệu phải được cân bằng để duy trì tính năng yêu thiết. Hình 2.27a cho thấy tổng kết quả của nhánh trên của đường ống: Operation A và Operation B mất 12 chu kỳ nhịp đồng hồ, kết quả của nhánh dưới của đường ống: Operation C chỉ mất 3 chu kỳ nhịp đồng hồ. Như vậy phải cần thêm 9 chu kỳ nhịp đồng hồ vào sau Operation C để cân bằng kết quả của nhánh trên của đường ống, và đảm bảo đúng kết quả tính chung của cả nhánh trên và nhánh dưới. Hình 2.27b cho thấy, thanh ghi SRL16 có thể được sử dụng để bổ xung trễ 9 chu kỳ nhịp đồng hồ mà không thực hiện thao tác nào, NOP (No Operation). Đối với các thiết kế hiệu năng cao, các Xilinx FPGA đảm bảo các kết quả tốt khi thực hiện chức năng theo đường ống đầy đủ. Không giống như ASIC, các FF trong từng mảnh của CLB đã sẵn sàng cho sử dụng. (a): Tính toán theo đường ống: nhánh dưới: Operation C cần thêm 9 chu kỳ nhịp đồng hồ đcân bằng với nhánh trên: Operation A và Operation B (b):Sử dụng SRL16 bổ xung 9 chu kỳ nhịp đồng hồ vào Operation C cho cân bằng với nhánh trên của đường ống lệnh Hình 2.27: Ứng dụng các thanh ghi dịch để làm trễ trong đường ống lệnh Nối tiếp các LUT hoặc các CLB sẽ cho thanh ghi dịch dài hơn (đầu ra Q15/MC15 của một SRLC16 nối với đầu vào D của một SRLC16 khác,…) (hình 2.28). Hình 2.286: Thanh ghi dịch 40-bit được tạo từ các SRLC16 nối cascade 2.2.3. Carry & Control Logic Trong Spartan-3E FPGA, CLB chứa bốn mảnh (slice) trong Spartan-3. Mỗi mảnh chứa hai ô logic (logic cell). Các mảnh của CLB có thể được sử dụng độc lập hoặc cùng nhau cho các chức năng logic rộng. Có hai bộ đệm 3-trang thái (buffer) liên hệ với từng CLB, mà chúng có thể được truy nhập từ tất cả các cổng ra của CLB. Mỗi ô logic chứa Hai LUT 4-đầu vào, hai Carry &Control Logic, và hai FF. Chúng tạo ra logic carry nhanh (Fast Carry Logic). Carry & Control Logic và định tuyến tách biệt nhau để tạo nhanh các tín hiệu Sum và carry. Carry Logic độc lập với các tài nguyên logic và định tuyến bình thường. Vì đặc điểm này mà nó được gọi là Fast Carry Logic. Nó tăng hiệu quả và hiệu năng của các bộ cộng (adders), các bộ trừ (Substractors, các bộ tích luỹ (accumulators), và các bộ đếm (counters). Tất cả các công cụ tổng hợp chính có thể suy luận ra carry logic cho các hàm số học: Cộng: Addition (SUM <= A + B) Trừ: Subtraction (DIFF <= A - B) So sánh: Comparators (if A < B then…) Đếm: Counters (count <= count +1) 2.2.4. Block RAM Khối RAM (Block RAM) có hai cổng độc lập: đọc (Read) và ghi (Write). Những cổng này có thể đọc và/hợc ghi đồng thời, độc lập với nhau. Tất cả Control logic được thực hiện bên trong RAM nên không cần có thêm logic của CLB để thực hiện cấu hình cổng đôi. Hầu hết chúng là các khối nhớ trực tiếp. Lý tưởng đối với các khối nhớ trong FPGA là: Có từ 4 đến 104 khối nhớ trong chip FPGA Dung lượng của một khối: 18 kbits = 18,432 bits er block (16 k không có các parity bit) Để có bộ nhớ dung lượng lớn, sử dụng nhiều khối nhớ. Bảng 2.1 ở trên có liệt kê một số thiết bị FPGA của họ Spartan-3E có số lượng các khối RAM tương ứng. Các khối RAM (Block RAM) có được cấu hình như chỉ ra ở hình 2.29. 16kx1 0 1023 8kx2 0 8191 4kx4 0 4095 2kx(8+1) 0 2047 1024x(16+2) 0 16383 1 2 4 8+1 16+2 Hình 2.29: các dung lượng của khối RAM Bảng 2.2: Độ rộng bus dữ liệu và bus địa chỉ của Spartan-3 FPGA Các sơ đồ khối của các khối RAM: Khối RAM một cổng độ rộng 1 bit: Hình 2.30: Khối RAM 1 cổng Ghép hai khối RAM một cổng độ rộng 1 bit: thành khối RAM hai cổng thực: Hình 2.31: Ghép hai khối RAM một cổng Hình 2.32: Cấu hình hai cổng RAM có độ rộng khác nhau Với các khối RAM hai cổng thực, mỗi cổng có thể được cấu hình riêng với độ rộng khác nhau. Hình 2.32 cho thấy, cổng A được cấu hình như 1Kx18 với các đường địa chỉ ADDA[9:0], và cổng B được cấu hình như 2Kx9, với các đường địa chỉ ADDRB[10:0]. Đặc điểm này có thể được sử dụng cho các ứng dụng cần phải có các giao tiếp với độ rộng bus dữ liệu khác nhau . Các họ Altera FLEX 10K và ACEX 1K không có đặc điểm này, bởi vì chúng không có khả năng tạo các khối RAM có hai cổng thực sự riêng biệt. Một khối RAM có thể được chia thành hai khối dung lượng nhỏ một nửa độc lập. Đặc điểm này cho phép mức độ sử dụng các khối RAM hiệu quả hơn, đồng thời có thể truy nhập đến hai khối RAM một cổng độc lập. Để truy nhập RAM thấp: nối bit địa chỉ MSB với Logic Low (GND). Để truy nhập tới RAM cao, nối bit địa chỉ MSB với Logic High (Vcc). Đồ thị xung Ghi_đầu tiên khối RAM (WRITE_FIRST): Hình 2.33: Đồ thị xung Ghi_đầu tiên khối RAM Đồ thị xung Đọc_đầu tiên khối RAM (READ_FIRST): Hình 2.34: Đồ thị xung Đọc_đầu tiên khối RAM Đồ thị xung Không thay đổi khối RAM (NO_CHANGE): Hình 2.35: Đồ thị xung Không thay đổi khối RAM 2.2.5. Các bộ nhân nhúng Bộ nhân nhúng 18 x 18: Các bộ nhân 18 x 18 thực hiện nhanh các phép tính số học, có dấu ở mã bù 2: Có các module Nhân/Tích luỹ. Các toán hạng 18-bit, kết quả ra 36-bit (hình 2.36). Có các thanh ghi lựa chọn với CE và RST (pipeline). Độc lập với khối RAM kề cận. Cấu trúc hoàn toàn tổ hợp. Được tổ chức theo các cột 18x18 Multiplier Hình 2.36: Bộ nhân 18x18 A [17:0] B[17:0] O [35:0] Bộ nhân không đồng bộ 18-bit: 18x18 Multiplier Hình 2.375: Bộ nhân 18x18 không đồng bộ A [17:0] B[17:0] O [35:0] Bộ nhân 18-bit với thanh ghi: 18x18 Multiplier Hình 2.386: Bộ nhân 18-bit với thanh ghi A [17:0] B[17:0] O [35:0] CLK CE RST 2.2.6. IOB Cấu trúc của khối vào/ra, IOB (Input/Output block) cơ bản cho ở hình 2.37. Mỗi IOB có ba phần: phần điều khiển three-State (Three-State Control), phần đưa ra (Output Path), và phần đưa vào (Input Path). Các IOB có các chức năng như sau: Đảm bảo giao tiếp giữa các chân tín hiệu (pin) của đóng vỏ chip FPGA và các CLB bên trong. Mỗi IOB có thể làm việc như là một đơn vị I/O một hướng hay song hướng. Các đầu ra của IOB có thể có trạng thái trở kháng cao (Three-State). Các đầu vào và các đầu ra có thể được thanh ghi hóa. Cẩn trọng đối với vào/ra hiệu năng cao. Các đầu vào có thể được làm trễ. Hình 2. 39: Sơ đồ khối của cấu trúc IOB 2.2.7. Các tài nguyên định tuyến Trong chương 1, mục 1.4.3, ta đã trình bầy về định tuyến trong kiến trúc Xilinx FPGA. Định tuyến trong FPGA bao gồm các chuyển mạch và các dây nối. Định tuyến đảm bảo kết nối giữa các khối I/OB và các khối CLB và giữa các khối CLB với nhau. Kiểu của kiến trúc định tuyến quyết định vùng được định tuyến và mật độ các khối logic. Trong kiến trúc định tuyến của họ Spartan-3 FPGA (hình 2.40), các tài nguyên định tuyến bao gồm có bốn loại của các miếng liên kết: các CLB; các IOB, các khối DCM, và các khối RAM (Block RAM)/các bộ nhân 18x18 (hình 2.41). Hình 2.40:Bốn loại của các miếng liên kết: CLB, IOB, DCM, Block RAM/Multiplier Kênh định tuyến ngang và dọc có bốn loại đường dây: đường dây trực tiếp (Directed lines) dẫn các tín hiệu đến các miếng kề cận: dọc, ngang, và chéo, và thường được dùng để dẫn tín hiệu từ miếng nguồn đến đường dây đôi, hex, hoặc dài (hình 2.41(d)); các đường dây đôi ngang và dọc (Horizontal and Vertical Double lines): từng tập hợp 8 dây đôi được nối với từng miếng theo cả chiều ngang và chiều dọc (cả bốn hướng). 32 dây đôi giữa bất kỳ miếng liên kết nào. Các dây đôi nối nhiều hơn và linh hoạt hơn so với các dây dài và hex (hình 2.41(c)); các đường dây ngang và dài (Horizontal and Long lines): từng tập hợp gồm 24 dây trải trên toàn bộ mảnh (die) FPGA cả ngang và dọc kết nối với 1 trong 6 miếng liên kết. Ở bất kỳ miếng liên kết nào 4 dây dài dẫn hoặc nhận các tín hiệu từ ma trận chuyển mạch. Do chúng có điện dung thấp, nên chúng phù hợp cho chuyển tải các tín hiệu tần số cao với các hiệu ứng tải nhỏ nhất (độ lệch xung đồng hồ ít nhất) và phù hợp cho các đường dây nhịp đồng hồ toàn cục (hình 2.41(a)); các đường dây Hex ngang và dọc (Horizontal and Vertical Hex lines): mỗi tập hợp 8 đường dây nối với 1 trong 3 miếng liên kết, cả ngang và dọc. 32 dây hex giữa bất kỳ miếng liên kết nào. Chúng chỉ dẫn tín hiệu từ một đầu của tuyến (hình 2.41(b)). (a): Các đường dây ngang và dài (b): Các đường dây ngang và dài (c): Các đường dây đôi ngang và dọc (d): Các đường dây nối trực tiếp Hình 2. 41: Các loại đường dây của định tuyến trong họ Spartan-3 FPGA Hình 2.42: Mảng các miếng liên kết trong Spartan-3E FPGA Các ma trận chuyển mạch khả trình (PSM) nối các loại liên kết khác nhau qua thiết bị. Một miếng liên kết, chỉ ra ở hình 2.35 được xác định như một ma trận chuyển mạch được nối với từng thành phần chức năng, như CLB, IOB, hoặc DCM. Nếu thành phần chức năng trải rộng qua nhiều ma trận chuyển mạch như khối RAM hay các bộ nhân, thì một miếng liên kết được xác định bằng số lượng các ma trận chuyển mạch nối với thành phần chức năng đó. Thiết bị Spartan-3E có thể được thể hiện như một mảng (array) các miếng liên kết trong đó các tài nguyên liên kết là cho kênh giữa bất kỳ hai hàng hoặc cột của miếng liên kết như mô tả ở hình 2.42. 2.2.8. DCM Module quản lý nhịp đòng hồ số, DCM (Digital Clock Manager) cung cấp nhiều chức năng. Nó có các khối chức năng: thực hiện vòng lặp khóa trễ nhịp đồng hồ, DLL (Digital Delay Locked Loop); tổng hợp tần số, DFS (Digital Frequency Synthesizer); dịch pha, PS (Phase Shifter) và logic trạng thái, SL (Status Logic) (hình 2.43, 2.44, 2.45). Các DCM đảm bảo các khả năng nhịp đồng hồ cao cấp cho các ứng dụng của thế hệ Spartan-3 FPGA (Spartan-3, Spartan-3E, Spartan-3A, Spartan-3AN, và các họ Spartan-3A DSP). Các DCM tích hợp các khả năng nhịp đồng hồ cao cấp trực tiếp vào mạng phân tán nhịp đồng hồ toàn cục. Chúng giải quyết sự đa dạng của các nhịp đồng hồ đưa ra, đặc biệt trong các ứng dụng tần số cao, hiệu năng cao với các khả năng: Nhân hoặc chia một tần số của nhịp đồng hồ đến hoặc tổng hợp toàn bộ một tần số nhờ kết hợp cả nhân và chia nhịp đồng hồ. Điều kiện của nhịp đồng, đảm bảo nhịp đồng hồ đưa ra với nửa chu kỳ dương/âm là như nhau 50-50 (50% duty cycle). Hạn chế độ lệch của nhịp đồng hồ, hoặc bên trong thiết bị hoặc đến các thành phần bên ngoài thiết bị, để tăng hiệu năng của toàn bộ hệ thống và hạn chế các trễ phân tán nhịp đồng hồ (hình 2.46). Sao chép (Mirror), chuyển tiếp (Forward), hoặc lưu đệm lại (Rebuffer) tín hiệu nhịp đồng hồ, thường để giảm độ lệch và chuyển đổi một tín hiệu nhịp đồng hồ đến thành một chuẩn vào/ra – ví dụ, chuyển tiếp và chuyển đổi nhịp đến LVTTL thành LVDS. Bất kỳ hoặc đồng thời tất cả các chức năng trên. Hình 2.43: Sơ đồ khối chức năng của DCM Phase Shift (PS) PSINCDEC PSEN PSCLK CLKFB CLKIN RST Input Stage Delay Taps Output Stage Status Logic 8 DFS DLL CLK0 CLK90 CLK180 CLK270 CLK2X CLK2X180 CLKDV CLKFX CLKFX180 LOCKED STATUS[7:0] PSDONE DCM Clock Distribution Delay Hình 2.44: Sơ đồ tượng trưng của DCM Hình 2.45: Các xung nhịp đồng hồ được tạo ra từ DCM Hình 2.46: Các mạch trễ cho các xung của DCM Các vị trí của DCM và Giao tiếp mạng phân tán nhịp đồng hồ: Hầu hết các Spartan-3 FPGA có 4 khối DCM, ngoại trừ XC3S50 chỉ có 2 khối DCM. Các khối DCM nằm ở đỉnh và đáy của các cột khối RAM/Multiplier dọc theo các cạnh bên trái và bên phải. Chip XC3S50 có 2 khối DCM nằm ở đỉnh và đáy của cột khối RAM/Multiplier dọc theo các cạnh bên trái của thiết bị. Các khối DCM có các kết nối trực tiếp với các đầu vào của bộ đệm toàn cục và các bộ dồn kênh của bộ đệm toàn cục trên cùng một cạnh của thiết bị, hoặc đỉnh hoặc đáy. Như chỉ ra ở hình 2.47, các DCM là phần tích hợp của cơ sở hạ tầng nhịp đồng hồ toàn cục trong FPGA. Các DCM là thành phần lựa chọn trong mạng phân tán nhịp đồng hồ và cho ứng dụng. Hình 2.47:Các vị trí của 4 khối DCM trên Spartan-3E FPGA Glogal Buffer Input IBUFG Glogal Clock Buffer BUFG Low-Skew Glogal Clock Network GCLK (b): DCM trực tiếp vào trong mạng toàn cục nhịp đồng hồ. Hình 2.48: Các DCM là phần tích hợp của mạng toàn cục nhịp đồng hồ I O I O CLKIN Output CLKFB DCM Digital Clock Manager Glogal Buffer Input IBUFG Glogal Clock Buffer BUFG Low-Skew Glogal Clock Network GCLK (a): Các bộ đệm nhịp đồng hồ trong mạng toàn cục nhịp đồng hồ độ lệch thấp I O I O Trong hình 2.48a, nhịp đồng hồ được đưa trực tiếp vào mạng nhịp đồng hồ toàn cục có độ lệch nhỏ thông qua các bộ đệm toàn cục và bộ đệm nhịp đồng hồ toàn cục. Nếu ứng dụng yêu cầu các chức năng tạo nhịp đồng hồ cao cấp của một số hoặc của tất cả các khối DCM, thì DCM được đưa vào giữa các bộ đệm toàn cục và bộ đệm nhịp đồng hồ toàn cục, như chỉ ra ở hình 2.48b. Các khối chức năng của DCM: DLL: hạn chế độ lệch của xung nhịp đồng hồ: đảm bảo một mạch giảm độ lệch trên chip, mà mạch này tạo ra các tín hiệu có trễ zero lan truyền nhịp đồng hồ. Mạch giảm độ méo (deskew circuit) bù đắp trễ trên mạng định tuyến nhờ giám sát nhịp đồng hồ đưa ra, hoặc là CLK0 hoặc là CLK2X. Khối DLL hạn chế hiệu quả trễ từ cổng vào của nhịp đồng hồ từ bên ngoài đến các tải của từng nhịp đồng hồ bên trong chip (hình 2.49). Mạng toàn cục có đệm tối thiểu độ lệch của nhịp đồng hồ trên mạng gây ra bởi các khác nhau về tải. Các tín hiệu vào DLL là CLKIN và CLKFB. Các tín hiệu ra của DLL là CLK0, CLK90, CLK180, CLK270, CLK2X, CLK2180 và CLKDV. DLL cũng tạo ra các tín hiệu cho bộ gấp đôi nhịp đồng hồ, Clock Doubler (CLK2X, CLK2X180), cho bộ chia nhịp đồng hồ (CLKDV), và cho các chức năng đưa ra dịch pha 1/4 (Quadrant Phase Output Shifted Outputs Functions). DLL tăng hiệu năng của hệ thống và hạn chế các trễ phân tán nhịp đồng hồ. Hình 2.49: DLL làm trễ để đồng bộ nhjip đồng hồ từ bên ngoài với nhịp đồng hồ bên trong Bảng 2.3: Các tín hiệu ra từ DLL của DCM Tín hiệu ra Mô tả CLK0 Clock ở 1x CLKIN frequency CLK180 Clock ở 1x CLK0 frequency, dịch 180o so với CLK0 CLK270* Clock ở 1x CLK0 frequency, dịch 270o so với CLK0 CLK2X* Clock ở 2x CLK0 frequency, cùng pha với CLK0 CLK2X180* Clock ở 2x CLK0 frequency, dịch 180o so với CLK2X CLK90* Clock ở 1x CLK0 frequency, dịch 90o so với CLK0 CLKDV Clock ở (1/n) x CLK0 frequency, khi n=giá trị CLKDV_DIVIDE. CLKDV cùng pha với CLK0. LOCKED Tất cả đặc tính của DCM bị khóa. CLK90, CLK270, CLK2X, và CLK2X180 không có nếu DLL_FREQUENCY_MODE ở mức cao. DLL được sử dụng để tối thiểu độ lệch của xung nhịp đồng hồ cho các thiết bị Spartan-3E. DCM đồng bộ tín hiệu nhịp đồng hồ hồi quy, CLKFB (Feedback clock input) với tín hiệu nhịp đồng hồ ở đầu vào CLKIN. Đầu ra LOCKED ở mức cao khi hai tín hiệu CLKIN và CLKFB cùng pha. Các tín hiệu được xem là cùng pha khi các sườn lên của chúng cùng bên trong một thời gian xác định. DCM hỗ trợ hai chế độ tần số cho DLL. Mặc định, thuộc tính DLL_FREQUENCY_MODE được thiết lập ở mức thấp và tần số của tín hiệu đồng hồ ở đầu vào CLKIN phải ở trong khoảng tần số thấp (từ DLL_CLKIN_MIN_LF đến DLL_CLKIN_MAX_LF) (MHz). Trong chế độ tần số thấp, có các đầu ra CLK0, CLK90, CLK180, CLK270, CLK2X, CLKDV, và CLK2X180. Khi thuộc tính DLL_FREQUENCY_MODE được đặt ở mức cao, tần số của tín hiệu đồng hồ ở đầu vào CLKIN phải ở trong khoảng tần số cao (từ DLL_CLKIN_MIN_HF đến DLL_CLKIN_MAX_HF) (MHz). trong chế độ tần số cao, chỉ có các đầu ra CLK0, CLK180, và CLKDV. Đồng bộ trên chip FPGA đạt được nhờ kết nối đầu vào CLKFB với một điểm trên mạng nhịp đồng hồ toàn cục được điều khiển bởi BUFG-bộ đệm nhịp đồng hồ toàn cục. BUFG được nối với CLKFB của DCM phải xuất phát từ các đầu ra CLK0 hoặc CLK2X của cùng một DCM. CLKIN phải được nối với đầu ra của IBUFG, với đầu vào của IBUFG được nối với một nút pad của đồng hồ hệ thống. Đồng bộ ngoài chip FPGA đạt được nhờ nối CLKFB với đầu ra của IBUFG, với đầu vào của IBUFG được nối với một nút pad. Hoặc CLK0 hoặc CLK2X có thể được sử dụng, nhưng không thể cả hai. CLK0 hoặc CLK2X phải được nối với đầu vào của bộ đệm ra OBUF. Mặc định, thuộc tính CLK_FEEDBACK điều khiển đầu ra CLK0, hoặc CLK2X là nguồn của đầu vào CLKFB. Phần dương/âm (duty cycle) của chu kỳ CLK0 là 50-50 giống như của CLKIN trừ khi thuộc tính DUTY_CYCLE_CORRECTION được thiết lập là FALSE. Duty cycle của các tín hiệu lệch pha (CLK90, CLK180, và CLK270 cũng đảm bảo như duty cycle của CLK0. Duty cycle của CLK2X, CLK2X180, và CLKDV cũng là 50-50 trừ khi CLKDV_DIVIDE là non-integer và DLL_FREQUENCY_MODE ở mức cao. DFS: tổng hợp tần số nhờ lựa chọn nhân hoặc chia tần số nhịp đồng hồ đến CLKIN, hoặc tổng hợp tần số nhịp đồng hồ mới nhờ kết hợp nhân và chia nhịp đồng hồ. DFS đảm bảo một khoảng rộng và linh hoạt các tần số dựa trên tỷ số của hai số nguyên (do người sử dụng xác định), số nhân (CLKFX_MULTIPLY) và số chia (CLKFX_DIVIDE). Tần được đưa số ra từ nhịp đồng hồ vào CLKIN nhờ đồng thời chia và nhân tần số. Đặc tính này có thể được sử dụng hoặc cùng với hoặc không có DLL. Nếu DLL không được sử dụng, thì không có quan hệ về pha giữa CLKIN và các tín hiệu ra của DFS. Hình 2.50: DFS tổng hợp bất kỳ tần số: CLKFX = (M/D)*CLKIN; M= 2 đến 32; D=1 đến 32 Các đầu ra CLKFX và CLKFX180 kết hợp với các thuộc tính CLK_MULTIPLY và CLKFX_DIVIDE đảm bảo một tổng hợp tần số DFS. DFS có thể là bất kỳ nhân hoặc chia của CLKIN. CLKFX và CLKIN trong pha từng chu kỳ CLKFX_MULTIPLY của CLKFX và từng chu kỳ CLKFX_DIVIDE của CLKIN khi có một hồi quy (Feedback) CLKFB của DLL. tần số của CLKFX được xác định nhờ đẳng thức sau đây (hình 2.50): CLKFX= (CLKFX_MULTIPLY_value/CLKFX_DIVIDE_value) * CLKIN Cả hai CLKFX hoặc CLKFX180 có thể được sử dụng đồng thời. CLKFX180 = 1x(CLKFX frequency), được dịch 180o so với CLKFX. CLKFX và CLKFX180 luôn có phần xung dương/âm bằng nhau (50/50 duty cycle). Thuộc tính DFS_FREQUENCY_MODE xác định các khoảng tần số khả dụng của nhịp đồng hồ vào và ra. Thuộc tính CLK_FEEDBACK thiết lập là NONE sẽ gây DCM ở trong chế độ của DFS. CLKFX và CLKFX180 sẽ được tạo ra mà không có hiệu chỉnh pha theo CLKIN. PS: dịch pha tín hiệu nhịp đồng hồ, hoặc nhờ tỷ số cố định của chu kỳ nhịp đồng hồ hoặc nhờ tăng dần chính xác. PS điều khiển quan hệ về pha của các tín hiệu nhịp đồng hồ ra nhờ tỷ số cố định của chu kỳ nhịp đồng hồ vào. Gía trị dịch pha cố định được thiết lập khi thiết kế và được nạp vào trong DCM trong khi cấu hình FPGA. Khối PS cũng đảm bảo một giao tiếp số cho ứng dụng của FPGA để tiến hoặc lùi giá trị dịch hiện tại theo 1/256 lần của chu kỳ nhịp đồng hồ. Các tín hiệu vào của khối PS là PSINCDEC, PSEN, và PSCLK. Các tín hiệu ra của PS là PSDONE và STATUS[0]. Độ lệnh giữa các sườn lên của CLKIN và CLKFB có thể được cấu hình như là tỷ số của chu kỳ CLKIN với thuộc tính PHASE_SHIFT. Thuộc tính CLKOUT_PHASE_SHIFT điều khiển sự sử dụng của giá trị PHASE_SHIFT. Mặc định, thuộc tính CLKOUT_PHASE_SHIFT được thiết lập là NONE và thuộc tính PHASE_SHIFT không có tác dụng. Nhờ tạo độ lệch giữa CLKIN và CLKFB, tất cả các nhịp đồng từ DCM được dịch pha theo số lượng của độ lệch này. Khi thuộc tính CLKOUT_PHASE_SHIFT được thiết lập là FIXED, độ lệch được thiết lập bởi thuộc tính PHASE_SHIFT được sử dụng khi cấu hình cho các sườn lên của CLKIN và CLKFB. Độ lệnh duy trì không đổi. Khi thuộc tính CLKOUT_PHASE_SHIFT được thiết lập là VARIABLE, độ lệch được thiết lập khi cấu hình được sử dụng như là điểm bắt đầu và gía trị độ lệch có thể được thay đổi linh hoạt trong thao tác sử dụng các tín hiệu. Đặc tính này của DFS được điều khiển bởi giao tiếp đồng bộ. Các đầu vào PSEN (Phase shift enable) và PSINCDEC (Phase shift increment/decrement) được thiết lập theo sườn lên của PSCLK (phase shift clock). Đầu ra PSDONE (phase shift done) được điểm nhịp đồng hồ với sườn lên của PSCLK. PSDONE phải được kết nối để thực hiện giao tiếp đồng bộ. Độ lệch theo các sườn lên của CLKIN và CLKFB phải được điều chỉnh linh hoạt sau khi LOCKED chuyên đến mức cao. Giá trị của thuộc tính PHASE_SHIFT xác định độ dịch pha ban đầu khi FPGA được cấu hình. Sau đó gía trị PHASE_SHIFT được thay đổi một đơn vị khi PSEN tích cực cho một chu kỳ của PSCLK. Gía trị PHASE_SHIFT được tăng dần khi PSINCDEC ở mức cao và giảm dần khi PSINCDEC ở mức thấp trong chu kỳ mà PSEN ở mức cao. Khi DCM hoàn thành xong thao tác tăng dần hoặc giảm dần, thì tín hiệu ra PSDONE chuyển đến mức cao cho kỳ PSCLK để chỉ ra thao tác đã hoàn thành. Khi RST (reset) ở mức cao, giá trị thuộc tính PHASE_SHIFT bị xóa về giá trị độ lệch ban đầu khi cấu hình. Nếu CLKOUT_PHASE_SHIFT là FIXED hoặc NONE, thì các tín hiệu vào PSEN, PSINCDEC, và PSCL phải được nối với GND. Chương trình sẽ tự động nối các tín hiệu này với GND nếu chúng không được người thiết kế thực hiện. Status Logic (SL): khối SL chỉ ra trạng thái hiện thời của DCM thông qua casc tín hiệu ra LOCKED và STATUS[0], STATUS[1], và STATUS[2]. Trạng thái của LOCKED chỉ các tín hiệu đồng hồ ra của DCM cùng pha hay không so với CLKIN. Các tín hiệu STATUS chỉ trạng thái của các thao tác của các khối DLL và PS. Tín hiệu vào RST xóa logic của DCM và chuyển DCM về trạng thái sau khi đã cấu hình. Nó cũng đưa DCM tác động trở lại khóa nhịp đồng hồ CLKIN. CM sử dụng các thuộc tính cho ở bảng 2.4 dưới đây: Bảng 2.4: DCM sử dụng các thuộc tính Thuộc tính Type Các gía trị được phép Mặc định CLKDV_DIVIDE 2-Bit Floating 2.0 1.5,2.0,2.5,3.0,3.5,4.0,4.5,5.0,5.5,6.0,6.5, 7.0,7.5,8.0,9.0,10.0,11.0,12.0,13.0,14.0,15.0 or 16.0 CLKFX_DIVIDE 1-Bit Binary 1.0 1 to 32 CLKFX_MULTI-PLY 4-Bit Binary 4.0 1 to 32 CLKIN_DIVIDE_BY_2 Boolean FALSE TRUE FALSE CLKIN_PERIOD 0.0 CLKOUT_PHASE_SHIFT Real NONE NONE FIXED VARIABLE CLK_FEEDBACK Real 1X NONE 1X 2X DESKEW_ADJUST Real SYSTEM_SYNCHRONOUS SOURCE_SYNCHRONOUS SYSTEM_SYNCHRONOUS DFS_FREQUENCY_MODE Real LOW HIGH LOW DLL_FREQUENCY_MODE Real LOW HIGH LOW DUTY_CYCLE_CORRECTION Boolean TRUE TRUE FALSE FACTORY_JF 16-Bit Binary 16'hC080 PHASE_SHIFT Integer 0 -255 to 255 STARTUP_WAIT Boolean FALSE TRUE FALSE KIT PHÁT TRIỂN SPARTAN-3E FPGA Có một số kit Spartan-3 cho phát triển FPGA như: Xilinx® Spartan®-3AN Starter Kit, Spartan-3 PCI Express Starter Kit, Xilinx Spartan-3 Evaluation Kit, Xilinx Spartan-3 Development Kit, Spartan-3 LC Evaluation Kit, Xilinx Spartan-3 Mini-Module, Spartan-3 MB Development Kit, và Xilinx® Spartan®-3E Starter Kit. Trong đó Xilinx® Spartan®-3E Starter kit hỗ trợ họ Spartan-3E FPGA có các đặc tính cạnh tranh như: chi phí thấp, tạo các thiết kế logic lập trình lý tưởng. Spartan-3E là họ thứ 7 trong các loạt Spartan gía rẻ và là họ thứ ba của Xilinx được sản xuất bằng công nghệ quá trình 90nm cao cấp, đa dụng với gía một logic rẻ nhất trong công nghiệp. Đặc điểm của bảng Xilinx® Spartan®-3E 500k starter kit Bảng Xilinx Spartan 3E 500k starter kit (hình 2.50) là một thiết bị phát triển mạnh các thiết kế phần cứng số. Nó chứa tới 500k cổng cho phép thiết kế các hệ thống phức tạp bao gồm cả bộ xử lý mềm MicroBlaze RISC với các giao tiếp DDR. Bảng được trang bị khả năng lập trình JTAG thông qua cổng USB2 trên bảng, các cáp song song bên ngoài hoặc USB. FPGA hỗ trợ cấu hình thông qua bộ nhớ flash trên bảng mạch của Xilinx, Intel StrataFlash, ST Microelectonics Serial Flash và các lựa chọn khác. Bảng phát triển này hoàn toàn tương thích với tất cả các phiên bản của các công cụ Xilinx ISE kể cả phần mềm miễn phí WebPack. Bảng phát triển này cũng tương thích với Xilinx Embedded Development Kit (EDK) với trang bị lõi 32-bit MicroBlaze RISC soft processor và cũng tương thích với PicoBlaze của Xilinx. 1. Các đặc điểm chính của bảng phát triển: Thiết bị Xilinx: Spartan-3E FPGA (XC3S500E-4FG320C), 320-pin FBGA package CoolRunnerTM-II CPLD (XC2C64A-5VQ44C) Platform Flash (XCF04S-VO20C) Clocks: 50 MHz Crystal clock oscillator Memory: 128 Mbit Parallel Flash 16 Mbit SPI Flash 64 MByte DDR SDRAM Connector và Interfaces: Cổng nối chuột PS/2 hoặc bảng phím Cổng nối hiển thị VGA 10/100 Ethernet PHY (yêu cầu Ethernet MAC in FPGA) Hai cổng 9-pin RS-232 (DTE- and DCE-style) Giao tiếp trên bảng USB-based FPGA/CPLD cho download/debug 3 Digilent 6-pin connectors mở rộng 4-output, SPI-based Digital-to-Analog Converter (DAC) 2-input, SPI-based Analog-to-Digital Converter (ADC) với programmable-gain pre-amplifier ChipScope™ SoftTouch debugging port Rotary-encoder với push-button shaft 8 discrete LEDs, 4 slide switches, 4 push-button switches SMA clock input 8-pin DIP socket cho nguồn tạo nhịp đồng hồ bên ngoài Texas Instruments TPS75003 Triple-Supply Power Managent IC Display: 16 ký tự - 2 dòng LCD Nguồn: Adaptor 100-240V, 50/60 Hz Lập trình: Lập trình JTAG qua cổng USB2 trên bảng, các cáp USB hoặc cáp song song bên ngoài FPGA hỗ trợ một số lựa chọn cấu hình gồm flash trên bảng, SPI flash, và flash song song. ISE® WebvPACKTM software, ISE FoundationTM software evaluation, và Kit phát triển nhúng (EDK). Handbook: Introduction to Programmable Logic Design Quick Start Starter Kit resource CD USB cable. Hình 2.50: Sơ đồ khối của bảng phát triển Spartan 3E 500K Hình 2.51: Cấu trúc bên trong của Spartan 3E 500K FPGA Bộ xử lý mềm 32-bit MicroBlaze Các bộ vi xử lý sẵn có để sử dụng trong các FPGA của Xilinx với các công cụ phần mềm Xilinx EDK có thể được chia thành hai loại: các vi xử lý lõi-mềm (MicroBlaze) và vi xử lý lõi-cứng (PowerPC). Các vi xử lý lõi-mềm MicroBlaze được sử dụng trong hầu hết các họ Spartan-II, Spartan-3, Spartan-3E, và Virtex FPGA. Các vi xử lý lõi-cứng nhúng là bộ xử lý IBM PowerPC 405, và cũng có trong Virtex-II Pro và Virtex-4 FX FPGA. Chúng được sản xuất sẵn trong các chip, vì vậy ở đây ta chỉ xét đến các vi xử lý lõi-mềm. Bộ xử lý MicroBlaze là bộ xử lý 32-bit kiến trúc RISC được tối ưu để thực ghiện trong các Xilinx FPGA với các bus lệnh và dữ liệu 32-bit riêng biệt chạy ở tốc độ đầy đủ để thực hiện các chương trình và truy nhập dữ liệu từ bộ nhớ bên trong chip và từ bộ nhớ bên ngoài chip đồng thời. Xương sống của kiến trúc MicroBlaze là đường ống 3-giai đoạn một đường ra với tệp các thanh ghi chung 32-bit, ALU, đơn vị dịch, và hai mức ngắt (hình 2.52). Kiến trúc cơ bản này của MỉcroBlaze có thể sau đó được cấu hình thêm những khối chức năng khác cho phù hợp với ứng dụng nhứng như: bộ dịch (barrel shifter), bộ chia (divider), bộ nhân (multiplier), đơn vị dấu phẩy động (FPU), các cache lệnh và dữ liệu (8KB I-cache, 8KB D-cache), xử lý ngoại lệ, logic gỡ rối (debug logic), giao tiếp liên kết đơn công nhanh FSL (Fast Simplex Link),v.v… Tính linh hoạt này cho phép người sử dụng cân bằng hiệu năng yêu cầu của ứng dụng đối lại với chi phí vùng logic của bộ xử lý. Vì MicroBlaze là bộ xử lý lõi-mềm, nên bất kỳ đặc tính nào không được sử dụng sẽ không được thực hiện và sẽ không sẽ không lấy bất kỳ tài nguyên nào bên trong FPGA. Vì MicroBlaze có mô hình kiến trúc Havard, trong đó bus dữ liệu và các cổng I/O (các cổng I/O là một phần trong bộ nhớ) được tách riêng với bus của lệnh, nên có thể tham chiếu đồng thời lệnh và dữ liệu. Đường ống của MicroBlaze là đường ống song song, được chia thành 3 giai đoạn: đọc lệnh (Fetch), Giải mã lệnh (Decode), và thực hiện lệnh (Execute). Thường thì mỗi giai đoạn cần 1 chu kỳ nhịp nhịp đồng hồ để thực hiện. Như vậy phải mất 3 chu kỳ nhịp đồng hồ để một lệnh thực hiện xong. Mỗi giai đoạn tích cực trong một chu kỳ nhịp đồng hồ nên 3 lệnh có thể thực hiện đồng thời. Nhờ có bộ đệm lệnh (Instruction Buffer) nên giảm trễ chờ đợi giữa các lệnh vì các lệnh được đọc từ bộ nhớ được liên tục theo tiến trình thực hiện các lệnh trước (đó là đặc tính của đường ống lệnh, tương tự như dây truyền sản xuất). Hình 2.52: Sơ đồ khối của bộ xử lý lõi-mềm MicroBlaze bên trong FPGA MicroBlaze có 3 giao tiếp để truy nhập bộ nhớ: bus bộ nhớ cục bộ LMB (Local Memory Bus); Bus ngoại vi trên chip của IBM, OPB (IBM’s on-chip Peripheral Bus); và XCL (Xilinx CacheLink). LMB đảm bảo một chu kỳ nhịp đồng hồ truy nhập đến block RAM hai cổng (BRAM) trong FPGA. OPB đảm bảo kết nối với bộ nhớ và ngoại vi cả ở bên trong chip và bên ngoài chip (hình 2.53). XCL dùng cho kết nối với các bộ điều khiển bộ nhớ (MCH OPB DDR). Hình 2.53: Kết nối bộ xử lý lõi-mềm MicroBlaze bên trong FPGA Các khối của bộ nhớ chính nằm trong khoảng địa chỉ 0x22000000 – 0x2200FFFF. Bảng 2.5: Bản đồ sắp xếp địa chỉ của hệ thống MicroBlaze Khối OPB Ethernet được cấu hình cho 10 Mb/s hoặc 100 Mb/s phụ thuộc vào mạng ghép nối. Khối điều khiển bộ nhớ OPB EMC kết nối với Intel StrataFlash PROM, sử dụng để lưu trữ Bitstream của cấu hình phần cứng và ứng dụng khởi động nạp (Boootloader). Khối OPB UART Lite được cấu hình để sử dụng các ngắt. Nó được thiết lập cổng kết nối DTE tuần tự tốc độ 115200 b/s. Nó yêu cầu sử dụng cáp Null modem. MicroBlaze hỗ trợ đến 8 cổng liên kết đơn cổng nhanh FSL, mỗi cổng FSL với một master và một slave. FSL đơn giản cho kết nối điểm-điểm. Các lệnh của MicroBlaze đều rộng 32 bit và được xác định như là loại A hoặc loại B. Các lệnh loại A có 2 thanh ghi toán hạng nguồn và 1 thanh ghi toán hạng đích. Các lệnh loại B có thanh ghi toán hạng nguồn và một toán hạng tức thời 16-bit. Có các nhóm lệnh: số học, logic, rẽ nhánh, Load/store, và đặc biệt. MicroBlaze là loại xử lý Load/Store, nghĩa là nó chỉ có thể load/store dữ liệu từ/đến bộ nhớ. Nó không thể thực hiện bất kỳ thao tác nào trên dữ liệu trực tiếp trong bộ nhớ, mà phải lấy dữ liệu vào trong MicroBlaze để thực hiện. Các giao tiếp dữ liệu cũng rộng 32 bit và sử dụng Big-Endian, dạng đảo bit để biểu diễn dữ liệu, nghĩa là Bit 0 là MSB và Bit 31 là LSB. MicroBlaze sử dụng từ 32-bit, nửa từ 16-bit, và cho phép truy nhập theo byte vào bộ nhớ. Ngăn xếp trong MicroBlaze bắt đầu từ vùng nhớ địa chỉ cao và lớn dần xuống vùng nhớ địa chỉ thấp khi các khoản dữ liệu được đẩy vào ngăn xếp nhờ lệnh Call. Các khoản dữ liệu ở vùng nhớ địa chỉ thấp được pop khỏi ngẵn xếp trước tiên. MicroBlaze cũng có các thanh ghi đặc biệt như: bộ đếm chương trình (PC) có thể được đọc/ nhưng không thể ghi được, thanh ghi trạng thái máy MSR (Machine Status Register) chỉ trạng thái của bộ xử lý: carry, lỗi chia cho 0, lỗi của FSL, cho phép/cấm ngắt. Thanh ghi địa chỉ ngoại lệ EAR (Exception Address Register) lưu địa chỉ đầy đủ của load/store đã gây ra một ngoại lệ. Thanh ghi trạng thái ngoại lệ ESR (Exception Status Register) chỉ ra loại ngoại lệ nào đã xẩy ra. Thanh ghi trạng thái dấu phẩy động FSR (Floating-Point Status Register) chỉ ra thao tác bị lỗi, lỗi chia cho 0, tràn, tràn dưới và lỗi toán hạng không được bình thường hóa của lệnh dấu phẩy động. MicroBlaze cũng hỗ trợ xóa, ngắt, ngoại lệ của người dùng, break và các ngoại lệ của phần cứng. Đối với các ngắt, chỉ một nguồn ngắt từ bên ngoài (nối với cổng vào ngắt). Nếu cần phải có nhiều ngắt, thì phải sử dụng bộ điều khiển ngắt. Có một bộ điều khiển ngắt sẵn có cho sử dụng với các công cụ phần mềm Xilinx EDK. Bộ xử lý sẽ phản ứng với các ngắt nếu bit cho phép ngắt IE (interrupt enable) trong MSR được thiết lập bằng 1. Một ngắt lệnh đang thực hiện sẽ xẩy ra, lệnh trong giai đoạn giải mã được thay thế bằng một rẽ nhánh đến interrupt vector (địa chỉ 0x10). Địa chỉ trở về sau khi thực hiện xong ngắt (địa chỉ của lệnh trong giai đoạn giải mã bị ngắt) được tự động nạp vào thanh ghi chung R14. Ngoài ra, bộ xử lý cũng xóa bit IE trong MSR để cấm các ngắt tiếp theo. Bit IE được tự động thiết lập bằng 1 trở lại khi thực hiện lệnh RTID. Chương trình điều khiển MicroBlaze phải được viết ở ngôn ngữ C/C++. Bởi vì sử dụng C/C++ là phương pháp ưa thích của hầu hết người dùng và nó là khuôn dạng mà các công cụ phần mềm phát triển Xilinx EDK mong muốn. Các công cụ Xilinx EDK đã xây dựng trình biên dịch C/C++ để tạo mã máy cần thiết cho MicroBlaze. CÂU HỎI ÔN TẬP Đặc điểm của các họ Spartan-3E FPGA Dữ liệu được ghi vào FPGA trên bảng phát triển Spartan-3E bằng mấy chế độ Đặc điểm đóng vỏ và gắn nhãn của chip Xilinx Spartan-3E FPGA Kiến trúc chung của Xilinx Spartan-3E FPGA Cấu trúc của CLD Cấu trúc của IOB Cấu trúc của một ô logic Các tài nguyên trong mảnh SLICEM và SLICEL Cấu trúc của LUT Cấu hình LUT tạo các mạch logic như thế nào Kết hợp các LUT bằng các bộ dồn kênh: MUXF5, MUXF6, MUXF7, và MUXF8 Cấu hình các LUT như RAM phân tán như thế nào Cấu hình LUT như các thanh ghi dịch như thế nào Cấu trúc của Block RAM Ghép nối các block RAM Đồ thị xung Ghi/đọc khối RAM, giải thích Chức năng của Carry & control logic Thanh ghi dịch trong tính toán theo đường ống, tạo trễ Sơ đồ khối và chức năng của bộ nhân nhúng 18x18 Sơ đồ khối và chức năng của bộ nhân không đồng bộ 18 bit Sơ đồ khối và chức năng của bộ nhân 18-bit với thanh ghi Các tài nguyên định tuyến của Spartan-3E FPGA Cấu trúc và chức năng của DCM Các vị trí của DCM và giao tiếp mạng phân tán nhịp đồng hồ Cấu trúc và chức năng của DLL Cấu trúc và chức năng của DFS Cấu trúc và chức năng của PS Chức năng của SL Đặc điểm của bảng phát triển Spartan-3E FPGA Đặc điểm của chip Xilinx XC3S1600E-4FGG484 FPGA Bộ Kit phát triển Spartan-3E gồm những gì Sơ đồ khối và các chức năng của bộ xử lý mềm MicroBlaze 32-bit Bản đồ địa chỉ của hệ thống MicroBlaze 32-bit.

Các file đính kèm theo tài liệu này:

  • docxHọ xilinx spartan-3e fpga.docx
Tài liệu liên quan