2.3 TỔNG QUAN VỀ GIAO THỨC UART 2.3.1 Giới thiệu về giao thức UART UART Universal Asynchronous Receiver-Transmitter – Bộ truyền nhận dữ liệu không đồng bộ là một giao thức dùng để giao
CƠ SỞ LÝ THUYẾT
TỔNG QUAN VỀ AMBA VÀ CHUẨN BUS APB
2.1.1 Giới thiệu về System on Chip
System on Chip (SoC) là một mạch tích hợp, bao gồm các thành phần như bộ xử lý, bộ nhớ và cổng ngoại vi được gộp lại trên một con chip Các thành phần này được kết nối thông qua một hệ thống bus, với tần số hoạt động khác nhau, dẫn đến việc thiết kế các bus tùy theo yêu cầu giữa các thành phần Những đặc điểm này tạo nên kiến trúc bus của hệ thống.
Kiến trúc bus đóng vai trò quan trọng trong việc xây dựng hệ thống trên chip (SoC), với các thành phần và bus được xác định rõ về vị trí kết nối Mỗi công ty thường có kiến trúc riêng trong thiết kế chip, và một số kiến trúc phổ biến hiện nay bao gồm AMBA của ARM và CoreConnect của IBM.
System on Chip (SoC) được phân loại theo mục đích sử dụng, bao gồm các loại như: SoC được thiết kế dựa trên bộ vi điều khiển, SoC xây dựng quanh bộ vi xử lý, và SoC phát triển dựa trên một ASIC.
AMBA, hay Advanced High-performance Bus, là một hệ thống đường truyền do ARM Limited phát triển, được thiết kế để kết nối và quản lý các khối chức năng trong System on Chip Đây là một tiêu chuẩn mở, bao gồm nhiều chuẩn con khác nhau với các tên gọi và mục đích sử dụng đa dạng.
Hình 2.1 Sơ đồ khối của một hệ thống triển khai theo AMBA
Các chuẩn ASB và AHB trong kiến trúc AMBA được áp dụng cho các giao tiếp yêu cầu hiệu suất cao và băng thông lớn, trong khi APB phục vụ cho các giao tiếp với tốc độ xử lý thấp như UART Để kết nối giữa hai chuẩn có tốc độ xử lý khác nhau, một cầu chuyển tiếp (Bridge) được sử dụng, giúp chuyển đổi tín hiệu và đồng bộ hóa hoạt động giữa chúng.
AMBA hỗ trợ phát triển thiết kế đa bộ xử lý với nhiều bộ điều khiển và thành phần dựa trên kiến trúc bus Nguyên tắc thiết kế bus AMBA bao gồm các tiêu chí quan trọng như sau [1, 2, 3]:
Tạo điều kiện thuận lợi cho việc phát triển các vi điều khiển nhúng ngay từ lần đầu tiên, sử dụng một hoặc nhiều CPU, GPU, hoặc bộ xử lý tín hiệu.
- Độc lập về công nghệ, cho phép tái sử dụng lõi IP và hệ thống trên các quy trình IC đa dạng,
Khuyến khích thiết kế hệ thống mô-đun nhằm nâng cao tính độc lập của bộ xử lý, đồng thời phát triển các thư viện IP hệ thống và ngoại vi có khả năng tái sử dụng.
- Giảm thiểu cơ sở hạ tầng silicon đồng thời hỗ trợ giao tiếp trên chip hiệu suất cao và tiêu thụ điện năng thấp
Qua từng năm, AMBA đã liên tục phát triển và cho ra mắt nhiều phiên bản mới nhằm đáp ứng nhu cầu ngày càng cao trong thiết kế chip Tổng số phiên bản của AMBA ngày càng đa dạng, phục vụ tốt hơn cho các yêu cầu kỹ thuật trong ngành công nghiệp bán dẫn.
5 phiên bản tính tới hiện tại bao gồm: AMBA, AMBA 1, AMBA 2, AMBA 3, AMBA 4 và AMBA5
Trong đó, thông số kỹ thuật của AMBA 4 có chuẩn bus như sau:
- AXI Coherency Extensions Lite (ACE-Lite)
- Advanced Extensible Interface 4 Lite (AXI4-Lite)
- Advanced Extensible Interface 4 Stream (AXI4-Stream v1.0)
- AMBA Low Power Interfaces (Q-Channel and P-Channel) Đặc biệt, chuẩn ACE được sử dụng rộng rãi trong các bộ xử lý Arm Cortex-A bao gồm Cortex-A7 và Cortex-A15.-
TỔNG QUAN VỀ BUS APB
2.2.1 Giới thiệu về bus APB
APB (Advanced Peripheral Bus) là bus ngoại vi nâng cao, thuộc kiến trúc giao thức AMBA APB được thiết kế để tối ưu hóa việc tiêu thụ điện năng và giảm độ phức tạp của giao diện.
APB hoạt động theo mô hình Master - Slave, trong đó slave đóng vai trò cầu nối giữa các tín hiệu nội bộ và thiết bị ngoại vi Với thiết kế không có ống dẫn, APB đơn giản và phù hợp cho việc giao tiếp với các thiết bị ngoại vi có tốc độ xử lý và băng thông tương đối thấp so với tốc độ xử lý bên trong.
Trong suốt các năm, APB đã trải qua nhiều phiên bản phát triển, bao gồm AMBA APB, AMBA 2 APB, AMBA 3 APB, AMBA 4 APB và AMBA 5 APB Các phiên bản này thường được gọi tắt, như AMBA 4 APB được gọi là APB4.
2.2.2 Mô tả các tín hiệu của bus APB4
Các tín hiệu của bus APB4 được mô tả theo bảng 2.1 [4]:
Bảng 2.1 Các tín hiệu của bus APB4
Tín hiệu Nguồn tín hiệu Mô tả
PCLK Bộ tạo xung hệ thống
Là xung hệ thống, trong đó cạnh lên của xung được sử dụng trong suốt quá trình giao tiếp APB
Tín hiệu reset tích cực mức thấp, có tác dụng khôi phục khối APB trở về trạng thái mặc định
PADDR APB master Địa chỉ, nhằm xác định địa chỉ của thanh ghi trong khối APB trong quá trình đọc và ghi dữ liệu
Mức độ bảo mật của giao tiếp có thể được phân loại thành ba cấp độ: bình thường, đặc quyền và an toàn Điều này cho phép xác định liệu giao tiếp đang thực hiện truy cập dữ liệu hay truy cập lệnh.
Tín hiệu lựa chọn Thiết bị chủ APB quyết định chọn thiết bị tớ APB nào thông qua tín hiệu này
Tín hiệu này cho biết chu kỳ thứ hai và các chu kỳ tiếp theo của quá trình giao tiếp APB
Tín hiệu quyết định quá trình giao tiếp là đọc hay là ghi, trong đó mức cao là ghi và mức thấp là đọc dữ liệu
Dữ liệu ghi trên bus được điều khiển bởi thiết bị APB master trong suốt quá trình giao tiếp khi PWRITE ở mức cao Bus này có khả năng mở rộng lên tới một giới hạn nhất định.
PSTRB APB master Tín hiệu quyết định làn byte nào của
PWDATA được cập nhật trong quá trình truyền ghi Mỗi bit của PSTRB tương ứng với 8 bit của PWDATA, như vậy với PSTRB[n] tương ứng với
Tín hiệu sẵn sàng từ phía slave, APB slave có thể quyết định kéo dài giao tiếp hay không thông qua tín hiệu này
Bus này được điều khiển bởi thiết bị APB slave được chọn trong suốt quá trình giao tiếp khi PWRITE ở mức thấp Bus có khả năng mở rộng lên tới 32 bit.
PSLVERR APB slave Tín hiệu báo lỗi từ phía APB slave, cho biết quá trình giao tiếp thất bại
2.2.3 Quá trình ghi dữ liệu của bus APB4
Việc ghi dữ liệu của bus APB4 được chia làm 2 kiểu là: Quá trình ghi không có trạng thái chờ và quá trình ghi có trạng thái chờ
• Quá trình ghi không có trạng thái chờ:
Quá trình ghi không có trạng thái chờ được mô tả theo hình 2.2 [4]:
Hình 2.2 Quá trình ghi không có trạng thái chờ
Tại cạnh lên của chu kỳ T1, đường địa chỉ PADDR và đường dữ liệu ghi PWDATA nhận dữ liệu từ APB master, trong khi tín hiệu PWRITE và PSEL được nâng lên mức cao để chỉ định quá trình ghi và chọn APB slave Tuy nhiên, do tín hiệu PENABLE vẫn ở mức thấp, APB slave được chọn không xử lý hai đường dữ liệu PADDR và PWDATA.
Trong chu kỳ T2, APB master nâng tín hiệu PENABLE lên mức cao, trong khi APB slave cũng tăng PREADY lên mức cao để xác nhận mức độ sẵn sàng Khi PREADY được xác nhận, APB master sẽ hạ PENABLE về mức thấp trong chu kỳ tiếp theo, trong khi PADDR và PWDATA vẫn giữ nguyên giá trị cho đến chu kỳ tiếp theo.
Tại giai đoạn cuối của chu kỳ T3, PENABLE giảm xuống mức thấp để hoàn tất quá trình truyền Trong khi đó, PSEL có thể duy trì ở mức cao nhằm tiếp tục cho quá trình truyền kế tiếp.
• Quá trình ghi có trạng thái chờ:
Quá trình ghi có trạng thái chờ được mô tả như hình 2.3 [4]:
Hình 2.3 Quá trình ghi có trạng thái chờ Tại quá trình ghi có trạng thái chờ, PREADY được kéo lên mức cao ở trạng thái không có quá trình truyền
Sau khi xác nhận mức cao của PSEL tại cạnh lên xung T1, PREADY được kéo về mức thấp tại cạnh lên của chu kỳ T2 và duy trì trong 2 chu kỳ xung Trong quá trình này, APB master xác nhận mức thấp của PREADY, cho phép tiếp tục quá trình giao tiếp.
Tại cạnh lên của chu kỳ T4, PREADY được kéo lên mức cao, chuẩn bị kết thúc quá trình truyền ở chu kỳ kế tiếp
Tại giai đoạn cuối của chu kỳ T5, khi PREADY được xác nhận, APB master sẽ kéo PENABLE về mức thấp, trong khi PSEL có thể giữ nguyên để chuẩn bị cho chu kỳ tiếp theo.
2.2.4 Quá trình đọc dữ liệu của bus APB4
Quá trình đọc dữ liệu của bus APB được phân thành hai loại: đọc không có trạng thái chờ và đọc có trạng thái chờ, tương tự như quá trình ghi.
• Quá trình đọc không có trạng thái chờ:
Quá trình đọc không có trạng thái chờ được mô tả như hình 2.4 [4]:
Trong quá trình đọc không có trạng thái chờ, tín hiệu PWRITE duy trì mức thấp liên tục trong suốt quá trình truyền, khác với quá trình ghi Các tín hiệu khác hoạt động tương tự như trong quá trình ghi.
• Quá trình đọc có trạng thái chờ:
Quá trình đọc có trạng thái chờ được mô tả như hình 2.5 [4]:
Trong quá trình đọc có trạng thái chờ, các tín hiệu hoạt động tương tự như trong quá trình đọc không có trạng thái chờ Tuy nhiên, tín hiệu PREADY từ phía APB slave được duy trì khi không có quá trình truyền và sẽ kéo xuống mức thấp trong 2 chu kỳ sau khi tín hiệu PSEL đạt mức cao, nhằm kéo dài quá trình truyền.
2.2.5 Chi tiết một vài tín hiệu của bus APB
Một vài tín hiệu mới có trong APB3 và APB4 được giới thiệu trong phần này
Tín hiệu PSTRB, hay còn gọi là write strobe, đóng vai trò quan trọng trong việc xác định byte hợp lệ trên đường dữ liệu trong quá trình ghi Nhờ vào tín hiệu này, APB master có khả năng quyết định byte nào trên thanh ghi của APB slave sẽ được cập nhật giá trị trong quá trình ghi dữ liệu.
Một bit của PSTRB đại diện cho 8 bit hay 1 byte đường dữ liệu Như vậy với PWDATA[(8n + 7):(8n)] thì có PSTRB[n] tương ứng
TỔNG QUAN VỀ GIAO THỨC UART
2.3.1 Giới thiệu về giao thức UART
UART (Bộ truyền nhận dữ liệu không đồng bộ) là giao thức giao tiếp không đồng bộ, cho phép cấu hình định dạng dữ liệu và tốc độ truyền.
UART là một thành phần quan trọng trong mạch tích hợp (IC) được sử dụng cho truyền thông nối tiếp qua các cổng nối tiếp của máy tính và thiết bị ngoại vi Thông thường, một chip vi điều khiển sẽ tích hợp một hoặc nhiều thiết bị ngoại vi UART, giúp nâng cao khả năng giao tiếp và kết nối trong các ứng dụng điện tử.
Một bộ UART thường chứa các thành phần sau:
- Một bộ tạo xung nhịp, được tính toán để có thể lấy mẫu dữ liệu ở giữa chu kỳ bit
- Hai thanh ghi dịch ở phía truyền và phía nhận, đi kèm với đó là hai bộ đệm hoặc FIDO truyền/nhận
- Bộ điều khiển truyền nhận
- Bộ logic điều khiển quá trình ghi/đọc
UART hoạt động ở ba chế độ: simplex (truyền một chiều), song công (cả hai thiết bị có thể truyền nhận cùng lúc) và bán song công (hai thiết bị thay phiên nhau truyền nhận) Để hai UART giao tiếp hiệu quả, cả hai bên cần thiết lập các thông số giống nhau, bao gồm mức điện áp, tốc độ Baud rate, chế độ Parity, kích thước bit dữ liệu, kích thước stop bit và kiểm soát lưu lượng.
Một bộ UART thường bao gồm hai chân là TXD và RXD, trong đó TXD là ngõ ra của bộ truyền (Transmitter) và RXD là ngõ vào của bộ nhận (Receiver) Kết nối giữa hai bộ UART được thể hiện trong hình 2.9.
Hình 2.9 Kết nối của 2 bộ UART
2.3.2 Khung dữ liệu của UART
Một khung dữ liệu của UART bao gồm 5 thành phần sau:
- Start bit: là bit 0 báo hiệu cho phía bộ nhận biết rằng một dữ liệu đang đến
- Data bits: bits dữ liệu, thường được thiết lập khoảng 5 tới 9 bit
- Parity bit: bit chẵn lẻ dùng để xác định dữ liệu có bị lỗi trong quá trình truyền hay không
- Stop bit: thường khoảng là 1 tới 2 bit 1, báo hiệu kết thúc khung dữ liệu
Khung dữ liệu UART 8 bit hoạt động bằng cách giữ ngõ ra ở mức cao khi không có giao tiếp Khi có dữ liệu cần truyền, bộ truyền sẽ gửi các bit dữ liệu theo thứ tự: start bit, data bits, parity bit (nếu có) và stop bits, với quy chuẩn truyền data bits từ LSB đến MSB.
Thông thường, các bộ UART thường truyền dữ liệu có độ lớn là 8 bit, và thường không có bit parity để hiệu suất giao tiếp
2.3.3 Bộ truyền và nhận của UART
Bộ truyền và bộ nhận là hai thành phần quan trọng trong quá trình truyền nhận của UART
Bộ truyền UART hoạt động đơn giản với xung riêng chạy ở bội số của tốc độ dữ liệu mà không cần xác nhận trạng thái đường truyền Khi hệ thống gửi dữ liệu vào thanh ghi đệm và không có dữ liệu nào đang truyền, bộ truyền sẽ lần lượt truyền các ký tự theo khung dữ liệu đã định Start bit ở mức thấp thông báo cho bên nhận chuẩn bị nhận dữ liệu, trong khi stop bit cũng ở mức thấp đánh dấu sự kết thúc của khung dữ liệu.
Do sự khác biệt lớn giữa tốc độ xử lý của CPU và tốc độ truyền của UART, các bộ FIFO thường được sử dụng để cho phép CPU ghi nhiều dữ liệu cùng lúc trước khi truyền đi, thay vì phải chờ từng dữ liệu được truyền xong mới bắt đầu ghi.
Bộ truyền thông thường được trang bị tín hiệu báo trạng thái bận để thông báo cho CPU khi đang truyền dữ liệu Bên cạnh đó, tín hiệu báo trạng thái rảnh cũng có thể được thiết kế như một tín hiệu ngắt, giúp CPU nhận biết thời điểm để ghi dữ liệu.
Bộ nhận UART sử dụng một xung riêng biệt tương tự như bộ truyền, nhưng thiết kế của nó phức tạp hơn để đáp ứng yêu cầu hoạt động Bộ nhận liên tục kiểm tra trạng thái đường truyền để phát hiện sự thay đổi Khi phát hiện đường truyền bị kéo xuống mức thấp, bộ nhận sẽ lấy mẫu sau nửa chu kỳ bit Nếu mẫu ở mức cao, tín hiệu mức thấp được coi là giả và bộ nhận trở về trạng thái ban đầu; nếu mẫu ở mức thấp, đó là start bit và bộ nhận chuyển sang trạng thái ghi dữ liệu Các bit dữ liệu được lấy mẫu ở giữa chu kỳ bit và lưu vào thanh ghi đệm hoặc bộ FIFO Ngoài ra, phía UART cũng phát tín hiệu cho dữ liệu mới và thường có tín hiệu ngắt để thông báo cho bộ xử lý trung tâm thực hiện chuyển dữ liệu.
Do thiếu bộ định thời cho UART, bộ nhận cần phải đồng bộ hóa với bộ tạo xung bên trong UART mỗi khi có sự thay đổi trên đường truyền, nếu không sẽ bị coi là xung giả.
Bộ nhận có thể áp dụng phương pháp FIFO để tối ưu hóa số lượng dữ liệu ghi trước khi truyền đi Ngoài ra, bộ nhận cũng có thể được thiết kế với tín hiệu báo trạng thái bận và tín hiệu thông báo có dữ liệu mới.
2.3.4 Các lỗi có trong UART
Dưới đây là một số lỗi có thể xuất hiện trong một bộ UART:
Lỗi tràn xảy ra khi bộ nhận không kịp xử lý dữ liệu mới trước khi dữ liệu tiếp theo được gửi đến Nguyên nhân chính là do bộ đệm của UART thường có giới hạn dung lượng, và khi bộ đệm đầy, CPU không thể chuyển dữ liệu kịp thời, dẫn đến tình trạng mất dữ liệu.
Lỗi chạy ngầm: Lỗi chạy ngầm xảy ra ở bộ truyền sau khi dữ liệu truyền đi hoàn tất và bộ đệm ở phía truyền trống
Lỗi đóng khung trong UART xảy ra khi thiết bị nhận không phát hiện được stop bit Quá trình nhận dữ liệu bắt đầu bằng start bit, và khi đến thời điểm lấy mẫu stop bit, thiết bị mong đợi ghi nhận trạng thái mức cao Tuy nhiên, nếu phát hiện trạng thái mức thấp, điều này cho thấy khung dữ liệu đã bị lỗi.
Lỗi parity xảy ra khi bộ UART kiểm tra tính chẵn lẻ của các bit dữ liệu và so sánh với bit parity đã gửi Nếu có sự khác biệt, điều này cho thấy dữ liệu trên đường truyền đã bị lỗi.
THIẾT KẾ BỘ CHUYỂN ĐỔI GIAO THỨC APB SANG UART
YÊU CẦU CỦA HỆ THỐNG
Bộ chuyển đổi giao thức APB sang UART là thành phần quan trọng trong bus AMBA, có chức năng trung gian kết nối các thiết bị ngoại vi UART với hệ thống bus nội bộ.
Hình 3.1 Vị trí bộ chuyển đổi APB sang UART
Với nhiệm vụ như trên, bộ chuyển đổi giao thức APB sang UART cần thực hiện được các yêu cầu sau đây:
- Sử dụng được các tín hiệu từ hệ thống như xung hệ thống, tín hiệu reset
- Tiếp nhận, xử lý các dữ liệu từ quá trình ghi của phía APB, chuyển đổi qua dạng tín hiệu UART để truyền đi
- Tiếp nhận, xử lý các dữ liệu nhận được từ thiết bị UART bên ngoài, chuyển đổi qua bus APB
- Có thể cài đặt, thiết lập được các thông số như tốc độ truyền, tín hiệu cho phép ngắt, tín hiệu cho phép lõi IP hoạt động
- Đảm bảo quá trình hoạt động được chính xác, có thể thông báo các lỗi nếu xảy ra trong quá trình hoạt động.
THIẾT KẾ HỆ THỐNG
3.2.1 Chức năng của hệ thống
Dựa vào các yêu cầu đã đề ra, bộ chuyển đổi giao thức APB sang UART bao gồm các tính năng như sau:
- Bộ chuyển đổi sử dụng xung hệ thống và tín hiệu reset mức thấp từ hệ thống bên trong trong suốt quá trình hoạt động
Cổng giao tiếp APB, theo phiên bản APB4, cho phép kết nối với APB master trong hệ thống nội bộ Trong quá trình ghi, cổng này nhận dữ liệu để truyền đến thiết bị ngoại vi qua giao tiếp UART, đồng thời bộ chuyển đổi có khả năng điều chỉnh các thông số như tốc độ truyền, chế độ hoạt động, chế độ parity và ngắt Trong quá trình đọc, cổng có thể tiếp nhận dữ liệu từ thiết bị ngoại vi và đưa vào đường dữ liệu đọc, hoặc cho phép hệ thống truy xuất các thông số đã được thiết lập.
- Nhận và truyền dữ liệu theo giao thức UART dựa trên xung của hệ thống và xung riêng, tích hợp bộ FIFO,
Bộ thu và bộ nhận trong hệ thống UART hoạt động nhờ vào một bộ tạo xung riêng, với độ rộng xung được xác định dựa trên tốc độ truyền đã được thiết lập.
- Bộ chuyển đổi có thể xử lý và thông báo các tín hiệu ngắt sau: Ngắt ngưỡng, ngắt tràn, ngắt lỗi khung, ngắt lỗi parity
3.2.2 Sơ đồ khối tổng quát
Bộ chuyển đổi APB sẽ bao gồm nhiều khối chính được kết nối với nhau Sơ đồ khối của bộ chuyển đổi được thể hiện theo như hình 3.2:
Hình 3.2 Sơ đồ khối của bộ chuyển đổi Dựa vào các tính năng đã đề ra như trên, các khối chính của bộ chuyển đổi bao gồm:
Khối APB Interface đảm nhận vai trò kết nối với hệ thống bus APB, thực hiện việc xử lý dữ liệu nhận từ bus APB để truyền sang UART và ngược lại Đồng thời, khối này cũng xử lý các tín hiệu ngắt và thông báo cho bộ xử lý trung tâm.
Khối BCLK Generator nhận giá trị đã được thiết lập và tạo ra xung riêng dựa trên tín hiệu từ hệ thống Xung riêng này đóng vai trò quan trọng trong việc điều khiển hoạt động của hai khối UART Receiver và UART Transmitter.
Khối UART Receiver có chức năng nhận dữ liệu từ đường truyền theo giao thức UART và chuyển giao dữ liệu cho giao diện APB Bên cạnh đó, khối này còn đảm nhiệm việc thông báo các tín hiệu trạng thái, tín hiệu lỗi và tín hiệu ngắt.
Khối UART Transmitter nhận dữ liệu từ APB và truyền qua chân TXD theo giao thức UART, đồng thời thông báo các tín hiệu trạng thái và tín hiệu ngắt cho phía UART.
3.2.3 Thiết kế khối APB Interface
Khối APB Interface chịu trách nhiệm chuyển giao dữ liệu giữa bus APB và các khối truyền nhận UART, đồng thời thiết lập các thông số và xử lý tín hiệu ngắt Sơ đồ khối tổng quát của khối APB được minh họa trong hình 3.3.
Hình 3.3 Sơ đồ khối tổng quát khối APB Interface Chi tiết các tín hiệu được liệt kê theo bảng 3.1:
Bảng 3.1 Mô tả tín hiệu APB Interface
Tên tín hiệu Loại tín hiệu Mô tả
PCLK Tín hiệu vào Xung hệ thống
PRESETN Tín hiệu vào Tín hiệu khởi động lại từ hệ thống PADDR[31:0] Tín hiệu vào Địa chỉ thanh ghi
PSEL Tín hiệu vào Tín hiệu lựa chọn
PWRITE Tín hiệu vào Đặt trạng thái ghi hoặc đọc cho quá trình truyền
PENABLE Tín hiệu vào Cho biết các chu kỳ kế tiếp trong quá trình truyền
PWDATA[31:0] Tín hiệu vào Đường dữ liệu ghi từ bus APB có độ rộng
PSTRB[3:0] Tín hiệu vào Cho biết byte nào của thanh ghi được cập nhật trong quá trình ghi
PPROT[2:0] Tín hiệu vào Cho biết cấp độ bảo mật
DATA_RX[7:0] Tín hiệu vào Dữ liệu có độ rộng 8 bit nhận được từ khối Receiver
TX_THR Tín hiệu vào
Thông báo bộ FIFO tại Transmitter có số ô trống bằng hoặc lớn hơn mức đã thiết lập
RX_THR Tín hiệu vào
Thông báo bộ FIFO tại Receiver có số ô đã được ghi dữ liệu bằng hoặc lớn hơn mức đã thiết lập
RX_FE Tín hiệu vào Thông báo lỗi khung dữ liệu UART RX_PE Tín hiệu vào Thông báo lỗi Parity
The RX_OV signal indicates a FIFO RX buffer overflow notification The TX_BUSY signal alerts that the transmitter is currently in operation Meanwhile, the RX_BUSY signal informs that the receiver is actively processing data.
Tín hiệu PRDATA[31:0] cung cấp đường dữ liệu đọc cho bus APB với độ rộng 32 bit Tín hiệu PREADY thông báo trạng thái sẵn sàng, trong khi tín hiệu PSLVERR thông báo nếu có lỗi trong quá trình truyền.
DATA_TX[7:0] Tín hiệu ra Đường dữ liệu 8 bit nối tới phía Transmitter để truyền đi theo giao thức
BCL_VAL[10:0] Tín hiệu ra Giá trị để tạo xung BCLK
TX_THR_VAL Tín hiệu ra Mức ngưỡng cho bộ FIFO của
Transmitter RX_THR_VAL Tín hiệu ra Mức ngưỡng cho bộ FIFO của Receiver
IP_EN Tín hiệu ra Cho phép hai bộ Transmitter và Receiver hoạt động
PARITY_EN Tín hiệu ra Cho phép dùng phương pháp parity trong quá trình truyền nhận theo UART
WRITE_TX_EN Tín hiệu ra Cho phép ghi dữ liệu vào bộ FIFO của
READ_RX_EN Tín hiệu ra Cho phép đọc dữ liệu từ bộ FIFO của
I_RXOV Tín hiệu ra Tín hiệu ngắt tràn
I_TXTHR Tín hiệu ra Tín hiệu ngắt ngưỡng Transmitter I_RXTHR Tín hiệu ra Tín hiệu ngắt ngưỡng Receiver
I_FE Tín hiệu ra Tín hiệu ngắt lỗi khung dữ liệu
I_PE Tín hiệu ra Tín hiệu ngắt lỗi Parity
I_TOTAL Tín hiệu ra Tín hiệu ngắt tổng
Sơ đồ kết nối các khối chính có trong APB Interface:
Hình 3.4 Sơ đồ các khối chính trong APB Interface Khối APB Interface bao gồm các khối chính như sau:
APB FSM là một máy trạng thái hữu hạn, có chức năng hạ tín hiệu PREADY xuống mức thấp trong 2 chu kỳ để kéo dài quá trình truyền dữ liệu Bên cạnh đó, máy còn tạo ra tín hiệu đọc/ghi mỗi khi cần thực hiện thao tác ghi hoặc đọc dữ liệu.
Khối điều khiển đọc ghi: Có nhiệm giải mã địa chỉ và thực hiện đọc ghi giá trị vào thanh ghi thích hợp
Khối thanh ghi: gồm 4 thanh ghi là: thanh ghi dữ liệu, thanh ghi giá trị BCLK, thanh ghi cho phép và thanh ghi thiết lập mức ngưỡng
Khối APB FSM là một máy trạng thái hữu hạn, có chức năng kéo dài quá trình truyền thông thông qua tín hiệu PREADY Đồng thời, nó nâng cao hai tín hiệu cho phép đọc và ghi FIFO trong một chu kỳ xung PCLK.
Sơ đồ hoạt động của máy trạng thái hữu hạn được mô tả theo như hình 3.5:
Hình 3.5 Hoạt động của APB FSM
Máy trạng thái APB FSM có ba trạng thái chính: IDLE, SETUP và ACCESS Trong trạng thái IDLE, tín hiệu PREADY duy trì ở mức cao, đồng thời hai tín hiệu READ_RX_EN và WRITE_TX_EN cũng được giữ ở mức cao Khối sẽ chuyển sang trạng thái SETUP khi phát hiện tín hiệu PSEL ở mức cao.
Trạng thái SETUP: PREADY được hạ xuống mức thấp Khối chuyển sang trạng thái kế tiếp là ACCESS nếu như nhận thấy PENABLE ở mức cao
Trạng thái ACCESS: PREADY duy trì ở mức thấp; khi tín hiệu PWRITE cao, WRITE_TX_EN sẽ được tăng lên mức cao Ngược lại, nếu PWRITE thấp, READ_TX_EN sẽ được nâng lên mức cao Máy sẽ chuyển sang trạng thái IDLE ở cạnh lên của chu kỳ xung tiếp theo mà không cần điều kiện nào.
Ví dụ về một hoạt động ghi được thể hiện như hình 3.6:
Hình 3.6 Ví dụ về hoạt động ghi ở khối APB FSM Tại T0, khi thấy PSEL, APB FSM chuyển qua trạng thái kế tiếp
Tại T1, PREADY được hạ xuống mức thấp
Tại T2, nhận thấy PWRITE ở mức cao nên WRITE_TX_EN được nâng lên mức cao
Tại T3, WRITE_TX_EN được hạ xuống mức thấp, PREADY được nâng lên mức cao thông báo kết thúc quá trình truyền
Tại T4, PENBALE được hạ xuống mức thấp, PSEL có thể được giữ ở mức cao nếu như tiếp tục một quá trình truyền khác
Lưu ý: WRITE_TX_EN và READ_TX_EN chỉ được thay đổi giá trị nếu như địa chỉ cho quá trình truyền là của thanh ghi dữ liệu
• Khối điều khiển đọc ghi
Khối điều khiển đọc ghi có chức năng giải mã địa chỉ và thực hiện quá trình đọc ghi vào vị trí thanh ghi tương ứng với địa chỉ đã được cung cấp.
Khối bao gồm hai bộ giải mã địa chỉ, bộ giải mã ghi được gọi là Write Decoder và bộ giải mã đọc được gọi là Read Decoder
Tại Write Decoder, một thanh ghi Reg_sel được sử dụng để lựa chọn các thanh ghi có trong bộ chuyển đổi
Bộ giải mã ghi gồm nhiều thanh ghi, mỗi thanh ghi kết nối với các tín hiệu PSEL, PSTRB, PENABLE và một bit của Reg_sel Khi tất cả các tín hiệu này đều bằng 1, thanh ghi sẽ lưu dữ liệu từ PWDATA Đối với bộ giải mã đọc, dữ liệu từ các thanh ghi được chuyển trực tiếp tới ngõ ra PRDATA theo địa chỉ đã được cung cấp.
KẾT QUẢ VÀ ĐÁNH GIÁ
SƠ ĐỒ KẾT NỐI BỘ CHUYỂN ĐỔI GIAO THỨC APB SANG
Sau khi hoàn tất thiết kế và lập trình bằng phần mềm Xilinx ISE, bộ chuyển đổi giao thức APB sang UART đã được kết nối hoàn chỉnh, bao gồm các khối chức năng APB Interface, BCLK Generator, UART Transmitter và UART Receiver.
Figure 4.1 illustrates the connection diagram of the blocks within the APB-UART TOP In this setup, the signal lines of the APB bus are connected to the APB Interface block, while the RXD and TXD lines are respectively linked to the UART Receiver and UART Transmitter blocks.
KẾT QUẢ xác minh và kiểm thử chức năng của BỘ CHUYỂN ĐỔI
4.2.1 Xây dựng môi trường mô phỏng để xác minh và kiểm thử chức năng bộ chuyển đổi giao thức APB sang UART Để việc xác mình và kiểm thử các chức năng của bộ chuyển đổi được thực hiện chính xác, một môi trường mô phỏng đã được xây dựng nhằm đáp ứng các yêu cầu trên Cấu trúc của môi trường mô phỏng được thể hiện theo hình 4.2:
Môi trường mô phỏng bộ chuyển đổi giao thức APB sang UART được thể hiện qua hình 4.2, trong đó các khối APB MASTER, UART DEVICE và TÍN HIỆU HỆ THỐNG được mô tả chi tiết thông qua các test case.
Môi trường mô phỏng hoạt động với tần số 100MHz, tương đương với chu kỳ xung PCLK là 10 ns Tốc độ truyền mặc định trong quá trình này được thiết lập ở mức 460800 bit/s, với giá trị được gửi vào thanh ghi REG_BCLK là 14.
4.2.2 Kết quả kiểm thử quá trình truyền dữ liệu
Các trường hợp (testcase) kiểm thử được liệt kê và mô tả cụ thể trong bảng 4.1
Bảng 4.1 Các testcase cho truyền dữ liệu
Tên testcase Mô tả quá trình
Truyền dữ liệu không có chế độ Parity
Khởi động lại hệ thống bằng tín hiệu PRESETN mức thấp
Để nâng PRESETN lên mức cao, hãy thiết lập giá trị 00111111 cho thanh ghi REG_EN tại địa chỉ 0x00000008 Tiếp theo, thiết lập giá trị 14 (tốc độ truyền = 480600) cho thanh ghi REG_BCLK ở địa chỉ 0x00000004 Cuối cùng, hãy thiết lập giá trị 11011001 cho thanh ghi REG_DATA tại địa chỉ 0x00.
Truyền dữ liệu có chế độ Parity chẵn
Khởi động lại hệ thống bằng tín hiệu PRESETN mức thấp
Để nâng PRESETN lên mức cao, thiết lập giá trị 11111111 cho thanh ghi REG_EN tại địa chỉ 0x00000008 Tiếp theo, thiết lập giá trị 14 (tốc độ truyền = 480600) cho thanh ghi REG_BCLK ở địa chỉ 0x00000004 Cuối cùng, thiết lập giá trị 11011001 cho thanh ghi REG_DATA ở địa chỉ 0x00000000.
Truyền dữ liệu có chế độ Parity lẻ Khởi động lại hệ thống bằng tín hiệu
Để nâng PRESETN lên mức cao, cần thiết lập giá trị 01111111 cho thanh ghi REG_EN tại địa chỉ 0x00000008 Tiếp theo, thiết lập giá trị 14 (tốc độ truyền = 480600) cho thanh ghi REG_BCLK ở địa chỉ 0x00000004 Cuối cùng, thiết lập giá trị 11011001 cho thanh ghi REG_DATA ở địa chỉ 0x00000000.
Truyền 2 dữ liệu liên tiếp
Khởi động lại hệ thống bằng tín hiệu PRESETN mức thấp
Để nâng PRESETN lên mức cao, bạn cần thiết lập giá trị 01111111 cho thanh ghi REG_EN tại địa chỉ 0x00000008 Tiếp theo, hãy thiết lập giá trị 14 (tốc độ truyền = 480600) cho thanh ghi REG_BCLK ở địa chỉ 0x00000004 Cuối cùng, hãy thiết lập hai giá trị cần thiết.
11011001 và giá trị 01010110 liên tiếp cho thanh ghi REG_DATA ở địa chỉ 0x00000000
Truyền 2 dữ liệu liên tiếp với tốc độ truyền 115200
Khởi động lại hệ thống bằng tín hiệu PRESETN mức thấp
Để nâng PRESETN lên mức cao, hãy thiết lập giá trị 00111111 cho thanh ghi REG_EN tại địa chỉ 0x00000008 Tiếp theo, thiết lập giá trị 54 cho thanh ghi REG_BCLK ở địa chỉ 0x00000004, tương ứng với tốc độ truyền 115200 khi hoạt động ở tần số 100MHz.
Cuối cùng thiết lập giá trị 11011001 cho thanh ghi REG_DATA ở địa chỉ 0x00000000
• Kết quả truyền dữ liệu không có chế độ Parity
Kết quả truyền dữ liệu từ APB sang UART diễn ra qua hai giai đoạn chính: giai đoạn thiết lập và giai đoạn truyền dữ liệu Giai đoạn thiết lập được minh họa trong hình 4.3.
Hình 4.3 Kết quả thiết lập thông số truyền không có chế độ Parity
Quá trình thiết lập các thông số được mô tả trong hình 4.3 Trong khoảng thời gian từ 0ns đến 20ns, tín hiệu PRESETN duy trì ở mức thấp để khởi động lại hệ thống, trong khi đó tín hiệu TXD giữ ở mức cao.
Từ 40ns đến 80ns, quá trình ghi bắt đầu để thiết lập thông số cho thanh ghi Tại 40ns, PSEL = 1, đánh dấu sự khởi đầu của quá trình truyền, với PADDR được thiết lập là 0x0000008 và PWDATA có giá trị 63 (00111111) Trong chu kỳ tiếp theo, PENABLE được nâng lên mức cao, dữ liệu từ PWDATA được đưa vào thanh ghi REG_EN, trong khi tín hiệu cho phép truyền nhận Parity ở mức thấp.
Từ 80ns đến 120ns, quá trình ghi bắt đầu với trạng thái chờ nhằm thiết lập thông số cho thanh ghi REG_BCLK Tại thời điểm 80ns, tín hiệu PENABLE được kéo xuống mức thấp, trong khi PADDR được thiết lập giá trị 0x00000004 và PWDATA được gán giá trị 14 Đến 90ns, dữ liệu từ PWDATA được chuyển vào thanh ghi REG_BCLK Cuối cùng, PENABLE và PSEL được kéo xuống mức thấp để hoàn tất quá trình ghi.
Tại thời điểm 130 ns, PSEL được nâng lên mức cao, khởi đầu quá trình ghi dữ liệu để truyền đi Đến 140 ns, PENABLE cũng được nâng lên mức cao, cho phép thanh ghi REG_DATA tiếp nhận 8 bit đầu tiên của tín hiệu PWDATA với giá trị nhị phân tương ứng.
Sau 4 chu kỳ, tại thời điểm 180 ns, thanh ghi DATA_TEMP ở khối UART Transmitter đã tiếp nhận dữ liệu và gắn vào 8 bit đầu tiên của mình
Kế tiếp là kết quả truyền dữ liệu ở chân TXD được thể hiện trong hình 4.4:
Hình 4.4 Kết quả truyền dữ liệu không có chế độ Parity
Dữ liệu cần truyền đi trong quá trình này là 11011001, dựa vào điều kiện này có thể phân tích sóng ngõ ra tại TXD dựa theo hình 4.3 như sau:
Vào thời điểm 0.19 us, TXD giảm xuống mức thấp, đánh dấu sự khởi đầu của quá trình truyền dữ liệu Đến 2.44 us, TXD tăng lên mức cao, bắt đầu truyền bit 0 Độ dài của start bit là 225 us.
Từ 2.44 us đến 4.68 us, tương ứng với khoảng thời gian là 224 us, TXD được kéo lên mức cao hay bit 0 được truyền
Từ 4.68 us đến 9.16 us, tương ứng với khoảng thời gian là 448 us, TXD được kéo xuống mức thấp hay bit 1 và bit 2 được truyền
Từ 9.16 us đến 13.64 us, tương ứng với khoảng thời gian là 448 us, TXD được kéo lên mức cao hay bit 3 và bit 4 được truyền
Từ 13.64 us đến 15.88 us, tương ứng với khoảng thời gian là 224 us, TXD được kéo xuống mức thấp hay bit 5 được truyền
Từ 15.88 us đến 22.6 us, tương ứng với khoảng thời gian là 672 us, TXD được kéo lên mức cao hay bit 6, bit 7 và Stop bit được truyền
Như vậy, từ thời điểm 0.19 us đến 22.6 us, các bit lần lược là start bit, 8 bit dữ liệu là 11011001 và stop bit đã được truyền đi
• Kết quả truyền dữ liệu có chế độ Parity chẵn
Quá trình thiết lập các thông số được thể hiện ở hình 4.5:
Hình 4.5 Kết quả thiết lập thông số truyền có chế độ Parity chẵn
Quá trình thiết lập thông số truyền không có parity tương tự như truyền có parity, nhưng giá trị của thanh ghi REG_EN được thiết lập là 255 (11111111), cho phép truyền nhận parity ở mức cao với chế độ parity chẵn Tại thời điểm 190 ns, dữ liệu trong thanh ghi DATA_TEMP của khối Transmitter có giá trị 01011001.
8 bit đầu tương ứng với 8 bit dữ liệu và bit cuối tương ứng với parity bit
Kế tiếp là kết quả truyền dữ liệu ở chân TXD được thể hiện trong hình 4.6:
Hình 4.6 Kết quả truyền dữ liệu có chế độ Parity chẵn
ĐÁNH GIÁ KẾT QUẢ
Dựa theo các kết quả kiểm thử ở phần 4.2, các trường hợp mô phỏng được tổng hợp và đánh giá theo bảng 4.9
Bảng 4.9 Tổng hợp trường hợp mô phỏng được tổng hợp và đánh giá
Số thứ tự Tên trường hợp Đánh giá
1 Truyền dữ liệu từ APB sang UART không có chế độ parity Hoạt động chính xác
2 Truyền dữ liệu từ APB sang UART có chế độ parity chẵn Hoạt động chính xác
3 Truyền dữ liệu từ APB sang UART có chế độ parity lẻ Hoạt động chính xác
4 Truyền liên tiếp 2 dữ liệu từ APB sang
UART không có chế độ parity
Hoạt động chính xác Tuy nhiên, vẫn có độ trễ giữa hai dữ liệu, dẫn đến tốc độ truyền thực tế chậm hơn so với lý thuyết
5 Nhận dữ liệu từ UART sang APB không có chế độ parity Hoạt động chính xác
6 Nhận dữ liệu từ UART sang APB có chế độ parity chẵn Hoạt động chính xác
7 Nhận dữ liệu từ UART sang APB chế độ parity lẻ Hoạt động chính xác
8 Nhận liên tiếp 2 dữ liệu từ UART sang APB không có chế độ parity Hoạt động chính xác
Nhận dữ liệu từ UART sang APB không có chế độ parity với tốc độ truyền khác
10 Truyền và nhận dữ liệu đồng thời ở phía UART Hoạt động chính xác
11 Nhận start bit giả từ UART Hoạt động chính xác
12 Kích hoạt tín hiệu ngắt ngưỡng
Transmitter Hoạt động chính xác
13 Kích hoạt tín hiệu ngắt ngưỡng
Receiver Hoạt động chính xác
14 Kích hoạt tín hiệu ngắt tràn Hoạt động chính xác
15 Kích hoạt tín hiệu ngắt lỗi parity Hoạt động chính xác
16 Kích hoạt tín hiệu ngắt lỗi khung Hoạt động chính xác
17 Kích hoạt tín hiệu PSLVERR Hoạt động chính xác
Từ các kết quả đánh giá được tổng hợp ở bảng 4.9, bộ chuyển đổi giao thức APB sang UART đã thực hiện đúng các chức năng sau:
Truyền nhận dữ liệu giữa bus APB và UART có thể thực hiện một cách liên tục và đồng thời, với khả năng hỗ trợ nhiều tốc độ truyền khác nhau.
- Bộ chuyển đổi có thể cấu hình được các tín hiệu cho phép, các mức ngưỡng, tốc độ truyền
- Thiết lập các tín hiệu ngắt đúng theo chức năng đã quy định
Như vậy, bộ chuyển đổi đã hoạt động đúng như những chức năng đã đề ra.