Mở đầu, chúng ta sẽ đi tìm hiểu về các cơ sở lý thuyết liên quan đến việc quá trình nghiên cứu về chuẩn truyền thông giao tiếp SPI. Đây được xem là tiền đề cho việc thiết kế hay nghiên cứu về một vấn đề nào đó. Giới thiệu về FPGA FPGA là một loại mạch tích hợp cỡ lớn dùng cấu trúc mảng phần tử logic mà người dùng có thể lập trình được. FPGA cũng được xem như một loại vi mạch bán dẫn chuyên dụng ASIC, nhưng nếu so sánh FPGA với những ASIC đặc chế hoàn toàn hay ASIC thiết kế trên thư viện logic thì FPGA không đạt đựợc mức độ tối ưu như những loại này, hạn chế trong khả năng thực hiện những tác vụ đặc biệt phức tạp, tuy vậy FPGA ưu việt hơn ở chỗ có thể tái cấu trúc lại khi đang sử dụng, công đoạn thiết kế đơn giản do vậy chi phí giảm, rút ngắn thời gian đưa sản phẩm vào sử dụng [5].
FPGA chứa một loạt các khối logic có thể lập trình và một hệ thống phân cấp các kết nối có thể cấu hình lại cho phép các khối được kết nối với nhau. Các khối logic có thể được cấu hình để thực hiện các chức năng tổ hợp phức tạp hoặc hoạt động như các cổng logic đơn giản như AND và XOR. Trong hầu hết các FPGA, các khối logic cũng bao gồm các phần tử bộ nhớ , có thể là các flip-flop kết nối đơn giản hoặc các khối bộ nhớ hoàn chỉnh hơn. Nhiều FPGA có thể được lập trình lại để thực hiện các chức năng logic khác nhau, cho phép tính toán có thể cấu hình lại linh hoạt như được thực hiện trong phần mềm máy tính.
Kiến trúc FPGA Hình 1.1: Kiến trúc phần cứng của một FPGA Mỗi chip FPGA được tạo thành từ một số lượng tài nguyên hữu hạn được xác định trước với các kết nối có thể lập trình để triển khai mạch kỹ thuật số có thể cấu hình lại và các khối I/O để cho phép mạch truy cập các thiết bị bên ngoài. Thông số kỹ thuật tài nguyên FPGA thường bao gồm số lượng khối logic có thể định cấu hình, số khối logic chức năng cố định như số nhân và kích thước của tài nguyên bộ nhớ như RAM. Trong số nhiều thông số kỹ thuật của FPGA, chúng thường là thông số quan trọng nhất khi lựa chọn và so sánh các FPGA cho một ứng dụng cụ thể. Sơ đồ phát triển phần mềm của hệ thống FPGA Hình 1.2: Sơ đồ khối phần mềm một hệ thống FPGA Để có thể thực hiện một hệ thống FPGA từ ý tưởng đến khi có thể chạy được trên FPGA KIT thì đầu tiên phải có HDL file, sau đó ánh xạ thành code RTL để sử dụng phần mềm mô phỏng tổng hợp code cho ra các mức logic gate, từ đó phần mềm sẽ phân tích và chạy mô phỏng để cho ra các thông số về timing, function của mạch qua đó đánh giá được thời gian trễ và tính linh động của mạch, cuối cùng đổ xuống KIT FPGA để chạy [5].
Khối logic Kiến trúc FPGA phổ biến nhất bao gồm một mảng các khối logic, I/O và các kênh định tuyến. Tất cả các kênh định tuyến có cùng độ rộng (số lượng dây). Nhiều miếng đệm I/O có thể vừa với chiều cao của một hàng hoặc chiều rộng của một cột trong mảng.3: Kiến trúc khối logic của FPGA Một mạch ứng dụng phải được ánh xạ thành FPGA với đầy đủ tài nguyên. Trong khi số lượng CLB/LAB và I/Os cần thiết có thể dễ dàng xác định từ thiết kế, số lượng đường dẫn định tuyến cần thiết có thể thay đổi đáng kể ngay cả giữa các thiết kế có cùng số lượng logic [6].
Thanh ghi dịch 1. Phần tử nhớ Phần tử nhớ hay còn gọi là Flip-Flop là một mạch điện tử được sử dụng trong các kỹ thuật vi mạch điện tử với mục đích lưu trữ các thông tin trạng thái tín hiệu (Bit) của một hoặc nhiều ngõ vào và cho kết quả ở ngõ ra. Đây là yếu tố cơ bản lưu trữ trong logic tuần tự. Với sự phát triển của kỹ thuật thì ngày nay các phần tử nhớ được ưu tiên sử dụng là Flip-Flop D vì có thiết kế đơn giản, dễ đồng bộ.4: Flip-Flop D 17 Ngõ vào dữ liệu D (Data): giá trị logic hay trạng thái chính cần chốt.
Ngõ vào S (Start) có chức năng cho phép FF_D hoạt động. Ngõ vào R (Reset) có chức năng đặt lại giá trị cho 𝑄 trong FF_D về trị logic 0 và 𝑄̅ về trị logic 1. Ngõ vào clock hay nhịp đồng bộ CLK: Có ở các Flip-flop cần hoạt động đồng bộ. Flip-flop thực hiện chức năng chính của nó vào thời điểm sườn xung clock chuyển từ 0 lên mức cao.
Ngõ ra FF-D là 𝑄 và 𝑄̅ là 2 giá trị nghịch đảo của nhau.2 Thanh ghi dịch sử dụng Flip-Flop D Thanh ghi dịch là mạch được lập ra bằng chuỗi các flip-flop D đồng bộ, có kết nối xác định để sau mỗi nhịp clock thì mảng bit nhớ dịch chuyển.5: Thanh ghi dịch sử dụng 3 phần tử nhớ Chuỗi các flip-flop kiểu D đồng bộ chia sẻ chung xung nhịp clock, trong đó ngõ ra của flip-flop này được kết nối tới ngõ vào dữ liệu của flip-flop kế tiếp trong chuỗi. Kết quả là tại mỗi khi clock ở ngõ vào nhịp thay đổi, mảng bit nhớ trong mạch dịch một bước, dữ liệu ở ngõ vào ngõ vào dữ liệu được dịch vào mảng, còn dữ liệu cuối cùng thì dịch ra. Giới thiệu về SPI SPI – Serial Peripheral Interface – hay còn gọi là giao diện ngoại vi nối tiếp, được phát triển bởi hãng Motorola. SPI là chuẩn đồng bộ nối truyền dữ liệu ở chế độ full - duplex hay gọi là "song công toàn phần".
Nghĩa là tại một thời điểm có thể xảy ra đồng thời quá trình truyền và nhận dữ liệu. 18 Các thiết bị giao tiếp qua SPI có quan hệ Master - Slave. Master là thiết bị điều khiển (thường là vi điều khiển), còn Slave (thường là cảm biến, màn hình hoặc chip nhớ) nhận lệnh từ master. Cấu hình đơn giản nhất của SPI là hệ thống một Master giao tiếp với một Slave, nhưng một Master có thể điều khiển nhiều hơn một Slave [7].
SPI là một chuẩn giao tiếp đồng bộ, bất cứ quá trình nào cũng đều được đồng bộ với xung clock sinh ra bởi thiết bị Master nên không cần phải lo lắng về tốc độ truyền dữ liệu, từ đó tốc độ được cải thiện hơn. Lợi ích duy nhất của SPI là dữ liệu có thể được truyền mà không bị gián đoạn. Bất kỳ số lượng bit nào cũng có thể được gửi hoặc nhận trong một luồng liên tục. Với I2C và UART, dữ liệu được gửi dưới dạng gói, giới hạn ở một số bit cụ thể.
Điều kiện bắt đầu và dừng xác định điểm bắt đầu và kết thúc của mỗi gói, do đó dữ liệu bị gián đoạn trong quá trình truyền. SPI thường được sử dụng giao tiếp với bộ nhớ EEPROM, RTC (Đồng hồ thời gian thực), IC âm thanh, các loại cảm biến như nhiệt độ và áp suất, thẻ nhớ như MMC hoặc thẻ SD hoặc thậm chí các bộ vi điều khiển khác [8]. Cấu tạo của SPI Hình 1.6: Sơ đồ khối giao thức SPI Sử dụng 4 đường giao tiếp nên đôi khi được gọi là chuẩn truyền thông “4 dây”. 4 đường đó là: 19 - SCK (Serial Clock): Thiết bị Master tạo xung tín hiệu SCK và cung cấp cho Slave.
Xung này có chức năng giữ nhịp cho giao tiếp SPI. Mỗi nhịp trên chân SCK báo 1 bit dữ liệu đến hoặc đi → Quá trình ít bị lỗi và tốc độ truyền cao. - MISO (Master Input Slave Output): Tín hiệu truyền bởi thiết bị Slave và nhận bởi thiết bị Master. Đường MISO phải được kết nối giữa 2 thiết bị Master và Slave.
- MOSI (Master Output Slave Input): Tín hiệu truyền bởi thiết bị Master và nhận bởi thiết bị Slave. Đường MOSI phải được kết nối giữa 2 thiết bị Master và Slave. - SS (Slave Select): Chọn thiết bị Slave cụ thể để giao tiếp. Chân này đôi khi còn được gọi là CS (Chip Select).
Hoạt động của SPI Ban đầu Master ra tín hiệu xung nhịp từ chân CLK truyền tới cho Slave để có thể đồng bộ hóa quá trình truyền nhận dữ liệu, tiếp theo Master chuyển chân SS / CS sang trạng thái điện áp thấp, điều này sẽ kích hoạt Slave để sẵn sàng trao đổi dữ liệu. Sau đó Master gửi dữ liệu từng bit một tới slave dọc theo đường MOSI. Slave đọc các bit khi nó nhận được. Cuối cùng nếu cần phản hồi, slave sẽ trả lại dữ liệu từng bit một cho master dọc theo đường MISO.
Master đọc các bit khi nó nhận được. Khung truyền SPI Mỗi thiết bị Master hoặc Slave đều có một thanh ghi dữ liệu 8 bits. Quá trình truyền nhận giữa Master và Slave xảy ra đồng thời sau 8 chu kỳ đồng hồ, một byte dữ liệu được truyền theo cả 2 hướng. Quá trình trao đổi dữ liệu bắt đầu khi Master tạo 1 xung clock từ bộ tạo xung nhịp (Clock Generator) và sử dụng chân SS để chọn Slave muốn giao tiếp.
Cứ 1 xung clock, Master sẽ gửi đi 1 bit từ thanh ghi dịch (Shift Register) của nó đến thanh ghi dịch của Slave thông qua đường MOSI. Đồng thời Slave cũng gửi lại 1 bit đến cho Master qua đường MISO. Như vậy sau 8 chu kỳ clock thì hoàn tất việc truyền và nhận 1 byte dữ liệu. Dữ liệu của 2 thanh ghi được trao đổi với nhau nên tốc độ trao đổi diễn ra nhanh và hiệu quả.7: Sơ đồ nguyên lý truyền nhận dữ liệu SPI Thông thường, thanh ghi dịch sẽ không thể truy cập trực tiếp được.
Nếu cần truyền dữ liệu thì sẽ ghi dữ liệu vào thanh ghi đệm. Vì vậy, dữ liệu sẽ tự động được ghi vào thanh ghi dịch khi ở trạng thái nghỉ và quá trình truyền sẽ bắt đầu.8: Sơ đồ nguyên lý chi tiết sử dụng thanh ghi đệm Tương tự, dữ liệu nhận được trong thanh ghi được tự động chuyển sang thanh ghi đệm sau khi quá trình nhận hoàn tất. Nên có thể dễ dàng đọc, do đó thanh ghi bộ đệm sẽ tránh được tất cả các trục trặc có thể xảy ra nếu cố gắng đọc hoặc ghi trực tiếp thanh ghi dịch trong khi quá trình truyền đang diễn ra. Các chế độ hoạt động SPI có 4 chế độ hoạt động phụ thuộc vào cực của xung giữ (Clock Polarity – CPOL) và pha (Phase - CPHA).
CPOL dùng để chỉ trạng thái của chân SCK ở trạng thái nghỉ. Chân SCK giữ ở mức cao khi CPOL=1 hoặc mức thấp khi CPOL=0. CPHA dùng để chỉ 21 các dữ liệu được lấy mẫu theo xung.