Kiến trúc của FPGA

Một phần của tài liệu ĐỒ ÁN Nghiên cứu kỹ thuật nén ảnh theo phương pháp phân mảnh (Fractal Image Coding) (Trang 51 - 66)

1. Nội dung thiết kế tốt nghiệ p:

3.1.2 Kiến trúc của FPGA

Kiến trúc cơ bản của một chip FPGA bao gồm :

- CLB(Configurable Logic Block): khối logic có thể cấu hình được bao gồm các tài nguyên để tạo ra mạch tổ hợp và các thanh ghi.

- IOB(Input Output Block): khối vào ra (I/O).

- Các kết nối có thể lập trình được(Programmable Interconnect): Đây là hệ thống kết nối bên trong chip gồm có các đường dây ngang và dọc có thể được định nghĩa thông các chuyển mạch lập trình được ( programmable switch ).

Đặng Thị Xuân – ĐTVT_KSTN_K52 Trang 48

Hình 3-2 Cấu trúc cơ bản chip FPGA [7]

Ngoài các khối cơ bản nêu trên chip FPGA thường có thêm các thành phần khác như:

 Bộ nhân, bộ cộng

 Nhân vi xử lý

 Bộ nhớ Block Ram

 Bộ quản lý xung đồng hồ

Phần tiếp theo của chương này sẽ giới thiệu chi tiết công nghệ FPGA thông qua việc phân tích các các thành phần cơ bản của chip FPGA.

3.1.2.1 Khối I/O

Ngày nay một chíp FPGA có thể có hơn 1000 chân và được sắp xếp thành các từng dãy (bank) xung quanh chip. Các chân vào ra này có thể cấu hình để hoạt động ở các chuẩn khác nhau: LVTTL, LVCMOS, LVDS… Mỗi chuẩn sẽ quy định mức điện áp khác nhau biểu diễn mức 0 hoặc 1. Việc có thể cấu hình các chuẩn I/O giúp việc thiết kế hệ thống trở nên đơn giản hơn rất nhiều.

Đặng Thị Xuân – ĐTVT_KSTN_K52 Trang 49

Hình 3-3 Vị trí các bank I/O [7]

Mỗi bank I/O có thể được cấu hình với một chuẩn vào ra riêng. Do đó chip FPGA có thể sử dụng trong các hệ thống yêu cầu nhiều chuẩn tín hiệu vào ra khác nhau. Ngoài việc có thể cấu hình theo các chuẩn vào ra khác nhau các chân I/O còn có thể điều chỉnh giá trị trở kháng đặt trên nó. Ngày nay, các hệ thống số thường hoạt động ở tần số rất cao (thời gian tín hiệu chuyển giữa các mức logic thường rất nhỏ). Để ngăn tín hiệu phản hồi trở lại, cần phải có các điện trở thích hợp nối với các chân vào ra của FPGA. Trong quá khứ, những điện trở này thường được thiết kế trên mạch tuy nhiên khi số chân FPGA ngày càng tăng thì việc này trở nên bất tiện. Vì lý do đó ngày nay các chip FPGA sử dụng các điển trở nối bên trong chip có thể thay đổi được giá trị để phù hợp với từng điều kiện làm việc và từng chuẩn vào ra.

Đặng Thị Xuân – ĐTVT_KSTN_K52 Trang 50

Hình 3-4 Sơ đồ một IOB đơn giản

Trên sơ đồ khối ta thấy mỗi IOB gồm có 3 đường dẫn chính: đường vào (Input path), đường ra ( Output path) và đường ba trạng thái (three state pathe), Mỗi đường có một cặp các phần tử lưu trữ ( TFF, OFF, IFF). Các phần tử này có thể cấu hình như một Flip-Flop D lật theo sườn hay một bộ chốt theo mức ( level-sensitive latch ). Các cặp phần tử lưu trữ trên hai đường dẫn Output và 3-State có thể kết hợp với bộ ghép kênh đặc biệt để tạo ra chế độ truyền Double-Data-Rate ( DDR ). Ngoài ra khối DCI được mắc nối tiếp với đầu ra chính là khối thực hiện chức năng điều chỉnh trở kháng đầu ra.

Đặng Thị Xuân – ĐTVT_KSTN_K52 Trang 51

3.1.2.2 Khối CLB

Như đã giới thiệu ở trên, cấu trúc cơ bản của chip FPGA bao gồm một ma trận các khối logic có thể lập trình được ( CLB ) đặt trên một hệ thống các đường kết nối và ma trận chuyển mạch. Ta có thể quan sát lại vị trí các CLB trong chip FPGA trong hình 3-5 dưới đây:

Hình 3-5 CLB trong FPGA [7]

Ngoài các đường kết nối giữa các CLB, bên trong mỗi CLB cũng có các kết nối có thể lập trình được. Chính khả năng này giúp CLB có thể lập trình để thực hiện các hàm logic khác nhau. Trong các dòng chip cũ mỗi CLB có thể được cấu thành bởi hai slice nhưng trong các kiến trúc mới thì số slice trong mỗi CLB thường là bốn. Điều này làm tăng khả năng tính toán của mỗi CLB và của cả chip FPGA. Cấu trúc của một CLB có thể nhìn thấy trên hình 3.6.

Đặng Thị Xuân – ĐTVT_KSTN_K52 Trang 52

Hình 3-6 Cấu trúc một CLB

Trên hình ta có thể thấy các slice được ký hiệu từ S0 đến S3. Kết hợp với mỗi CLB là một ma trận chuyển mạch làm nhiệm vụ kết nối các slice trong CLB với các slice trong các CLB khác. Ngoài ma trận chuyển mạch, bên trong mỗi CLB cũng có các đường kết nối để cung cấp một kết nối tốc độ cao hơn giữa các slice trong cùng một CLB. Các kết nối này rất hữu dụng trong việc tăng tốc độ hệ thống được thiết kế trên FPGA.

Ngoài ra từ trên hình ta cũng có thể thấy các slice được nhóm thành từng cặp, hai slice bên trái thành một cặp và hai slice bên phải thành một cặp khác. Sự phân chia này nhằm mục đích tối ưu hóa việc thực hiện các phép toán có nhớ như phép cộng, phép trừ, phép cộng tích lũy… Một chú ý khi thực hiện các phép toán này đó là các bít có trọng số nhỏ ( LSB ) phải được đặt ở slice dưới, các bit có trọng số cao phải đặt ở slice phía trên. Ngoài ra các slice ở bên trái hình (ký hiệu SLICEMs) ngoài việc thực hiện các hàm logic còn có thể được cấu hình thực hiện chức năng của

Đặng Thị Xuân – ĐTVT_KSTN_K52 Trang 53

memory hoặc của các thanh ghi dịch ( SRL16 ) trong khi các slice bên phải (ký hiệu SLICEL s) chỉ có thể dùng để thực hiện các hàm logic.

Trong hình 3.7 ta có thể thấy một kiến trúc cơ bản của một slice. Các thành phần chính trong một slice bao gồm hai LUT, hai phần tử logic dãy ( thanh ghi ) và carry logic. Mỗi slice có bốn đầu ra, gồm hai đầu ra có nhớ và hai đầu ra không có nhớ.

Hình 3-7 Kiến trúc của slice

Mỗi LUT có thể thực hiện bất cứ một hàm logic bốn đầu vào nào do đó nó còn được gọi là bộ tạo hàm. LUT là một phần tử cơ bản trong thiết kế số có thể chuyển sang ASIC. Độ trễ tính toán ở trong LUT là hằng số bất kể hàm logic được thực hiện có phức tạp hay không. Một hàm logic lớn hơn bốn đầu vào được thực hiện bởi sự kết hợp của hai hoặc nhiều LUT. Tuy nhiên điều này sẽ làm độ trễ của hàm logic tăng gấp hai lần, làm giảm tốc độ của toàn bộ hệ thống. Hình 3.8 là một ví dụ thực hiện một hàm logic bằng LUT.

Đặng Thị Xuân – ĐTVT_KSTN_K52 Trang 54

Hình 3-8 Dùng LUT để thực hiện một hàm logic

Không chỉ các LUT trong cùng một slice, các LUT ở các slice khác nhau cũng có thể kết hợp với nhau để thực hiện các hàm logic phức tạp. Ví dụ trong hình 3-9 : để thực hiện một bộ MUX5 chỉ cần kết hợp hai LUT trong một slice, nhưng để thực hiện một bộ MUX6 sẽ cần kết hợp bốn LUT trong hai slice khác nhau.

Đặng Thị Xuân – ĐTVT_KSTN_K52 Trang 55

Hình 3-9 Kết nối giữa các LUT

Ngoài các LUT, trong slice còn bao gồm các thanh ghi. Các thanh ghi này có thể được sử dụng như là thanh ghi hoặc là bộ chốt. Các thanh ghi hoạt động theo clock, còn các bộ chốt hoạt động theo mức logic đầu vào. Các thanh ghi được cấu tạo là các D flip flop. Các loại flip flop các có thể được xây dựng nhờ sự kết hợp giữa các D flip flop và các LUT.

3.1.2.3 Khối Block_RAM

Ngày nay rất nhiều ứng dụng yêu cầu phải sử dụng bộ nhớ, vì lý do đó, chíp FPGA đã được nhúng nhiều khối RAM có kích thước tương đối lớn gọi là e-RAM hay Block RAM. Tùy theo từng kiến trúc, các khối RAM này có thể được sắp xếp ở vùng biên của chip, sắp xếp rải rác trên bề mặt chip trong những vùng khác nhau hoặc được xếp thành cột như trong hình 3-10.

Đặng Thị Xuân – ĐTVT_KSTN_K52 Trang 56

Hình 3-10 Vị trí các block RAM

Phụ thuộc vào từng dòng chip mỗi block RAM có thể có kích thước từ vài nghìn cho đến vài chục nghìn bit và mỗi chip có thể chứa từ hàng chục cho đến hàng trăm block Ram, do đó cung cấp bộ nhớ có dung lượng từ hàng trăm nghìn bit cho đến vài triệu bit. Mỗi Block RAM có thể được sử dụng độc lập hoặc kết hợp nhiều block RAM với nhau để có kích thước lớn hơn. Những block RAM này có thể được dùng vào rất nhiều mục đích ví dụ như thực hiện các bộ nhớ một cổng, hai cồng, FIFO, FSM…Đối với các chip FPGA của Xilinx, BRAM thường có kích thước 16kbit và được thiết kế với hai cổng. Điều đó có nghĩa là mỗi BRAM có một cổng đọc và một cổng ghi độc lập có clock riêng. Mỗi BRAM có thể thay đổi kích thước (độ rộng) các cổng để phù hợp với các ứng dụng khác nhau. Trong một vài chip của Xilinx như chip Virtex-5 các block RAM có thể hoạt động ở tần số 500MHz và có thêm các khối logic để thực hiện việc ghép các BRAM lại với nhau hoặc để sử dụng BRAM như một FIFO một cách hiệu quả nhất mà không tốn thêm một slice nào.

3.1.2.4 Các bộ nhân, cộng, MAC

Một vài phép toán, như phép nhân, nếu được thực hiện đơn thuần bằng các CLB sẽ rất tốn một tài nguyên và độ trễ khi thực hiện phép toán cũng rất lớn. Các phép toán này lại được sử dụng trong rất nhiều ứng dụng, do đó trong các chip

Đặng Thị Xuân – ĐTVT_KSTN_K52 Trang 57

FPGA đã được nhúng thêm những khối logic riêng biệt chuyên thực hiện các phép toán này. Các khối logic này thông thường được đặt gần các block ram để giảm thời gian truyền dữ liệu vì chúng thường hay được kết hợp với nhau để giải quyết các bài toán. Trong các chip FPGA của Xilinx thường được tích hợp các bộ nhân hai đầu vào 18 bit. Các bộ nhân có thể thực hiện các phép nhân có dấu hoặc không dấu, hoạt động ở chế độ không đồng bộ hoặc ở chế độ đồng bộ với clock.

MULT 18x18

A[17:0]

B[17:0]

P[35:0]

(a) Bộ nhân không đồng bộ 18 bit

MULT 18x18 S A[17:0] B[17:0] P[35:0] (b) Bộ nhân đồng bộ 18 bit clk CE RST

Hình 3-11 Các bộ nhân của Xilinx

Tương tự như bộ nhân, bộ cộng cũng được nhúng vào trong chip FPGA. Ngoài ra, còn một phép toán cũng rất thường xuyên được sử dụng trong các ứng dụng DSP là phép toán nhân cộng tích lũy ( MAC ) – kiến trúc được thể hiện trong hình 3-12. Thông thường để thực hiện phép toán này sẽ phải kết hơp các phép nhân, cộng, các CLB và cả các flip flop, sau đó kết quả cần được lưu vào RAM. Do đó trong một số chip FPGA cũng đã được nhúng thêm các bộ MAC, điều này giúp cho công việc của kỹ sư thiết kế được đơn giản hơn rất nhiều.

Đặng Thị Xuân – ĐTVT_KSTN_K52 Trang 58

Hình 3-12 Kiến trúc bộ MAC

3.1.2.5 Khối quản lí đồng hồ DCM (Digital Clock Manager)

Tất cả các thành phần đồng bộ trong chip FPGA đều phải được điều khiển bởi tín hiệu đồng hồ (clock). Về cơ bản các tín hiệu đồng hồ này được đưa từ bên ngoài vào chip FPGA thông qua một chân riêng: chân clock và sau đó được đưa vào các kết nối để đến các thành phần tương ứng.

Trong các chip FPGA có một hệ thống các kết nối riêng để đưa tín hiệu clock nối đến các thành phần tương ứng. Kiến trúc này đảm bảo các thành phần ở các vị trí khác nhau sẽ nhận được tín hiệu clock có đặc tính giống nhau, tránh trường hợp bị trượt clock do quá trình truyền tín hiệu với các khoảng cách khác nhau. Thông thường một chip FPGA sẽ có nhiều chân clock và nhiều hệ thống kết nối khác nhau đảm bảo chip FPGA có thể hoạt động ở nhiều tần số khác nhau.

Đặng Thị Xuân – ĐTVT_KSTN_K52 Trang 59

Hình 3-13 Phân bố các tín hiệu clock [7]

Trên thực tế thay vì kết nối trực tiếp, các chân clock thường được nối qua một khối phần cứng điều khiển đồng hồ ( DCM ) – hình 3-14. Các clock được tạo ra từ khối DCM sau đó mới được đưa đến hệ thống kết nối hoăc đưa ra ngoài để điều khiển các thiết bị ngoại vi.

Đặng Thị Xuân – ĐTVT_KSTN_K52 Trang 60

Mỗi dòng chip FPGA khác nhau có thể có các khối DCM khác nhau và có nhiều khối DCM trong một chip. Về cơ bản, một khối DCM thực hiện các chức năng sau đây.  Khử nhiễu  Tổng hợp tần số  Dịch pha  Tự điều chỉnh trượt đồng hồ a. Khử nhiễu

Giả sử tín hiệu clock đưa vào có tần số 1MHz (trên thực tế tần số này lớn hơn rất nhiều), điều này có nghĩa là về mặt lý thuyết mỗi sườn clock được đưa và cách nhau chính xác một phần triệu giây. Tuy nhiên, trên thực tế, các sườn clock này thường đến sớm hoặc muộn hơn một chút. Để hình dung ảnh hưởng của hiện tượng trên ta tiến hành chồng các xung clock lên nhau, kết quả sẽ được một xung đồng hồ có tần số không rõ ràng như trong hình 3-15.

Hình 3-15 Ảnh hưởng của nhiễu đến tín hiệu đồng hồ

Các bộ DCM trong FPGA sẽ tự động phát hiện, triệt tiêu méo của tín hiệu clock đưa vào để cung cấp một tín hiệu đồng hồ chính xác ( hình 3-16).

Đặng Thị Xuân – ĐTVT_KSTN_K52 Trang 61

Hình 3-16 Các bộ DCM triệt tiêu méo

b. Tổng hợp tần số

Thường trong các thiết kế, tần sô tín hiệu clock đưa vào chip FPGA không phải là tần số hoạt động mong muốn của chip, trong những trường hợp đó có thể sử dụng khối DCM để tạo ra các tín hiệu clock con có tần số là bộ số của tần số tín hiệu clock gốc. Một ví dụ đơn giản ta xem xét ba tín hiệu clock con trong hình 3.15. Tín hiệu thứ nhất có tần số bằng với tần số gốc, tín hiệu thứ hai có tần số gấp đôi và tín hiệu thứ ba có tần số bằng một nửa, tất cả các tín hiệu trên đều được tạo ra từ khối DCM. Minh họa trong hình 3-17.

Hình 3-17 Sử dụng DCM để tổng hợp tần số

c. Dịch pha

Các khối DCM có thể thực hiện việc dịch pha tín hiệu clock để phục vụ một số yêu cầu thiết kế đặc biệt. Độ dịch pha có thể là các giá trị cố định: 90o, 180o, 270o hoặc có thể được tự thiết lập bởi người thiết kế tùy theo tính năng được hỗ trợ bởi khối DCM. Hình 3-18 là một ví dụ về việc sử dụng DCM để dịch pha tín hiệu clock đầu vào.

Đặng Thị Xuân – ĐTVT_KSTN_K52 Trang 62

Hình 3-18 Sử dụng DCM để dịch pha tín hiệu clock

d. Tự điều chỉnh trượt đồng hồ

Tương tự như chức năng khử nhiễu tín hiệu clock ngoài, chức năng tự điều chỉnh trượt đồng hồ được thực hiện bên trong chip FPGA nhằm mục tiêu triệt các ảnh hưởng có thể gây trễ đối với tín hiệu clock như độ trễ đường truyền, thời gian đáp ứng của các phần tử logic. Ví dụ về điều chỉnh trượt đồng hồ được miêu tả trong hình 3-19.

Hình 3-19 Sử dụng DCM điểu chỉnh trượt đồng hồ

Hiện nay hai công nghệ chính được sử dụng để điều chỉnh trượt đồng hồ đó là:

 Sử dụng vòng khóa pha PLL

 Sử dụng vòng khóa độ trễ DLL

Một phần của tài liệu ĐỒ ÁN Nghiên cứu kỹ thuật nén ảnh theo phương pháp phân mảnh (Fractal Image Coding) (Trang 51 - 66)

Tải bản đầy đủ (PDF)

(86 trang)