3.3.1 Tổng hợp mạch logic
1.Tổng hợp bằng sơ đồ
Maxplus II, Quartus II, ISE… đã làm cho việc thiết kế được dễ dàng hơn. Các thiết kế được mô tả dễ dàng và nhanh chóng bằng việc sử dụng các ngôn ngữ mô tả phần cứng như Verilog, VHDL hay với một đóng gói từ các sơ đồ nguyên lý (thiết kế bằng đồ hoạ). Việc lấy thiết kế từ các sơ đồ nguyên lý chính là phương pháp truyền thống để người thiết kế sử dụng để ấn định mảng, các cổng và các thiết bị lập trình được. Nó là các công cụ tổng hợp cho phép ấn định chính xác các cổng được yêu cầu và cách kết nối chúng như thế nào.
Dưới đây là các bước cơ bản tổng hợp mạch từ sơ đồ:
Hình 3.2: Các bước tổng hợp bằng sơ đồ
- Sau khi lựa chọn công cụ để tạo sơ đồ nguyên lý và thư viện các thiết bị, bắt đầu xây dựng mạch bằng cách tải các cổng mong muốn từ thư viện đã được chọn. Có thể dùng bất kỳ tổ hợp cổng cần thiết nào. Lúc này cần phải chọn một thư viện họ các thiết bị phân phối rõ ràng, nhưng có thể không cần phải biết thiết bị nào trong họ đó. Về cơ bản, chỉ sử dụng với sự quan tâm về đóng gói và tốc độ của chúng là đủ.
- Nối các cổng lại với nhau bằng việc sử dụng các mạng và dây nối. Hoàn tất việc điều khiển nối các cổng theo bất cứ cấu hình nào cần cho ứng dụng.
- Đưa thêm và đặt tên cho các bộ đệm đầu vào và đầu ra, các nhãn này sẽ chỉ rõ các chân trong gói vào/ra của thiết bị.
Hình vẽ dưới đây mô tả thiết kế với các thiết bị logic lập trình được (PLD).
Chức năng soạn thảo đồ hoạ (Graphic Editor) trong các phần mềm cho phép tạo và sửa các tệp thiết kế đồ hoạ (GDF) chứa các ký hiệu từ cơ bản đến các chức năng cao hơn như là megafunction, macrofunction. Một tệp Graphic Editor sẽ tổ chức các phần logic thiết kế theo các ký hiệu được sắp xếp theo các cấp độ khác nhau. Ta có thể chọn lựa chúng từ thư viện có chứa các loại phần tử logic cơ sở và các macrofunction hoặc sử dụng các ký hiệu được tạo lập và biểu diễn trong các tệp thiết kế khác hoặc bao gồm cả các tệp thiết kế.
Thường các phần mềm của Altera (Maxplus II, Quartus II), Xilinx (ISE) cho phép tạo ra các ký hiệu thay thế bất kỳ một tệp thiết kế nào đó, sau đó ta có thể thay đổi lại các tệp ký hiệu này cho phù hợp và dùng chúng trong tổ hợp các ký hiệu của các tệp biểu diễn. Khi một ký hiệu đã được sử đổi ta có thể dễ dàng cập nhật hoá chúng một cách dễ dàng trong bất cứ file Graphic Editor nào. Với chức năng Graphic Editor ta có thể kết nối các ký hiệu biểu diễn logic bằng các đường vẽ là các node hoặc các bus, chúng là các biểu diễn về sự kết nối bằng các đường đơn hay là bus thay thế cho một chùm các đường đơn lẻ. Bằng cách đặt tên cho các node và các bus ta có thể kết nối các ký hiệu logic chỉ bằng các tên. Hơn nữa ta có thể sử dụng chức năng mảng các thành phần cơ sở để biểu diễn các ký hiệu phức tạp là một nhóm các phần tử logic. Ta có thể đưa vào các thông số, loại linh kiện
và tài nguyên, chọn các node nguồn và đích cho việc phân tích thời gian. Khi dịch bản thiết kế thì chức năng Message Processor sẽ tự động định vị và sáng tỏ các lỗi trong các cửa sổ soạn thảo bằng đồ hoạ và ký hiệu.
2. Thiết kế bằng VHDL
Phương pháp soạn thảo bằng VHDL sáng sủa và thuận tiện và đặc biệt quan trọng trong những thiết kế lớn. Bài toán được chia nhỏ hay phân cấp, các thiết kế được thông số hoá và trên cơ sở đó việc ghép nối các phần thiết kế mềm dẻo, dễ dàng. Ưu điểm của nữa của VHDL là có thể mô tả mạch theo ý tưởng thuật toán nên rất gần với ý tưởng người dùng, các mô hình dùng trong VHDL giúp cho việc thể hiện ý tưởng đó.
Bắt đầu bằng mức hệ thống rồi chia nhỏ thiết kế đến tận mức mà thiết kế có thể được xây dựng từ những thành phần có sẵn (thư viện) của linh kiện.
Trong VHDL có 2 loại mô hình khác nhau là mô hình cấu trúc và mô hình hành vi. Thực tế nó là hai mức trừu tượng khác nhau và khi thiết kế hai loại mô hình này có thể được dùng đồng thời. Mô hình cấu trúc mô tả cấu trúc của hệ thống phân cấp còn mô hình hành vi mô tả chức năng.
Mô hình cấu trúc: Ta biểu diễn các thành phần của mạch bằng các ký hiệu đồ hoạ và các đường nối thể hiện quan hệ giữa chúng. Trong VHDL thì các ký hiệu này được thể hiện như một thực thể (entity). Thông thường thì các thực thể này được phân cấp. Mỗi thực thể có một kiến trúc mô tả hành vi của thực thể. Mỗi thực thể có thể có các thuộc tính kèm theo. Về cơ bản cấu trúc phần cứng là component, port và signal. Component là một khối xây dựng việc miêu tả phần cứng (cổng, chip hoặc bo mạch) tuỳ thuộc vào mức phần cứng được miêu tả. Port là cổng vào hoặc ra dữ liệu hoặc cũng có thể cả vào và ra của một thành phần.
Ví dụ một mô hình cấu trúc mạch ghép kênh 4 đầu vào mô tả đơn giản ở mức cổng:
ARCHITECTURE netlist OF mux IS COMPONENT andgate
PORT(a, b, c: IN BIT; d: OUT BIT); END COMPONENT;
COMPONENT inverter
PORT(in1: IN BIT; x: OUT BIT); END COMPONENT;
COMPONENT orgate
PORT(a, b, c, d: IN BIT); END COMPONENT;
SIGNAL s0_inv, s1_inv, x1, x2, x3, x4: BIT; BEGIN
U1: inverter(s0, s0_inv); U2: inverter(s1, s1_inv);
U3: andgate(a, s0_inv, s1_inv, x1); U4: andgate(b, s0, s1-inv, x2); U5: andgate(c, s0_inv, s1, x3); U6: andgate(d, s0, s1, x4);
U7: orgate(x2 => b, x1 => a, x4 => d, x3 => c, x => x); END netlist;
Mô tả này sử dụng một số thành phần mức thấp hơn để mô tả mô hình hành vi cho mạch mux.
Mô hình hành vi: diễn tả cách thức làm việc của phần tử hệ thống riêng biệt. Hành vi phần cứng là sự biến đổi dữ liệu và định thời gian. Giá trị của một điểm nào đó trong mạch có thể chuyển từ cao xuống thấp hay từ ‘1’ tới ‘0’ hoặc là các mức trừu tượng khác nhau như ‘’10’’ tới ‘’20’’ trong sự đáp ứng việc chuyển đổi dữ liệu ở một nới khac trong phần cứng. Tuy nhiên nó xảy ra trễ nhỏ do sự chuyển đổi. Tham gia vào mô hình hành vi
còn có các mô hình điều khiển, generics, block nhằm làm rõ hoạt động của thực thể. Ví dụ mạch Mux4 ở mức hành vi: LIBRARY IEEE; USER IEEE.std_logic_1164.ALL; ENTITY mux4 IS
PORT( i0, i1, i2, i3, a, b: IN std_logic; q: OUT std_logic);
END mux4;
ARCHITECTURE mux4 OF mux4 IS SIGNAL sel: INTERGER;
BEGIN
WITH sel SELECT
q <= i0 AFTER 10 ns WHEN 0, i1 AFTER 10ns WHEN 1, i2 AFTER 10ns WHEN 2. i3 AFTER 10ns WHEN 3,
‘X’ AFTER 10 ns WHEN OTHERS; sel <= 0 WHEN a= ‘0’ AND b= ‘0’ ELSE
1 WHEN a= ‘1’ AND b= ‘0’ ELSE 2 WHEN a= ‘1’ AND b= ‘1’ ELSE 3 WHEN a= ‘1’ AND b= ‘1’ ELSE 4;
END mux4;
Thư viện các phần tử logic: Khi nói đến công nghệ FPGA không thể không nói đến các phần tử logic, đây là công cụ không thể thiếu cho người lập trình FPGA. Để đơn giản khi tổng hợp, thiết kế một hệ thống lớn thì sử dụng các thư viện có sẵn (thư viện các mạch được thiết kế trước). Thư viện do người dùng thiết kế hoặc do hãng cung cấp với bản quyền cho phép.
3.3.2 Mô phỏng và kiểm tra thiết kế
Các thiết kế logic lập trình được kiểm tra bằng việc sử dụng một bộ mô phỏng mà thực chất nó là một chương trình phần mềm, chương trình này xác nhận tất cả các chức năng hoặc thời gian hoạt động của một mạch. Các định dạng tiêu chuẩn công nghiệp được sử dụng để đảm bảo một điều rằng các thiết kế có thể được tái sử dụng. Nếu như có sự thay đổi thư viện của nhà phân phối thì thiết kế đó chỉ cần biên dịch lại quá trình tổng hợp nếu là cần thiết. Lõi IP (lõi sở hữu trí tuệ) thường cho phép khuôn dạng HDL, chúng rất dẽ thay đổi và sử dụng với nhà phân phối thiết bị khác nhau. Sau khi hoàn thành các chi tiết của một thiết kế, cần phải biết liệu mạch có hoạt động đúng như mục đích của thiết kế hay không. Đây chính là mục đích của việc mô phỏng kiểm tra thiết kế.
Bộ mô phỏng sẽ mô phỏng đầy đủ thiết kế vì vậy cần phải cung cấp đầy đủ các thông tin của thiết kế thông qua các file netlist hoặc thông qua quá trình tổng hợp bằng phần mềm và các mẫu đầu vào cụ thể. Qua đó bộ mô phỏng sẽ xác định các đầu ra của mạch.
-Mô phỏng chức năng: Mô phỏng chức năng chỉ kiểm tra những tổ hợp đúng của 0 và 1 mà mạch nguyên lý đưa ra. Người thiết kế sẽ đưa ra chỉ dẫn sự mô phỏng về thời gian ngay sau đó theo các bước trong luồng thiết kế này. Nếu như có chức năng nào không đúng phải quay lại sơ đồ nguyên lý hoặc file .HDL và sửa đổi lại, tạo lại file netlist và sau đó chạy lại bộ mô phỏng. Trong thiết kế thường mất khoảng 50% thời gian vào việc sử đổi để đi qua bước này cho đến khi thiết kế đạt yêu cầu mong muốn. Việc dùng file .HDL có rất nhiều thuận lợi khi kiểm tra thiết kế: có thể mô phỏng trực tiếp từ file nguồn HDL, điều này cho phép bỏ qua thời gian tiêu tốn trong quá trình tổng hợp mà thời gian này thường được yêu cầu mỗi khi thay đổi thiết kế. Một thiết kế khi đã làm việc đúng , chạy công cụ tổng hợp
để tạo ra file Netlist cho các bước tiếp theo trong quá trình thiết kế.
-Thực thi trên thiết bị. Một file Netlist mô tả đầy đủ một thiết kế mà thiết kế này sử dụng thư viện các cổng của nhà phân phối. Đã đến lúc đưa file này vào trong một chip và điều này được xem như sự thực hiện trên thiết bị.
Trong suốt quá trình thiết kế được đồi hỏi chọn thiết bị đích, gói, cấp độ và các lựa chọn khác đối với thiết bị được ấn định. Thông thường quá trình biên dich kết thúc với một báo cáo kết quả bao hàm toàn bộ chương trình đã được thực hiện, thêm vào các cảch báo lỗi ở dạng bản liệt kê của thiết bị và việc sử dụng các đường vào/ra. Điều này giúp cho nguời thiết kế lựa chọn thiết bị đích tốt nhất.
-Lắp đặt trên thiết bị: Đối với họ CPLD thì bước này được gọi là lắp đặt, nghĩa là đưa thiết kế vào trong thiết bị đích (điều chỉnh cho phù hợp với nguồn tài nguyên của thiết bị đích). Các CPLD có cấu trúc cố định vì thế phần mềm cần lấy các cổng và các đường nối phù hợp với mạch thiết kế. Công việc này thường được xử lý rất nhanh bằng phần mềm. Một vấn đề khác có khả năng xảy ra là việc gán vị trí các chân vào/ra có thể được thực hiện tự động, tuy nhiên có thể thay đổi cho phù hợp với bản mạch.
3.3.3 Dịch thiết kế
Đa số các chương trình dịch có tính năng tự động cao, nó chuyển tệp thiết kế sang các dạng tệp khác phục vụ cho phần nạp trình linh kiện, mô phỏng và phân tích thời gian. Ngoài ra nó còn cho một số tệp báo cáo và các tệp tương thích với các hệ chương trình khác. Biên tập là một trong những phần chương trình quan trọng nhất của thiết kế hệ thống.
Chương trình biên tập liên kết các đầu vào của thiết kế và các ứng dụng ngoại vi - phần thiết kế ứng dụng đồ hoạ, dùng ký tự, dạng sóng, thiết
kế biểu tượng và quản lý tài nguyên của linh kiện - với các phần ứng dụng sau khi đã xử lý như bộ phân tích thời gian, bộ mô phỏng và bộ nạp chương trình. Chương trình biên tập cho phép dịch các tệp thiết kế theo các chuẩn khác nhau như VHDL, Verilog, OrCAD Schematic…
Bộ biên tập khi chạy sẽ thực hiện một chuỗi các thao tác để tạo ra các tệp chương trình với sự trợ giáp từ bên ngoài ít nhất, nó cho phép đặt nhiều chế độ dịch cho các thiết kế khác nhau.
Biên tập trước tiên lấy những thông tin định nghĩa cho các sự kết nối trong tệp thiết kế để kiểm tra lỗi của toàn bộ thiết kế. Sau khi tạo được sơ đồ của toàn bộ thiết kế nó liên kết, tổ hợp các tệp thiết kế lại với nhau vào trong một mặt bằng số liệu để xử lý chúng nhanh và hiệu quả.
Nếu một thiết kế không thể gán vào một linh kiện duy nhất thì chương trình biên tập tự động hay tuỳ theo yêu cầu thiết kế mà chia nhỏ thiết kế ra để gán chúng vào các linh kiện của cúng một họ. Ta có thể đặt chế độ để trình biên tập ghi ra các tệp cho các ứng dụng khác, bao gồm cả các tệp netlist cho mô phỏng về thời gian, mô phỏng chức năng, phân tích thời gian, và mô phỏng nhiều dự án…
Sau cùng trình biên dịch tạo ra một hay nhiều tệp phục vụ cho việc nạp trình linh kiện. Ta có thể mở tệp này hay thực hiện các ứng dụng khác nhau sau khi đã dịch thiết kế.
3.3.4 Tải nạp chương trình
Đây là bước tạo ra sản phẩm thiết kế. Tải chương trình có thể coi là tải thông tin xuống dễ thay đổi như SRAM. Thông tin cấu hình của thiết bị được nạp vào trong bộ nhớ của thiết bị. Luồng bit mà nó được truyền đi có chứa tất cả các thông tin định nghĩa logic và các đường nối của thiết kế và thông tin này khác nhau đối với mỗi thiết kế.
Thiết bị SRAM mất đi cấu hình của chúng khi mất nguồn vì vậy các luồng bit cần phải cất giữ ở đâu đó để giải quyết bài toán. Thông thường thông tin cấu hình của thiết bị được lưu trong ROM, đây là thành phần kết hợp với phần cứng mà nó nối từ máy tính tới bo mạch có chứa thiết bị đích.
Nạp chương trình dùng để lập chương trình cho các thiết bị logic có thể lập trình được nhưng không bị thay đổi như PROM. Việc nạp chương trình giống như chức năng tải chương trình, các thông tin về cấu hình vẫn còn sau khi mất nguồn. Các cách nạp chương trình (cấu hình):
1.Cấu hình nối tiếp bị động (Passive Serial Configuration-PS): Trong cấu hình nối tiếp bị động dữ liệu cấu hình được truyền từ một thiết bị nhớ như một thiết bị cấu hình hay một bộ nhớ flash tới FPGA trên chân DATA. Dữ liệu cấu hình được chốt vào trong FPGA trên sườn lên của DCLK. Dữ liệu cấu hình được chuyển một bit trên một chu kỳ đồng hồ.
2.Cấu hình nối tiềp tích cực (Active Serial Configuration_AS): Cấu hình AS có thể được thực hiện bởi việc sử dụng một thiết bị có cấu hình nối tiếp. Dữ liệu cấu hình được truyền tới FPGA trên chân DATA. Dữ liệu cấu hình này được đồng bộ với đầu vào DCLK và được truyền 1 bit trên một chu kỳ đồng hồ.
3. Cấu hình đồng bộ song song bị động (Passive Parallel Synchronous configuration_PPS): Cấu hình đồng bộ song song đồng bộ có thể được thực hiện bởi một thiết bị chủ thông minh, như một vi xử lý. Trong cấu hình PPS, dữ liệu cấu hình được chuyển từ một thiết bị nhớ như bộ nhớ Flash tới FPGA trên những chân DATA[7..0] và được đồng bộ bởi chân đầu vào DCLK trên sườn trước của DCLK, một byte dữ liệu cấu hình được chốt vào trong FPGA. Sườn xuống 8 xung tiếp theo của DCLK để xắp xếp thứ tự dữ liệu trong FPGA.
4. Cấu hình song song bị động nhanh (Fast Passive Parallel configuration _FPP): Cấu hình FPP có thể được thực hiện bằng cách sử dụng một cấu hình Altera được tăng cường hay một thiết bị chủ thông minh như là một bộ vi xử lý. Trong cấu hình FPP, dữ liệu cấu hình được truyền từ một thiết bị nhớ, như là một thiết bị có cấu hình tăng cường hay bộ nhớ