Thiết kế theo kiểu 1 (thiết kế theo mô hình máy moore)

Một phần của tài liệu Nghiên cứu tìm hiểu công nghệ FPGA trong thiết kế mạch điện tử (Trang 60)

Có vài ph−ơng pháp có thể đ−ợc hình thành để thiết kế một FSM. Chúng ta sẽ mô tả chi tiết một ví dụ mẫu mà mạch hoàn toàn đ−ợc cấu trúc và dễ dàng áp dụng.

Trong đó phần mạch dãy của máy trạng thái sẽ tách biệt với phần mạch tổ hợp của nó Tất cả các trạng thái của máy luôn luôn đ−ợc khai báo rõ ràng bằng cách sử dụng kiểu

dữ liệu liệt kê.

Thiết kế phần mạch dy:

Trên hình trên, các flip-flop nằm ở phần mạch dãy. Các đầu vào từ bên ngoài của phần này là các tín hiệu clock và reset. Các tín hiệu này đ−ợc nối với các Flip-flop. Một đầu vào khác (bên trong) là trạng thái tiếp theo. Đầu ra duy nhất của phần này là trạng thái hiện tại. Để xây dựng cho phần mạch dãy này, ta cần sử dụng cấu trúc PROCESS. Trong cấu trúc của PROCESS chúng ta co thể sẽ sử dụng các câu lệnh tuần tự nh− lệnh IF, WAIT, CASE, LOOP.

Khuôn mẫu thiết kế của phần mạch dãy sẽ nh− sau:

Mã chỉ ra ở đây là rất đơn giản. Nó chỉ chứa một tín hiệu reset đồng bộ. Tín hiệu reset này sẽ xác định trạng thái khởi đầu của hệ thống, sau đó là l−u trữ đồng bộ trạng thái tiếp theo (tại s−ờn d−ơng đông hồ),và đ−a ra đầu ra của phần mạch dãy trạng thái hiện tại.

PROCESS (reset, clock) BEGIN

IF reset = ‘1’ THEN

Trang_thai_hien_tai <= Trang_thai_0 ; ELSIF (clock ‘EVENT and clock = ‘’) THEN

Trang_thai_hien_tai <= Trang_thai_tiep_theo;

END IF ; END PROCESS ;

Việc thiết kế cho phần mạch dãy này thì đơn giản vì nó là một chuẩn cơ bản, và số l−ợng các thanh ghi là tối thiểu. Chúng ta biết rằng số l−ợng các flip – flop sẽ tính dựa vào số bits cần thiết để mã hoá tất cả các trạng thái của FSM. Bởi vậy nếu mẫu đ−ợc mã hoá theo cách mặc định (mã hoá nhị phân) thì, chúng ta sẽ cần log2n Flip-flop, với n là số trạng thái.

Thiết kế phần mạch tổ hợp:

PROCESS (input, pr_state) BEGIN CASE pr_state IS WHEN state0 => IF (input = ...) THEN output <= <value>; nx_state <= state1; ELSE ... END IF; WHEN state1 => IF (input = ...) THEN output <= <value>; nx_state <= state2; ELSE ... END IF; WHEN state2 => IF (input = ...) THEN output <= <value>; nx_state <= state2; ELSE ... END IF; ... END CASE; END PROCESS;

*Mẫu máy trạng thái cho kiểu thiết kế 1:

D−ới đây là khuôn mẫu hoàn chỉnh về kiểu thiết kế 1:

LIBRARY ieee;

USE ieee.std_logic_1164.all; ENTITY <entity_name> IS PORT ( input: IN <data_type>;

reset, clock: IN STD_LOGIC; output: OUT <data_type>);

END <entity_name>;

ARCHITECTURE <arch_name> OF <entity_name> IS TYPE state IS (state0, state1, state2, state3, ...);

SIGNAL pr_state, nx_state: state; BEGIN

--- Phần mạch dãy: --- PROCESS (reset, clock)

BEGIN

IF (reset='1') THEN pr_state <= state0;

ELSIF (clock'EVENT AND clock='1') THEN pr_state <= nx_state;

END IF; END PROCESS;

---Phần mạch tổ hợp: --- PROCESS (input, pr_state)

BEGIN CASE pr_state IS WHEN state0 => IF (input = ...) THEN output <= <value>; nx_state <= state1; ELSE ... END IF; WHEN state1 => IF (input = ...) THEN output <= <value>; nx_state <= state2; ELSE ... END IF; WHEN state2 => IF (input = ...) THEN output <= <value>; nx_state <= state3; ELSE ...

END IF; ... END CASE; END PROCESS; END <arch_name>; 3.8.3. Thiết kế kiểu 2. (adsbygoogle = window.adsbygoogle || []).push({});

Nh− chúng ta thấy trong kiểu thiết kế 1 thì chỉ có trạng thái hiện tại đ−ợc l−u trữ. Tất cả các mạch nh− vậy sẽ đ−ợc tóm tắt nh− trong hình 3.8.6.1. Trong tr−ờng hợp này nếu mạch là máy Mealy (đầu ra của nó phụ thuộc vào đầu vào hiện tại), đầu ra có thể thay đổi khi đầu vào thay đổi (đầu ra không đồng bộ).

Trong nhiều ứng dụng, tín hiệu đ−ợc yêu cầu là đồng bộ, thì đầu ra sẽ chỉ cập nhật khi thay đổi s−ờn clock. Để tạo ra máy đồng bộ Mealy, đầu ra phải đ−ợc l−u trữ tốt.

Sơ đồ mạch kiểu 1 Sơ đồ mạch kiểu 2

Để thực hiện cấu trúc mới này, chúng ta cần có vài sự thay đổi so với thiết kế kiểu 1. Ví dụ chúng ta có thể sử dụng một tín hiệu thêm (nh− tín hiệu trung gian) để tính toán giá trị đầu ra (đoạn trên), nh−ng chỉ chuyển các giá trị của nó thành tín hiệu đầu ra khi sự kiện clock thay đổi (phần mạch dãy). Sự thay đổi này chúng ta sẽ thấy trong khuôn mẫu chỉ ra d−ới đây:

Khuôn mẫu máy trạng thái của thiết kế 2

LIBRARY ieee;

USE ieee.std_logic_1164.all;

--- ENTITY <ent_name> IS

PORT (input: IN <data_type>; reset, clock: IN STD_LOGIC; output: OUT <data_type>); END <ent_name>;

---

ARCHITECTURE <arch_name> OF <ent_name> IS TYPE states IS (state0, state1, state2, state3, ...); SIGNAL pr_state, nx_state: states;

SIGNAL temp: <data_type>; BEGIN

--- Phan mach day: --- PROCESS (reset, clock)

BEGIN

IF (reset='1') THEN pr_state <= state0;

ELSIF (clock'EVENT AND clock='1') THEN output <= temp;

pr_state <= nx_state; END IF;

END PROCESS;

--- Phan mach to hop: --- PROCESS (pr_state)

BEGIN

CASE pr_state IS

WHEN state0 =>

temp <= <value>;

IF (condition) THEN nx_state <= state1; ...

END IF; WHEN state1 =>

temp <= <value>;

IF (condition) THEN nx_state <= state2; ...

END IF; WHEN state2 =>

temp <= <value>; (adsbygoogle = window.adsbygoogle || []).push({});

IF (condition) THEN nx_state <= state3; ...

... END CASE; END PROCESS; END <arch_name>;

So sánh khuôn mẫu của thiết kế kiểu 2 với thiết kế kiểu 1, chúng ta thấy chỉ có một sự khác nhau duy nhất, đó là xuất hiện tín hiệu trung gian temp. Tín hiệu này sẽ có tác dụng l−u trữ đầu ra của máy. Chỉ cho các giá trị chuyển thành đầu ra khi khi có sự thay đổi sự kiện clock.

Ch−ơng 4 thiết kế mạch điện tử trên kit Xilinx Spartan 3E 4.1 Giới thiệu kit Xilinx Spartan 3E

4.1.1 Các thành phần chính của Kit

1. Xilinx XC3S500E Spartan-3E FPGA : linh kiện chính của KIT. 2. Xilinx 4 Mbit Platform Flash configuration PROM.

3. Xilinx 64-macrocell XC2C64A CoolRunner CPLD.

4. 64 MByte (512 Mbit) of DDR SDRAM, x16 data interface, 100+ MHz.

5. 16 MByte (128 Mbit) of parallel NOR Flash (Intel StrataFlash). 6. 16 Mbits of SPI serial Flash (STMicro).

7. 2-line, 16-character LCD screen. 8. PS/2 mouse or keyboard port. 9. VGA display port.

10. 10/100 Ethernet PHY (requires Ethernet MAC in FPGA). 11. Two 9-pin RS-232 ports (DTE- and DCE-style).

12. On-board USB-based FPGA/CPLD download/debug interface. 13. 50 MHz clock oscillator.

14. SHA-1 1-wire serial EEPROM for bitstream copy protection. 15. Hirose FX2 expansion connector.

16. Three Digilent 6-pin expansion connectors.

17. Four-output, SPI-based Digital-to-Analog Converter (DAC).

18. Two-input, SPI-based Analog-to-Digital Converter (ADC) with programmable-gain.

19. pre-amplifier.

20. ChipScope SoftTouch debugging port. 21. Rotary-encoder with push-button shaft. 22. Eight discrete LEDs.

23. Four slide switches.

4.1.2 Sơ đồ chân của XC3S500E

XC3S500E có kiểu chân BGA, 320 chân. Cách đánh số chân: Vị trí của 1 chân đ−ợc xác định theo qui tắc ma trận 2 chiều. Chiều ngang (dòng) là số từ 0 tới 18. Chiều dọc (cột) là chữ từ A tới V.

Ví dụ: chân A1, là chân ở dòng A, cột 1. Đây là chân GND của FPGA. Tài nguyên: 10000 logic cells, có 232 chân I/O cho ng−ời dùng tự định nghĩa.

4.1.3 Bộ tạo dao động trên KIT

Có 3 nguồn cập xung clk cho FPGA:

• Dùng thạch anh có sẵn 50 MHz trên board. Đầu ra của thạch anh nối với chân C9 của chip.

• Cấp xung clk thông qua chân cắm 8 pin trên board (hình 4.2).Đầu ra của thạch anh nối với chân B8 của chip.

• Cấp xung clk thông qua chân cắm SMA, chân cắm này chỉ nhận clk từ máy phát clk, không dùng trực tiếp thạch anh đ−ợc . Đầu ra clk nối với chân A10 của chip.

4.1.4 Các nút chuyển mạch, nút nhấn và led

Có 4 nút chuyển mạch theo thứ tự là : SW0, SW1, SW2, SW3 kết nối với chân t−ơng ứng của chip là : L13, L14, H18, N17 của chip FPGA. Để ý: đây là các chân đầu vào của FPGA. Trên Chip chỉ có 232 chân I/O tùy chọn. Khi các nút SWx (x =0-3) ON (bật lên) thì chân FPGA t−ơng ứng ở mức cao (3.3V) và ng−ợc lại.

Bốn nút nhấn theo thứ tự là BTN_EAST (phải), BTN_NORTH ( trên), BTN_SOUTH (d−ới), BTN_WEST (trái) kết nối t−ơng ứng với các chân H13, K14, V17, D18 , là các chân input của FPGA. Khi nhấn các nút trên thì chân t−ơng ứng với nó sẽ lên mức cao. Khi không nhấn, cần dùng 1 điện trở nội pull-down để tạo mức thấp. (bắt buộc).Nút Encoder : có 3 đầu ra: ROT_A, ROT_B, ROT_CENTER : nối với chân K18, G18, V16 của FPGA. Nút Encoder có 2 chức năng : Nh− nút nhấn : nhấn xuống sẽ đ−a chân V16 của FPGA lên mức cao. Xoay phải (hay trái) sẽ tạo xung encoder đầu ra t−ơng ứng .Cả 3 chân đầu ra của encoder điều cần dùng điện trở pull-up nội. (adsbygoogle = window.adsbygoogle || []).push({});

Tám Led (góc d−ới cùng bên phải) LD0, .., LD7 nối với 8 chân t−ơng ứng F9, E9, D11, C11, F11, E11, E12, F12 của FPGA. Đầu còn lại của các Led nối với GND thông qua điện trở 290 ohm.

4.1.5 Nguồn cấp

Tất cả các chân của FPGA điều có 2 lựa chọn nguồn cấp 2.5 v hoặc 3.3V thông qua jumper JP9. (cắm bên trái 2.5 V, cắm bên phải 3.3 V).

4.1.6 Nạp ch−ơng trình cho FPGA

Có 4 cách để nạp ch−ơng trình cho FPGA

• Nạp trực tiếp vào FPGA thông qua cổng JTAG hay cổng USB.

• Nạp vào Platform Flash PROM XCF04S (4Mbit), rồi cấu hình cho FPGA ở chế độ Master Serial Mode.

• Nạp vào serial Flash PROM ST Microelectronics (16 Mbit), rồi cấu hình cho FPGA ở chế độ SPI Mode.

• Nạp vào StrataFlash parallel PROM Intel (128 Mbit), rồi cấu hình cho FPGA ở chế độ BPI Up Mode hay BPI Down Mode.

Để thiết lập các chế nạp cho FPGA, ta set jumper JP 30. Mỗi lần thay đổi chế độ cấu hình phải nhấn nút PROG để restart lại cấu hình.

4.2 Tổng quan về cấu trúc SPARTAN - 3E

Các thành phần:

- Input/Output Blocks (IOBs) : các khối vào ra

- Configurable Logic Blocks (CLBs) : Đ−ợc cấu tạo từ Look-Up Tables (LUTs). - Block RAM : Hỗ trợ 16 Kb RAM trên mỗi Block RAM, số l−ợng các Block RAM tuỳ thuộc vào mỗi chip , với XC3S500E có 20 Block RAM.

- Multiplier Blocks : Khối nhân hai đầu vào 18 bit.

- Digital Clock Manager (DCM) Blocks khối điều khiển xung clk. - Interconnect : Các kết nối.

4.2.1. Input/Output Blocks (IOBs) :

Bao gồm các khối vào ra 2 chiều I/O và các khối đầu vào input path (không thể làm đầu ra ). Đầu vào là một khối chức năng có tác dụng làm trì hoãn tín hiệu tr−ớc khi nó đ−ợc đ−a vào các khối bên trong

Sau khi cấu hình cho FPGA, các chân không sử dụng theo mặc định đ−ợc thiết lập thành điện trở nội pull-down.

Cấp nguồn cho IOBs :

VCCO : Cấp nguồn cho đầu ra, tức điện thế đầu ra sẽ bằng với VCCO. Khoảng 3.3 V

VCCINT : Cấp nguồn cho các khối bên trong FPGA. Khoảng 1.2 V. VCCAUX : Nguồn hỗ trợ khoảng 2.5 V.

4.2.2 Configurable Logic Blocks (CLBs): Khối chức năng logic

Khối này thực hiện các chức năng logic và l−u trữ. Mỗi CLBs có 8 bảng tìm kiếm LUTs và 8 phần tử nhớ. LUTs là khối có chức năng thực hiện các biểu thức logic, ngoài ra nó có thể cấu hình thành một RAM 16 bit hay thanh ghi 16 bit. Phần tử nhớ là một khối mà có thể chỉ định để trở thành một Flip-Flop hay Latch.

XC3S500E có 1164 CLBs t−ơng ứng với 9312 LUTs và 9312 Flip-Flop. Logic Cell: Mỗi LUTs kết hợp với một phần tử nhớ gọi là một logic cell.

Block RAM: Khối nhớ

Các LUTs có thể cấu hình nh− RAM nh−ng RAM này th−ờng dùng nh− một buffer dữ liệu, trong khi các Block RAM th−ờng dùng cho việc chứa dữ liệu trong khi các Block RAM th−ờng dùng cho việc chứa dữ liệu có kích th−ớc lớn hơn. XC3S500E chứa 20 Block RAM. Mỗi Block RAM có thể chứa 18 Kbit dữ liệu.

Dedicated Multipliers: Bộ nhân chuyên dụng

Các bộ nhân đ−ợc đặt cùng với các Block RAM thành một khối . Bộ nhân hỗ trợ hai đầu vào và 18 bit đẩu ra 36 bit. Có thể ghép chồng các bộ nhân để tăng số đầu vào.

Digital clock Managers(DCMs): Bộ quản lý xung Clock (adsbygoogle = window.adsbygoogle || []).push({});

Bộ quản lý xung clock là một khối có 3 chức năng chính :

- Loại bỏ sự lệch xung clock( Clock – skew Elimination): giúp tăng tốc độ chuyển mạch

- Tổng hợp tần số (Frequency Synthesis): Giúp thay đổi tần số đầu ra xung clock. 2 _ 1 _ * Integer Integer CLK CLKOUT = IN

Trong đó Integer_1 và Integer_2 tuỳ chọn từ 1-32

- Dịch pha (Phase Shifting): thay đổi pha clock

Interconnect: Các kết nối

- Cung cấp các đ−ờng kết nối, các ma trận chuyển mạch để tạo thành mạng các đ−ờng tín hiệu giúp kết nối các thành phần với nhau.

4.3 Thiết kế một số mạch điện tử 4.3.1 Giới thiệu vi điều khiển PicoBlaze 4.3.1 Giới thiệu vi điều khiển PicoBlaze

Vi điều khiển PicoBlaze là vi điều khiển nhúng 8 bít có cấu RISC đ−ợc tối −u phát triển cho các họ FPGA Spartan 3, Virtex II và Virtex II Pro của Xilinx. Với vi điều khiển này chúng ta có thể thiết kế rất hiệu quả dựa trên nền vi điều khiển PicoBlaze và xử lý dữ liệu đơn giản. Vi điều khiển PicoBlaze đ−ợc tối −u về mặt hiệu suất và chi phí phát triển thấp nó chiếm khoảng 96 FPGA slices, hay chỉ 12.5% của XC3S50 FPGA và chiếm một phần rất nhỏ ở mức 0.3% của XC3S5000 FPGA . Bình th−ờng mỗi RAM của FPGA có thể l−u trữ tới 1024 câu lệnh ch−ơng trình và các lệnh này đ−ợc tự động load trong khi cấu hình FPGA khi đó Vi điều khiển PicoBlaze có thể hoạt động tử 44000 tới 100000 câu lênh trên giây (MIPS –million instructions per second) tuỳ thuộc vào họ FPGA đ−ợc sử dụng là loại gì và tốc độ của dòng đó.

Nhân của vi điều khiển PicoBlaze đ−ợc nhúng hoàn toàn trong FPGA và không cần một nguồn thêm nào. Đơn giản là các ngoại vi của Vi điều khiển PicoBlaze có thể tự do lựa chọn cho phù hợp với các mục đính đặc biệt,chức năng và yêu cầu về giá cả của sản phẩm cuối cùng. PicoBlaze đ−ợc nhúng vào d−ới dạng một mã nguồn VHDL vì thế có thể nhúng vào các đời FPGA sau này và do đó project của chúng ta sẽ có tính kế thừa cao. Đ−ợc nhúng trong FPGA vi điều khiển PicoBlaze làm giảm kích th−ớc mạch, giá thành và thời gian thiết kế.

PicoBlaze FPC đ−ợc hỗ trợ bởi một số công cụ phát triển phù hợp bao gồm assembler và môi tr−ờng đồ hoạ tích hợp IDE( intergrated development environment), graphical instruction set simulator và mã nguồn mở VHDL và khối mô phỏng. PicoBlaze đ−ợc hỗ trợ trong môi tr−ờng phát triển Xilinx System Generator hay ISE.

Vi điều khiển PicoBlaze có các đặc điểm sau:

• 16 thanh ghi dữ liệu chức năng chung có độ rộng 8 bit.

• L−u trữđ−ợc 1K lệnh trong ch−ơng trình có thê lâp trình đ−ợc trong chip và tự động nạp khi cấu hình FPGA hay khi khởi động FPGA.

• Khối tính toán logic (Arithmetic Logic Unit –ALU) với các cờ CARRY và ZERO.

• Một bảng RAM 64 byte.

• 256 đầu vào và 256 đầu ra dễ dàng có thể mở rộng thêm. • Automatic 31 location CALL/RETURN stack.

• Predictable performance, luôn luôn dùng 2 xung nhịp hệ thống cho một câu lệnh, có thểđạt tới 200 MHz hoặc 100 MIPS trong Virtex –II Pro FPGA.

• Đáp ứng ngắt nhanh; worst-case 5 clock cycles.

• Đ−ợc tối −u cho cấu trúc Spartan –3, Virtex II, và Virtex II Pro FPGA

Một phần của tài liệu Nghiên cứu tìm hiểu công nghệ FPGA trong thiết kế mạch điện tử (Trang 60)