Chương 1: Tổng quan: Chương này trình bày lý do chọn đề tài, các mục tiêu và giới hạn của đề tài. Chương 2: Cơ sở lý thuyết: Giới thiệu chuẩn truyền I2C, Bus APB và RTL Design sử dụng Verilog. Chương 3: Mô hình hệ thống: Trình bày sơ đồ khối của hệ thống, các chức năng của từng 1 Luan van khối Chương 4: Thiết kế chi tiết: Phân tích, thiết kế, thi công từng khối của hệ thống. Chương 5: Kết quả và đánh giá: Bao gồm việc thực hiện mô phỏng mạch và kiểm tra hoạt động thực tế trên kit FPGA.
Chương 6: Kết luận và hướng phát triển. 2 Luan van CHƯƠNG 2 CƠ SỞ LÝ THUYẾT 2.1 Giới thiệu I2C, viết tắt của cụm từ “Inter – Integrated Circuit”, là một chuẩn bus nối tiếp được phát triển bởi hãng sản xuất linh kiện điện tử Philips. Ban đầu, chuẩn này chỉ được dùng trong các linh kiện điện tử của Philips. Sau đó, do tính ưu việt và đơn giản của nó, I2C đã được chuẩn hóa và sử dụng rộng rãi trong các module truyền thông nối tiếp của vi mạch tích hợp ngày nay [6-7].
I2C đã trở thành chuẩn công nghiệp được ứng dụng trong các giao tiếp công nghiệp, ngoài Philips còn có một vài tên tuổi cũng sử dụng chuẩn công nghiệp trong các sản phầm của mình như: Texas Instrument (TI), Analog Device, Maxim-Dallas, National Semiconductor, …Đồng thời bus I2C cũng được sử dụng làm bus giao tiếp ngoại vi cho nhiều loại IC khác nhau như Vi điều khiển 8051, ARM, AVR, EEPROM, bộ chuyển đổi tương tự số (ADC), số tương tự (DAC, chip nhớ như RAM tĩnh (Static RAM), các IC điều khiển LED, LCD, … 2.2 Đặc điểm truyền nhận theo giao thức I2C: 2.1 Đặc điểm giao tiếp Một giao tiếp I2C gồm có 2 dây: Serial Data (SDA) và Serial Clock (SCL). SDA là đường truyền dữ liệu 2 hướng, còn SCL là đường truyền xung đồng hồ và chỉ theo một hướng. Mỗi dây SDA và SCL đều được nối với dương nguồn qua điện trở kéo lên (pull-up- register) do các chân giao tiếp I2C của các thiết bị ngoại vi thường ở dạng open-drain hay open-collector. Giá trị của điện trở này thường trong khoảng 1k𝛺 đến 4.7k𝛺 tùy thuộc vào thiết bị [6].1: Sơ đồ giao tiếp các thiết bị theo chuẩn I2C [7].
Trong quá trình giao tiếp, mỗi thiết bị kết nối trên bus I2C đều được đánh một giá trị địa chỉ riêng biệt (do nhà sản xuất quy định), điều này giúp việc truyền nhận không bị nhầm lẫn mặc dù có nhiều thiết bị cũng kết nối trên một bus. Mỗi thiết bị có thể hoạt động như là thiết bị nhận dữ liệu hay có thể vừa truyền vừa nhận. Hoạt động truyền hay nhận còn tùy 3 Luan van thuộc vào việc thiết bị đó là chủ (Master) hay tớ (Slave). Trên một bus I2C thì quyền điều khiển thuộc về Master.
Master nắm vai trò tạo xung đồng hồ cho toàn hệ thống, điều khiển quá trình khởi tạo cũng như kết thức giao tiếp và quyết định quá trình đọc hoặc ghi giữa các thiết bị. Về dữ liệu truyền trên bus I2C, một bus I2C chuẩn truyền 8‐bit dữ liệu có hướng trên đường truyền với tốc độ là 100Kbps – Chế độ chuẩn (Standard mode), tốc độ truyền có thể lên tới 400Kbps – Chế độ nhanh (Fast mode), 1Mbps và cao nhất là 3,4Mbps – Chế độ cao tốc (High‐speed mode). Quá trình truyền nhận giữa một Master và một Slave trên bus I2C được tiến hành như sau: +Thiết bị Master xác định địa chỉ của Slave cần giao tiếp. +Thiết bị chủ gửi một xung START, liền sau đó gửi địa chỉ của thiết bị tớ đó cùng với yêu cầu truyền hay nhận dữ liệu tương ứng.
+Thiết bị tớ nhận thấy địa chỉ trùng với địa chỉ của mình thì xác nhận bằng 1 xung ACK. +Quá trình truyền nhận dữ liệu bắt đầu, bên nhận dữ liệu sẽ kết thúc mỗi byte nhận bằng việc trả ACK. +Thiết bị chủ gửi một xung STOP, kết thúc quá trình truyền nhận.2 Định dạng khung dữ liệu Hình 2.2: Định dạng khung dữ liệu theo chuẩn I2C [8]. Dữ liệu trên bus I2C được truyền theo từng bit một, tại mỗi sườn dương của clock trên dây ACK.
Dữ liệu thay đổi trên SDA theo sườn xuống của clock. Mỗi byte dữ liệu có độ dài 8-bit, bit MSB được truyền đầu tiên trong byte, theo sau là các bit có trọng số thấp dần. Sau 8-bit dữ liệu, thiết bị nhận nếu đã nhận đủ 8-bit sẽ kéo SDA xuống mức thấp ở SCL thứ 9 tạo một xung ACK. Thiết bị truyền sau khi nhận được xung ACK sẽ tiếp tục truyền hoặc kết thúc.
Trường hợp không nhận đủ 8-bit dữ liệu, thiết 4 Luan van bị nhận sẽ gửi một xung NOT-ACK (SDA ở mức cao tại SCL thứ 9), từ đó Master sẽ gửi tín hiệu STOP hay RESTART.3 Điều kiện START và STOP Khi muốn thiết lập hay kết thúc một quá trình truyền nhận thì Master đều phải gửi tín hiệu START hay STOP để báo cho Slave biết. Ban đầu, khi chưa giao tiếp, cả SDA và SCL đều ở mức cao, báo cho thiết bị biết đường truyền đang ở chế độ rỗi. Điều kiện START: một sự chuyển đổi trạng thái từ cao xuống thấp trên đường SDA trong khi đường SCL đang ở mức cao (cao = 1; thấp = 0) báo hiệu một điều kiện START. Điều kiện STOP: Một sự chuyển đổi trạng thái từ mức thấp lên cao trên đường SDA trong khi đường SCL đang ở mức cao.3: Điều kiện START Hình 2.4: Điều kiện STOP Cả hai điều kiện START và STOP đều được tạo ra bởi Master.
Sau tín hiệu START, bus I2C coi như đang trong trạng thái làm việc (busy). Bus I2C sẽ rỗi, sẵn sàng cho một giao tiếp mới sau tín hiệu STOP từ phía Master. Sau khi có một điều kiện START, trong quá trình giao tiếp, khi có một tín hiệu RESTART thay vì một tín hiệu STOP thì bus I2C vẫn tiếp tục trong trạng thái bận.4 Địa chỉ thiết bị Mỗi thiết bị tham gia vào bus I2C đều có một địa chỉ duy nhất do nhà sản xuất qui định để tránh gây nhầm lẫn trên đường truyền. Độ dài byte địa chỉ là 7-bit, do đó, sẽ có tối đa 128 thiết bị trên một bus I2C.
Khi thiết bị chủ muốn giao tiếp với ngoại vi nào trên bus I2C, nó sẽ gửi 7-bit địa chỉ của thiết bị đó ra bus ngay sau xung START. Byte đầu tiên được gửi sẽ bao gồm 7-bit địa chỉ và một bít thứ 8 điều khiển hướng truyền. Riêng bit điều khiển hướng sẽ quy định chiều truyền dữ liệu. Nếu bit này bằng “0” có nghĩa là byte dữ liệu tiếp theo sau sẽ được truyền từ chủ đến tớ, còn ngược lại nếu bằng “1” thì các byte theo sau byte đầu tiên sẽ là dữ liệu từ thiết bị tớ gửi đến thiết bị chủ [7].5 Chế độ Master-Slave 5 Luan van Việc truyền nhận dữ liệu giữa Master và Slave có thể thực hiện theo một trong hai hướng truyền trên đường dữ liệu SDA: Master truyền-Slave nhận hoặc Slave truyền-Master nhận.
Quá trình được quyết định theo bit 8 (bit R/W) trong byte truyền đầu tiên từ phía Master. Trong đó, Master luôn là thiết bị tạo xung đồng hồ SCL trong suốt quá trình truyền. - Quá trình master truyền dữ liệu đến slave: +Master tạo tín hiệu START, bắt đầu quá trình truyền dữ liệu. +Master gửi byte đầu tiên gồm 7 bit địa chỉ của Slave cần giao tiếp, và bit thứ 8 R/W = “0” và đợi xung phản hồi ACK từ Slave.
+Nhận được ACK báo đúng địa chỉ từ Slave, Master bắt đầu truyền dữ liệu theo từng bit một. Kết thúc mỗi byte 8 bit thì chờ xung ACK phản hồi. Số lượng byte truyền không giới hạn. +Muốn kết thúc quá trình truyền thì Master gửi một bit STOP.5: Định dạng dữ liệu trong chế độ Master truyền [6].
- Quá trình Master nhận dữ liệu từ Slave: +Master tạo tín hiệu START, bắt đầu quá trình truyền dữ liệu. +Master gửi byte đầu tiên gồm 7 bit địa chỉ của Slave cần giao tiếp, và bit thứ 8 R/W = “1” và đợi xung phản hồi ACK từ Slave. +Slave bắt đầu truyền dữ liệu theo từng bit một, sau mỗi byte 8 bit thì chờ xung ACK phản hồi từ Master. Số lượng byte truyền không giới hạn.
+Muốn kết thúc quá trình truyền thì Master gửi một bit STOP. 6 Luan van Hình 2.6: Định dạng dữ liệu trong chế độ Master nhận [6].1 Giới thiệu Giao thức APB (Advanced Peripheral Bus) là một trong những giao thức của bộ giao tiếp AMBA (Advanced Microcontroller Bus Architecture). Bộ giao tiếp AMBA là một kiến trúc bus hệ thống được xây dựng, phát triển và ứng dụng rộng rãi trong các vi điều khiển ARM. Trong đó, APB được xác định là một giao thức chi phí thấp để tối ưu hóa việc tiêu hao năng lượng và giảm mức độ phức tạp của giao tiếp.
Giao thức APB phù hợp để kết nối với các ngoại vi công suất thấp như UART, I2C, SPI,…. Ngoài ra, AMBA còn bao gồm nhiều giao tiếp khác như AXI, ASB, AHB [9].7: Minh họa về kế nối của APB bus. 7 Luan van Hình 2.8: Minh họa hệ thống SOC sử dụng APB bus và module I2C. Các kiến trúc bus tốc độ cao bao gồm ASB (Advanced System Bus) và AHB (Advanced High-performance Bus), một hệ thống chỉ sử dụng một trong hai.
APB Bridge có vai trò tương tác với các bus tốc độ cao trên. Các module ngoại vi để giao tiếp được với bus phải có mạch giao tiếp, mạch này thường còn được gọi là APB Slave, mạch điều khiển bus từ phía APB Bridge gọi là APB Master. Giao thức APB thực hiện thay đổi dữ liệu tại cạnh lên của xung đồng hồ, điều này nhằm đơn giản hóa việc tích hợp các ngoại vi APB vào bất kì thiết kế nào. Mỗi quá trình truyền nhận theo giao thức APB cần ít nhất 2 chu kỳ của xung đồng hồ.
Bus APB có các tín hiệu như sau [2]: -PCLK: tín hiệu clock đồng bộ hoạt động theo cạnh lên. -PADDR: địa chỉ thanh ghi được truy xuất. -PWRITE: tín hiệu cho phép ghi. -PSEL: tín hiệu cho phép.
-PENABLE: tín hiệu báo pha ENABLE của một truy xuất đọc hoặc ghi. -PWDATA: dữ liệu ghi. -PRDATA: dữ liệu đọc.2 Những đặc trưng cơ bản của AMBA 2 APB Các cập nhật dữ liệu của APB tại mọi phiên bản đều được thực thi tại sườn lên của xung clock, điều này giúp việc đơn giản hóa việc truyền nhận, đồng thời cũng giúp cho APB được dễ dàng tích hợp vào các ngoại vi. Tại phiên bản mới nhất của APB (AMBA 3 APB), việc thực hiện một giao tiếp có thể được thực hiện trong nhiều chu kỳ của xung clock, tuy nhiên, việc truyền nhận luôn phải đảm bảo được thực hiện ít nhất trong hai chu kỳ xung clock [10].