Ngày nay, cùng với sự phát triển không ngừng của các dòng vi điều khiển, các loại thiết bị ngoại vi, các chuẩn giao tiếp cũng phát triển ngày càng đa dạng. Các loại vi điều khiển hay các loại thiết bị ngoại vi khác nhau (như LCD, sensor hay các loại bộ nhớ) sẽ sử dụng các chuẩn giao tiếp khác nhau. Vậy liệu có thể tích hợp các chuẩn giao tiếp khác nhau (như I2C, UART) trên cùng 1 chip để có thể chuyển đổi linh hoạt giữa các chuẩn giao tiếp khi ta thay đổi sử dụng các loại ngoại vi khác nhau? Trên cơ sở đó, UARTI2C Controller IP core được thiết kế cho phép vi xử lý lựa chọn linh hoạt giữa 2 chuẩn giao tiếp.Trong nội dung đồ án này, lõi IP UARTI2C Controller được thiết kế theo quy trình thiết kế vi mạch số của tập đoàn Synopsys, một trong những tập đoàn hàng đầu thế giới cung cấp công cụ chuyên dụng trong ngành thiết kế vi hiện nay. Lõi IP được phân tích đến mức cổng logic, từ đó Soft IP được viết bằng ngôn ngữ lập trình phần cứng Verilog, code ở mức RTL được kiểm tra sửa lỗi trên phần mềm ModelSim.Sau đó, lõi IP được tổng hợp ở mức cổng logic trên phần mềm Quartus II, Student Edition và được nạp trên Kit Altera DE2 sử dụng chip FPGA Cyclone II.Lõi IP UARTI2C Controller do nhóm thiết kế đáp ứng các yêu cầu kĩ thuật đặt ra. UART Controller tương thích chuẩn công nghiệp 16550 và có khả năng truyền nhận dữ liệu song công. UART hoạt động với khung dữ liệu 8 bit, 1 bit Start và 1 bit Stop, đồng thời hỗ trợ tốc độc baud cấu hình được, chế độ Auto Flow cũng như chế độ kiểm tra chẵn lẻ. I2C Controller được thiết kế có thể cấu hình hoạt động là Master hoặc Slaver, hỗ trợ tối đa 128 thiết bị cùng hoạt động với chế độ định địa chỉ 7 bits. I2C Controller hỗ trợ 4 mức tốc độ hoạt động 100kbps, 400kbps, 1Mbps và 3.4Mbps. Ngoài ra, lõi IP giaotiếp với vi xử lý theo chuẩn AMBA APB, sử dụng các FIFO 8x16 trong các hoạt động truyền và nhận dữ liệu. Nội dung đồ án bao gồm 4 chương:Chương 1: Cơ sở lý thuyếtChương 2: Thiết kế khối UARTChương 3: Thiết kế khối I2CChương 4: Mô phỏng và tổng hợp
Trang 1LỜI CAM ĐOAN
Cộng hòa xã hội chủ nghĩa Việt NamĐộc lập – Tự do – Hạnh phúc
***
LỜI CAM ĐOAN
Kính gửi: Hội đồng Bảo vệ Tốt nghiệp khóa 09ĐTVT khoa Điện tử - Viễn thông.Chúng tôi gồm:
- Lê Hữu Việt, sinh viên lớp 09DT2, khoa Điện tử - Viễn thông
- Võ Thị Kim Nga, sinh viên lớp 09DT2, khoa Điện tử - Viễn thông
- Lê Hà Bảo Ngọc, sinh viên lớp 09DT2, khoa Điện tử - Viễn thông
Chúng tôi xin cam đoan nội dung của đồ án này do tự nhóm nghiên cứu vàthiết kế dưới sự hướng dẫn của TS Huỳnh Việt Thắng mà không là bản sao chépcủa bất kì đồ án hay công trình nghiên cứu nào đã có từ trước Nếu vi phạm tôixin chịu hoàn toàn trách nhiệm
Người thực hiện
Trang 2MỤC LỤC
Trang 3DANH MỤC TỪ VIẾT TẮT
DANH MỤC TỪ VIẾT TẮT
I2C Inter Intergrated Circuit
UART Universal Aschynorous Receiver Transmitter
FPGA Field Programmable Gate Array
AMBA Advanced Microcontroller Bus Architecture
Trang 4LỜI MỞ ĐẦU
Ngày nay, cùng với sự phát triển không ngừng của các dòng vi điều khiển,các loại thiết bị ngoại vi, các chuẩn giao tiếp cũng phát triển ngày càng đa dạng.Các loại vi điều khiển hay các loại thiết bị ngoại vi khác nhau (như LCD, sensorhay các loại bộ nhớ) sẽ sử dụng các chuẩn giao tiếp khác nhau Vậy liệu có thểtích hợp các chuẩn giao tiếp khác nhau (như I2C, UART) trên cùng 1 chip để cóthể chuyển đổi linh hoạt giữa các chuẩn giao tiếp khi ta thay đổi sử dụng các loạingoại vi khác nhau? Trên cơ sở đó, UART/I2C Controller IP core được thiết kếcho phép vi xử lý lựa chọn linh hoạt giữa 2 chuẩn giao tiếp
Trong nội dung đồ án này, lõi IP UART/I2C Controller được thiết kế theoquy trình thiết kế vi mạch số của tập đoàn Synopsys, một trong những tập đoànhàng đầu thế giới cung cấp công cụ chuyên dụng trong ngành thiết kế vi hiệnnay Lõi IP được phân tích đến mức cổng logic, từ đó Soft IP được viết bằngngôn ngữ lập trình phần cứng Verilog, code ở mức RTL được kiểm tra sửa lỗitrên phần mềm ModelSim.Sau đó, lõi IP được tổng hợp ở mức cổng logic trênphần mềm Quartus II, Student Edition và được nạp trên Kit Altera DE2 sử dụngchip FPGA Cyclone II
Lõi IP UART/I2C Controller do nhóm thiết kế đáp ứng các yêu cầu kĩ thuậtđặt ra UART Controller tương thích chuẩn công nghiệp 16550 và có khả năngtruyền nhận dữ liệu song công UART hoạt động với khung dữ liệu 8 bit, 1 bitStart và 1 bit Stop, đồng thời hỗ trợ tốc độc baud cấu hình được, chế độ AutoFlow cũng như chế độ kiểm tra chẵn lẻ I2C Controller được thiết kế có thể cấuhình hoạt động là Master hoặc Slaver, hỗ trợ tối đa 128 thiết bị cùng hoạt độngvới chế độ định địa chỉ 7 bits I2C Controller hỗ trợ 4 mức tốc độ hoạt động100kbps, 400kbps, 1Mbps và 3.4Mbps Ngoài ra, lõi IP giaotiếp với vi xử lý theochuẩn AMBA APB, sử dụng các FIFO 8x16 trong các hoạt động truyền và nhận
dữ liệu
Nội dung đồ án bao gồm 4 chương:
Trang 5LỜI MỞ ĐẦU
Chương 1: Cơ sở lý thuyết
Chương 2: Thiết kế khối UART
Chương 3: Thiết kế khối I2C
Chương 4: Mô phỏng và tổng hợp
PHÂN CÔNG CÔNG VIỆC
Công việc Lê Hữu Việt Võ Thị Kim Nga Lê Hà Bảo Ngọc
Tìm hiểu lý
thuyết
Developtment Altera DE2 Thiết kế UART Receiver Transmitter
Baudrate
APB Interface Thiết kế I2C Clock Devider
I2C Interface
Tx FIFO
Rx FIFO
APB Interface APB Master
Mô phỏng Tổng hợp code và mô phỏng, sửa lỗi độc lập
Bên cạnh đó, do được thực tập tốt nghiệp suốt 3 tháng tại Trung tâm Thiết
Kế Vi mạch thành phố Đà Nẵng, nên chúng tôi quyết định chọn Đồ án tốt nghiệptheo hướng thiết kế vi mạch để vận dụng các kiến thức đã học được trong quátrình thực tập
Nhóm chúng tôi xin chân thành cảm ơn toàn thể thầy cô khoa Điện TửViễn Thông đã nhiệt tình hỗ trợ nhóm trong suốt quá trình thực hiện đồ án tốtnghiệp, đặc biệt là Ts Huỳnh Việt Thắng tận tình hướng dẫn nhóm hoàn thành
đồ án theo đúng mục tiêu đề ra
Trang 6Ch ươ ng 1: C S LÝ THUY T Ơ Ở Ế
1.1 Gi i thi u ch ớ ệ ươ : ng
Chương này giới thiệu tổng quan về quy trình thiết kế vi mạch số, cung cấpcái nhìn sơ lược về lịch sử nền công nghiệp vi mạch tích hợp, những bước tiếncông nghệ cũng như các khái niệm cơ bảntrong luồng chế tạo vi mạch Sau đótrình bày cơ sở lý thuyếtchuẩn bus AMBA APB, UART, I2C và giới thiệu sơlược về Altera DE2 Board Development and Education
1.2 T ng quan v quy trình thi t k vi m ch s ổ ề ế ế ạ ố[9]:
1.2.1 Quy trình thi t k vi m ch s :ế ế ạ ố
Hình 1.1 Tổng quan về quy trình thiết kế vi mạch số.
Quy trình thiết kế vi mạch số bao gồm 4 bước chính sau:
1.2.1.1 Specification:
Specification (Hình 1.2) là quá trình nghiên cứu các đặc tính kĩ thuật của lõi
IP, từ đó phân tích thiết kế lõi IP đến mức cổng logic,bao gồm 5 bước chính:
Trang 7Chương 1: CƠ SỞ LÝ THUYẾT
Nghiên cứu: Tìm kiếm, đọc hiểu tài liệu và phân tích các giao thức, chứcnăng, các thông số mong muốn,… để tạo ra bảng chức năng chi tiết
High-level Design: Thiết kế mức kiến trúc: Bao gồm vẽ sơ đồ khối là thiết
kế được chia thành các khối riêng biệt, mỗi khối sẽ đảm nhiệm một chức năngriêng theo ý muốn của kĩ sư thiết kế Và vẽ sơ đồ tín hiệu là xác định số lượng,chức năng và định thời các tín hiệu Nếu thiết kế có giao diện được mô tả trongcác giao thức chuẩn, các tín hiệu đó sẽ được liệt kê trong tài liệu về giao thức đó
Hình 1.2 Chi tiết 2 quá trình thiết kế: Specificaton và Verification.
Low-level Design: Phân tích cấu trúc của thiết kế ở mức cổng Tất cả cáckhối được phân tích bằng việc sử dụng các bộ MUX, các cổng AND, OR, XOR,NOT và Flip-flop,… Bước này chiếm rất nhiều thời gian do đó đóng vai trò đặcbiệt quan trọng trong luồng thiết kế Kết quả thu được sau khi phân tích là sơ đồcấu trúc chi tiết của thiết kế
Trang 8Coding: Việc viết code RTL được hoàn thành dựa vào sơ đồ cấu trúc chitiết của thiết kế đã được phân tích ở bước thiết kế mức chức năng.
Block-level check: Kiểm tra và mô phỏng tất cả các khối riêng biệt bằngcác công cụ kiểm tra cũng như các phần mềm mô phỏng
1.2.1.2 Verification:
Verification (Hình 1.2): quá trình được sử dụng để kiểm tra tính đúng đắn
về mặt chức năng của thiết kế, nhằm đảm bảo chắc chắn thiết kế logic phù hợpvới specification Có 2 loại Verification thông dụng là Functional Verification vàTiming Verification
Mục đích: phát hiện các lỗi trong thiết kế Bởi vì lỗi tìm thấy ở block-level
ít gây thiệt hại Lỗi tìm thấy ở system-level ảnh hưởng đến thời gian sản xuất IC
ra thị trường Lỗi tìm thấy sau khi chế tạo gây tốn kém khá lớn vì chi phí chế tạolại Lỗi tìm thấy bởi khách hàng có thể gây thiệt hại hàng triệu đô la và mất uy tínVerification gồm 3 bước chính:
- RTL-level Simulation: Mô phỏng, phát hiện và sửa lỗi trong thiết kế ở mức RTLcode
- Gate-level Simulation: Mô phỏng và kiểm tra tính tương đương trong thiết kế ởmức cổng logic
- FPGA Test: Kiểm tra hoạt động cơ bản của thiết kế trên KIT FPGA
1.2.1.3 Physical design:
Trang 9Chương 1: CƠ SỞ LÝ THUYẾT
Hình 1.3 Chi tiết quá trình thiết kế vật lý.
Synthesis (Hình 1.4.): là quá trình chuyển đổi thiết kế dưới dạng mô tả bằngngôn ngữ phần cứng(RTL-level) sang mô tả bằng các cổng logic (Gate-level).Quá trình tổng hợp logic được thực hiện bằng cách tổ hợp RTL code và thư việncông nghệ, là thư viện chứa các cell chuẩn và thông số của chúng bao gồm cáccổng logic cơ bản (AND OR XOR NOT) và các Macro Cell ( Adder, Mux,Memory, Flip-flop)
Trang 10Hình 1.4 Quá trình tổng hợp logic.
Pre-layout Timing: Phân tích các vi phạm về timing sau khi tổng hợp
Place and Route: Xác định vị trí các cổng logic đặt trên chip vật lý đồngthời đảm bảo tối thiểu hóa độ trễ trên các Critical Path, độ nghẽn khi routing và
độ trễ đường dây bằng cách thay đổi kích thước các cổng logic, chèn thêm các bộđệm hoặc thực hiện tổng hợp lại từng phần
Post-layout Timing: Phân tích, kiểm tra timing cho các đường timing sauquá trình Place & Route
Physical Verification: Kiểm tra layout của IC có thỏa mãn các tiêu chí kĩthuật theo các luật lệ thiết kế, tính đồng nhất giữa Schematic và Layout
1.2.2 Công cụ s d ng trong thi t k vi m ch sử ụ ế ế ạ ố:
1.2.2.1 Specification:
Microsoft Word: viết mô tả thiết kế và hướng dẫn sử dụng
Notepad++/ Emeditor: viết code RTL
XEmacs: tự động kết nối các khối con
LEDA (Synopsys) : Kiểm tra lỗi cú pháp trong code RTL
Microsoft Visio: Vẽ sơ đồ khối, sơ đồ tín hiệu, sơ đồ chi tiết mức cổnglogic và sơ đồ máy trạng thái hữu hạn
Công cụ FPGA: Quartus (Altera), Leonardo Spectrum (Mentor Graphics),ISE Design Suite (Xilinx) được dùng để biên dịch code RTL trên FPGA
1.2.2.2 Verification:
Trang 11Chương 1: CƠ SỞ LÝ THUYẾT
VCS (Synopsys): Trình mô phỏng hoạt động trên hệ điều hành Linux, được
sử dụng trong công nghiệp
ModelSim (Mentor Graphic): Trình mô phỏng dùng để kiểm tra chức nănglogic của thiết kế
1.2.2.3 Physical Design:
Design Compiler: tổng hợp code RTL thành các cổng logic
IC Compiler: thực hiện quá trình layout thiết kế
Prime Timer: kiểm tra timing của thiết kế
Hercules: kiểm tra thiết kế vật lý, Design Rule Check (DRC) và LayoutVersus Schematic (LVS)
1.3 C s lý thuy t v AMBA APB ơ ở ế ề
1.3.1 Gi i thi u chung v Bus APBớ ệ ề [1]
APB (Advanced Peripheral Bus) là 1 phần của cấu trúc bus AMBA(Advanced Microcontroller Bus Architecture)
AMBA APB thường được sử dụng để giaotiếp với các thiết bị ngoại vi cóbăng thông thấp và không yêu cầu hiệu suất cao
Sơ đồ tín hiệu vào ra Bus APB như Hình 1.5
Trang 12Hình 1.5 Cấu trúc bus AMBA APB.
1.3.2 Nh ng đ c tr ng c b n c a AMBA APBữ ặ ư ơ ả ủ [1]
-Những phiên bản cập nhật nhất của AMBA APB đảm bảo rằng sự thay đổicủa tín hiệu chỉ xảy ra tại sườn lên của xung clock
-Những đặc trưng cơ bản nhất của AMBA APB:
+Hoạt động của APB bus dựa trên 3 trạng thái cơ bản như Hình 1.6
Hình 1.6 Giản đồ trạng thái của bus APB.
Trang 13Chương 1: CƠ SỞ LÝ THUYẾT
• IDLE: Trạng thái mặc định của bus ngoại vi
• SETUP: Khi có 1 yêu cầu truyền dữ liệu, bus chuyển sang trạng thái SETUP,lúc này tín hiệu chọn PSELx =1 Bus chỉ ở trạng thái SETUP trong 1 chu kỳ clock và sẽ luôn chuyến sang trạng thái ENABLE tại sườn lên của xung clock tiếp theo
• ENABLE:Ở trạng thái ENABLE, tín hiệu chọn PSELx =1 Các tín hiệu read,write, address vẫn giữ ổn định suốt quá trình chuyển từ trạng thái SETUP sang ENABLE Trạng thái ENABLE chỉ kéo dài trong 1 chu kỳ, sau trạng thái này bus lại chuyển về trạng thái IDLE như ban đầu
-Quá trình ghi dữ liệu ( Hình 1.7):
Hình 1.7: Giản đồ thời gian quá trình ghi dữ liệu
Quá trình ghi dữ liệu được bắt đầu với các tín hiệu chọn, tín hiệu ghi, dữliệu ghi và tín hiệu địa chỉ được thay đổi sau sườn lên của xung clock Chu kỳclock đầu tiên của quá trình ghi dữ liệu được gọi là chu kỳ SETUP Tại sườn lênclock kế tiếp sau đó, PENABLE được tích cực mức 1, chỉ ra rằng chu kỳENABLE đang diễn ra Quá trình ghi được hoàn thành cuối chu kỳ này
- Quá trình đọc dữ liệu
Trang 14Hình 1.8 Giản đồ thời gian quá trình đọc dữ liệu.
Hình 1.8 trình bày timing của các tín hiệu dò, tín hiệu chọn, địa chỉ, ghicũng tương tự như quá trình ghi dữ liệu Trong trường hợp đọc dữ liệu, Slavephải cung cấp dữ liệu suốt chu kỳ ENABLE Dữ liệu được lấy mẫu tại sườn lêncủa xung clock cuối chu kỳ ENABLE
1.4 C s lý thuy t UART ơ ở ế
1.4.1 Gi i thi u chung v UARTớ ệ ề [5]
UART là từ viết tắt của Universal Asynchronous Receiver Transmitter.Bộthu/phát không đồng bộ đa năng, là mộtloạithu/phát không đồng bộ dùng để thựchiện việc chuyển đổi dữ liệu song song thành nối tiếp và truyền nhận nối tiếpgiữa bên phát và bên thu
Trong các ngày đầu của PC, 8250 UART dùng để kết nối các máy tính.Tiếp
đó là 16450 UART,16550 UART ra đời (vẫn còn phổ biến ngày nay).Ngoài racòn có 16650 UART và 16750 UART.Đây là 1 chuẩn giao tiếp với các thiết bịngoại vi khác khá phổ biến
1.4.2 Ch c năng chính c a UART:ứ ủ [6]
1.4.2.1 Đ nh d ng khung d li u truy n theo chu n UART:ị ạ ữ ệ ề ẩ
Trang 15Chương 1: CƠ SỞ LÝ THUYẾT
Hình 1.9 Khung dữ liệu truyền theo chuẩn UART.
Hình 1.9 biểu diễn khung dữ liệu truyền theo chuẩn UART, trong đó:
- Trong trạng thái rỗi, bus được giữ ở mức 1,khi có bit START bus được kéoxuống 0
- Số bit dữ liệu chính có thể từ 5 đến 8 bit,với đồ án này sử dụng 8 bit
- Tiếp theo là 1 bit PARITY kiểm tra chẵn/lẻ(tùy chọn)
- Cuối cùng là bit STOP tích cực ở mức 1 (1;1,5 hay 2 bit)
Với BRG là số được cấu hình trong thanh ghi Baud rate
Sai số trong tính tốc độ Baud:
- Tốc độ Baud mong muốn:
Desired baud rate=
Trang 16- Chọn giá trị nguyên gần đúng nhất gọi là:BRGused
- Tốc độ Baud được sử dụng:
Desired baud rate=
- Sai số trong tính tốc độ Baud:
1.4.2.4 Các tín hi u ng tệ ắ
Hình 1.10 Sơ đồ khối điều khiển ngắt
- Tín hiệu ngắt là những tín hiệu thông tin đến CPU core về những trạng thái đặcbiệt của UART.Ví dụ:Ngắt phát,ngắt nhận,lỗi nhận(parity,overrun,…)
và đơn giản của nó, I2C đã được chuẩn hóa và sử dụng rộng rãi trong các moduletruyền thông nối tiếp của vi mạch tích hợp ngày nay
I2C trở thành một chuẩn công nghiệp cho các giao tiếp điều khiển, có thể
kể ra đây một vài tên tuổi ngoài Philips như: Texas Intrument (TI), Maxim‐Dallas, Analog Device, National Semiconductor, … Bus I2C được sử dụng làm
Trang 17Chương 1: CƠ SỞ LÝ THUYẾT
bus giao tiếp ngoại vi cho rất nhiều loại IC khác nhau như các loại Vi điều khiển
8051, PIC, AVR, ARM, chíp nhớ như RAM tĩnh (Static Ram), EEPROM, bộchuyển đổi tương tự số (ADC), số tương tụ (DAC), IC điểu khiển LCD, LED…
1.5.1.2 Đ c đi m giao ti p I2C:ặ ể ế
Hình 1.11 Sơ đồ giao tiếp các thiết bị theo chuẩn I2C.
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ị
Trong quá trình giao tiếp, mỗi thiết bị luôn được đánh một giá trị địa chỉduy nhất (do nhà sản xuất quy định) nên không xảy ra nhầm lẫn trong quá trìnhkết nối, mặc dù trên bus I2C có rất nhiều thiết bị Mỗi thiết bị có thể hoạt đôngnhư là thiết bị nhận dữ liệu hay có thể vừa truyền vừa nhận Hoạt động truyềnhay nhận còn tùy thuộc vào việc thiết bị đó là chủ (master) hay tớ (slave) Trênmột bus I2C thì quyền điều khiển thuộc về thiết bị chủ Thiết bị chủ nắm vai tròtạo xung đồng hồ cho toàn hệ thống, khi giữa hai thiết bị chủ/tớ giao tiếp thì thiết
bị chủ có nhiệm vụ tạo xung đồng hồ và quản lý địa chỉ của thiết bị tớ trong suốtquá trình giao tiếp
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
Trang 18mode), 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 thiết bị chủ và một thiết bị tớ trên bus I2Cđược tiến hành như sau:
+ Thiết bị chủ xác định địa chỉ của thiết bị tớ 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ùngvớ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 xungACK
+ 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ậnbằ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
1.5.2 Đ c đi m chung c a I2C:ặ ể ủ [3][10]
1.5.2.1 Đ nh d ng khung d li u:ị ạ ữ ệ
Hình 1.12 Định dạng khung dữ liệu theo chuẩn I2C.
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ủaclock 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 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ườnghợp không nhận đủ 8 bit dữ liệu, thiết bị nhận sẽ gửi một xung NOT-ACK (SDA
Trang 19Chương 1: CƠ SỞ LÝ THUYẾT
ở mức cao tại SCL thứ 9), từ đó thiết bị chủ sẽ gửi tín hiệu STOP hayRESTART
1.5.2.2 Đ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ì thiết bị chủđều phải gửi tín hiệu START hay STOP để báo cho thiết bị tớ 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ệumộ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
Cả hai điều kiện START và STOP đều được tạo ra bởi thiết bị chủ Sau tínhiệu START, bus I2C coi như đang trong trang 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 thiết bị chủ Saukhi có một điều kiện START, trong qua trình giao tiếp, khi có một tín hiệuRESTART thay vì một tín hiệu STOP thì bus I2C vẫn tiếp tục trong trạng tháibận
1.5.2.3 Đ a ch thi t bi.ị ỉ ế
Mỗi thiết bị tham gia vào bus I2C đều có một địa chỉ duy nhất do nhà sảnxuất qui định để tránh gây nhầm lẫn trên đường truyền Độ dài byte địa chỉ là 7bit, do đó, sẽ có tối đa 128 thiết bị trên một bus I2C Khi thiết bị chủ muốn giaotiế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 busngay sau xung START Byte đầu tiên được gửi sẽ bao gồm 7 bit địa chỉ và mộtbít thứ 8 điều khiển hướng truyền Riêng bit điều khiển hướng sẽ quy định chiềutruyề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ủ
1.5.2.4 Ch đ Master-Slave:ế ộ
Trang 20Việc truyền dữ liệu trên bus I2C thực hiện theo 2 hướng: từ master đếnslave và ngược lại, hướng truyền được quy định bởi bit thứ 8 trong byte đầu tiên:R/W Master luôn là thiết bị tạo xung clock SCL trong suốt quá trình truyền.Master truyền – Slave nhậ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ứ 8R/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 theotừng bit một Kết thúc mỗi byte 8 bit thì chờ xung ACK phản hồi Số lượng bytetruyề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
Hình 1.13 Định dạng dữ liệu trong chế độ Master truyền.
Master nhận – Slave truyền:
Trang 21Chương 1: CƠ SỞ LÝ THUYẾT
Hình 1.14 Định dạng dữ liệu trong chế độ Master nhận.
- 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ứ 8R/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ờ xungACK 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
1.6 T ng quan v Altera DE2 Board Development and ổ ề
Education.[7]
1.6.1 Gi i thi u:ớ ệ
Mục đích của Altera DE2 là cung cấp một thiết bị lý tưởng cho việc nghiêncứu về logic số, cấu trúc máy tính và FPGA Board sử dụng kỹ thuật tiên tiếnnhất trong cả phần cứng và công cụ CAD Board hỗ trợ một số lượng lớn tínhnăng thích hợp cho các phòng lab của trường đại học và cao đẳng, cũng như việcphát triển các hệ thống số cao cấp
1.6.2 Specification:
Chip FPGA:
- Cyclone II EP2C35F672C6 và thiết bị cấu hình EPCS16
Thiết bị đầu vào, đầu ra:
- Dây cáp cấu hình USB – Blaster cho FPGA
- 10/100 Ethernet, RS – 232, port hồng ngoại
- Video out (VGA 10 – bit DAC)
Trang 22- Video in (NTSC/PAL/Multi – format).
- USB 2.0 (loại A và B)
- Port bàn phím hoặc chuột PS/2
- Line – in, line – out, microphone – in (24 – bit audio CODEC)
- Headers mở rộng (76 pins)
Trang 23Chương 2: THIẾT KẾ KHỐI UART
2.1 Gi i thi u ch ớ ệ ươ ng:
Chương này đi vào chi tiết các bước thiết kế, cho thấy rõ cấu tạo bên trongcủa lõi IP UART Controller Quá trình thiết kế lõi IP UART được thực hiện từviệc nghiên cứu các nguồn tài liệu liên quan đến UART để từ đó xây dựng sơ đồtín hiệu và sơ đồ khối tổng quát (thiết kế mức kiến trúc) Tiếp theo, các khối conđược phân tích chi tiết đến mức cổng logic (thiết kế mức chức năng), sau đó codeRTL được viết từ sơ đồ mạch
2.2 Đ c tính c a lõi IP UART Controller: ặ ủ
Lõi IP UARTController được thiết kế với các đặc tính chính sau:
- Tương thích chuẩn công nghiệp 16550
- Giao tiếp với vi xử lý theo chuẩn bus AMBA APB
- Hỗ trợ tốc độ baud cấu hình được
- Khung dữ liệu 8 bit, 1 bit stop
- Hỗ trợ chế độ kiểm tra chẵn lẻ
- Hỗ trợ hoạt động điều khiển ngắt
- Hỗ trợ chế độ Auto Flow
- Sử dụng FIFO 8x16 trong hoạt động truyền và nhận dữ liệu
2.3 Thi t k m c ki n trúc: ế ế ứ ế
Từ cơ sở lý thuyết về UART đã trình bày trong chương 1,ta thiết kế đượclõi UART với các đặc trưng như yêu cầu.Sơ đồ tín hiệu vào ra của lõi UARTđược thể hiện theo Hình 2.1
Như đã đề cập ở trên,lõi UART sẽ giao tiếp với bus AMBA APB nên tínhiệu vào của UART là các tín hiệu điều khiển từ vi điều khiển thông qua APBbus
Tín hiệu vào UART còn là tín hiệu uart_rx là dữ liệu nhận được từ đường
truyền
Ngoài ra lõi UART còn nhận tín hiệu uart_cts để điều khiển truyền nhận tự động.Nếu tín hiệu uart_ctstích cực nghĩa là bên nhận đã nhận đầy vào RxFIFO
và đang yêu cầu UART phát dừng quá trình phát
Tín hiệu ra của khối UART là dữ liệu truyền đi trên đường truyền uart_tx.
Trang 24UART còn gửi đi tín hiệu uart_rts để thông báo bên phát dừng phát dữ liệu
nếu như RxFIFO nhận đã đầy
Ngoài ra UART gửi 5 tín hiệu ngắt,hoặc 1 tín hiệu ngắt tổ hợp về vi điềukhiển xử lý
Hình 2.1.Sơ đồ tín hiệu vào ra khối UART
Tên tín hiệu Độ dài bit Input/Output Chức năng
Trang 25Chương 2: THIẾT KẾ KHỐI UART
Bảng 2.1 Tín hiệu của lõi IP UARTController.
Từ sơ đồ tín hiệu trên ta xây dựng được sơ đồ khối tổng quát của UART.Đểthiết kế được khối UART hoàn chỉnh ta chia thành thiết kế 5 khối nhỏ (Hình 2.2)
- Khối AMBA APB INTERFACE: Chức năng chính của khối AMBA APBINTERFACE là thực hiện quá trình giao tiếp giữa UART với bus APB.Bên trongkhối này ta còn xây dựng thêm các khối nhỏ là khối các thanh ghi cấu hình,khốiđiều khiển ngắt cũng như TxFIFO
- Khối BAUD RATE GENERATOR:Quá trình truyền và nhận trong UART hoạtđộng dưa trên tốc độ baud,nên ta cần xây dựng 1 khối tạo tốc độ baud ngay tronglõi UART.Khối BAUD RATE GENERATOR này tạo tốc độ baud mong muốn
từ nguồn clock 50Mhz sẵn có của Kit FPGA
- Khối TRANSMITTER:nhận dữ liệu từ bus APB (apb_data),dịch từng bit và
truyền đi trên đường truyền
- Khối RECEIVER:nhận dữ liệu từ đường truyềnuart_rx, chuyển thành byte và
lưu vào RxFIFO
Hình 2.2.Sơ đồ khối tổng quát UART
2.4 Thanh ghi c u hình c aUART: ấ ủ
Trang 26Từ các đặc điểm kĩ thuật của UART, tập các thanh ghi cấu hình được xâydựng như Hình 2.3.
Hình 2.3.File thanh ghi cấu hình của UART.
Control Register – Thanh ghi điều khiển
TXT CON[1:0] TxFIFO Threshold Mức ngưỡngFIFO truyền
RXT CON[3:2] RxFIFO Threshold Mức ngưỡng FIFO nhận
CTX CON[4] 1 Clear TxFIFO Xóa nội dung FIFO truyền CRX CON[5] 1 Clear RxFIFO Xóa nội dung FIFO nhận
Status Register – Thanh ghi trạng thái
EN SE[0] 1 UART Enable Cho phép I2C hoạt động
D9 SE[1] 1 9 Bits Data Sử dụng bit parity
‘1’ – 8 / ‘0’ – 16 TXNF SE[5] 1 TxFIFO Not Full FIFO truyền không đầy
RXNE SE[6] 1 RxFIFO Not Empty FIFO nhận không rỗng
Read Only
Baud Rate Register – Thanh ghi tốc độ Baud
Data Register – Thanh ghi dữ liệu
DT DT[7:0] Data Dữ liệu truyền từ APB xuống
UART hoặc từ UART lên APB
Interrupt Enable Register– Thanh ghi cho phép ngắt
TIE IE[0] 1 Overrun Interrupt Enable Cho phép ngắt truyền
RIE IE[1] 1 Transmit Interrupt Enable Cho phép ngắt nhận
OIE IE[2] 1 Receive Interrupt Enable Cho phép ngắt Overrun
PIE IE[3] 1 Parity Interrupt Enalbe Cho phép ngắt kiểm tra chẵn lẻ FIE IE[4] 1 Frame Interrupt Enalbe Cho phép ngắt khung dữ liệu
Raw Interrupt Register – Thang ghi ngắt
Trang 27Chương 2: THIẾT KẾ KHỐI UART
TI IR[0] 1 Transmit Raw Interrupt Ngắt truyền
RI IR[1] 1 Receive Raw Interrupt Ngắt nhận
OI IR[2] 1 Overrun Raw Interrupt Ngắt Overrun
PI IR[3] 1 Parity Raw Interrupt Ngắt Parity
FI IR[4] 1 Frame Raw Interrupt Ngắt khung dữ liệu
Interrupt Flag Register – Thanh ghi cờ ngắt
TF IF[0] 1 Transmit Flag Cờ ngắt truyền
FF IF[4] 1 Frame Flag Cờ ngắt khung dữ liệu
Bảng 2.2 Tập thanh ghi cấu hình lõi IP I2C Controller.
2.5 Thi t k m c ch c năng: ế ế ứ ứ
Trên cơ sở thiết kế mức kiến trúc như trên,ta sẽ đi vào thiết kế sơ đồ chi tiếtcủa từng khối nhỏ.Có 5 khối nhỏ trong toàn bộ khối UART như trình bày ở trên.2.5.1 Kh i AMBA APB INTERFACE:ố
Hình 2.4.Sơ đồ khối khối AMBA APB INTERFACE
Từ các tín hiệu vào và ra của khối (Hình 2.4),ta sẽ xây dựng các cổng logicthực hiện chức năng của khối như sau:
2.5.1.1 Register File:
Để khối UART có thể hoạt động được thì trước hết ta phải cấu hình cho 5thanh ghi cấu hình nằm trong file thanh ghi của UART.Các tín hiệu điều khiểnquá trình ghi và đọc vào các thanh ghi cấu hình đến từ bus APB.Từ các tín hiệu
Trang 28điều khiển ghi,đọc,chọn lựa dữ liệu nhận từ bus APB,để cấu hình được cho cácthanh ghi ta phải xây dựng mạch logic như Hình 2.5.
Hình 2.5.Sơ đồ chi tiết mạch thực hiện chức năng ghi-đọc cho các thanh
ghi cấu hình
Quá trình ghi vào các thanh ghi cấu hình được thực hiện như sau:
- Như đã trình bày trong chương 1,hoạt động ghi cũng như đọc của bus APB dựa
trên 3 tín hiệu điều khiển chính psel,pwrite,penable.Khi 3 tín hiệu này được bật
lên 1 thì cho phép ghi vào các thanh ghi cấu hình.Lúc này tùy thuộc vào tín hiệu
chọn địa chỉ paddr mà dữ liệu pwdata sẽ ghi vào thanh ghi nào trong số 5 thanh
ghi cấu hình trên.Sau khi ghi dữ liệu vào các thanh ghi ta thực hiện gán các bittrong thanh ghi với các bit chức năng tương ứng như trong sơ đồ của thanh ghicấu hình (Hình 2.6)
Trang 29Chương 2: THIẾT KẾ KHỐI UART
Hình 2.6.Gán tín hiệu điều khiển.
Để đọc dữ liệu ra ta sử dụng 1 bộ mux với tín hiệu chọn lựa là paddr,dữ liệuđọc ra là prdata
2.5.1.2 C u trúc kh i TxFIFO:ấ ố
TxFIFO là bộ đệm cho quá trình truyền dữ liệu.Để xây dựng được khốiTxFIFOta phải xây dựng các khối write pointer (con trỏ ghi dữ liệu),read pointer(con trỏ đọc dữ liệu),memory aray (mảng bộ nhớ),status control (khối điều khiểntrạng thái)
Sơ đồ chi tiết của mảng bộ nhớ của FIFO như Hình 2.7
- Khi có tín hiệu ghi dt_we_txFIFOthì dữ liệu pwdata được ghi vào mảng bộ nhớ tại vị trí mà con trỏ ghi wptr trỏ đến.
- Tương tự,dữ liệu đọc ra apb_data[7:0] sẽ được đọc ra từ mảng bộ nhớ ở vị trí
mà con trỏ đọc rptr trỏ đến.Dữ liệu ngõ ra apb_data này sẽ được đưa đến thanh
ghi dịch trong khối TRANSMITTER và được truyền đi
Hình 2.7.Sơ đồ chi tiết mảng bộ nhớ
Sơ đồ chi tiết khối write pointer:
- Để có thể ghi dữ liệu vào mảng bộ nhớ ta phải ghi sử dụng đến con trỏ ghi wptr
như Hình 2.8
- Khi có tín hiệu ghi dt_we_txFIFO thì giá trị con trỏ ghi wptr tăng thêm 1.Ngược lại khi tín hiệu apb_ctx từ APB INTERFACE (xóa TxFIFO), wptr được gán giá trị bằng với rptr.
Trang 30Hình 2.8.Sơ đồ chi tiết con trỏ ghi
Sơ đồ chi tiết khối read poiter:
- Để đọc dữ liệu từ mảng bộ nhớ của FIFO, ta xây dựng thêm con trỏ đọc rptr như
Hình 2.9
- Tương tự như con trỏ ghi, khi tín hiệu dt_re_txFIFO bật lên 1 thì con trỏ đọc
rptr cũng tăng thêm 1.
Hình 2.9.Sơ đồ chi tiết con trỏ đọc rptr.
Sơ đồ chi tiết khối các tín hiệu trạng thái: khối này tạo ra các tín hiệu biểuthị trạng thái của FIFO nhưFIFOđầy hay rỗng, FIFO đã đạt ngưỡng haychưa.Mạch logic thực hiện các chức năng trên được minh họa như Hình 2.10
- Tín hiệu thông báo ngưỡng apb_threshold được tạo ra bằng cách tìm sự chênh
lệch giữa con trỏ ghi và con trỏ đọc,rồi so sánh hiệu này với mức ngưỡng đã cấu
hình trước theo apb_txt[1:0].
- Tín hiệu báo đầy hay rỗng được xác định bằng cách so sánh 2 con trỏ đọc và ghivới nhau
Trang 31Chương 2: THIẾT KẾ KHỐI UART
Hình 2.10.Sơ đồ chi tiết khối các tín hiệu trạng thái.
2.5.2 Kh i BAUD RATE GENERATOR:ố
Sơ đồ khối:
Trang 32Hình 2.12.Sơ đồ tín hiệu khối BAUD RATE GENERATOR
File thanh ghi cấu hình chứa 1 thanh ghi cấu hình tốc độ Baud Thanh ghinày dùng để lưu giá trị số BRG như trong công thức (1.2),để có thể tạo được tốc
độ baud mong muốn từ nguồn Clock hệ thống.Sơ đồ mạch chi tiết được thể hiệnnhư Hình 2.13
Ban đầu,ta khởi tạo tốc độ baud cho bên nhận brg_rxshift.Ta tạo ra 1 bộ đếm hoạt động ngay khi có tín hiệu cho phép khối UART hoạt động, apb_en.Giá trị bộ đếm sẽ được lưu vào biến brg_rxcounter.Sau đó,ta so sánh giá trị này với
số apb_brg được cấu hình trong thanh ghi cấu hình tốc độ baud ban đầu.Cứ mỗi lần giá trị đếm brg_rxcounter bằng với số apb_brg thì ta có 1 xung lên của
brg_rxshift.Ngõ ra brg_rxshift chính là tốc độ nhận dữ liệu vào UART.Như
vậy,tốc độ nhận brg_rxshift được chia từ pclk của hệ thốngapb_brg lần.
Tốc độ phát dữ liệu sẽ chậm hơn tốc độ nhận 8/16 lần.Cứ 8/16 xung
brg_rxshift ta được 1 xung phát tín hiệu brg_txshift.Trong thiết kế này,ta sử
dụng 1 bộ mux với bit chọn là apb_sel để lựa chọn giá trị 8 hay 16 tùy theo tốc
độ baud cần sử dụng
Trang 33Chương 2: THIẾT KẾ KHỐI UART
Hình 2.13.Sơ đồ chi tiết khối BAUD RATE GENERATOR
2.5.3 Kh i TRANSMITTER:ố
Sơ đồtín hiệu khối TRANSMITTER được cho ở Hình 2.13
Hình 2.14.Sơ đồ khối khối TRANSMITTER
Hoạt động của khối Transmitter có 2 trạng thái chính:IDLE vàTRANSMIT.Sự chuyển đổi giữa 2 trạng thái này được mô tả như trong Hình2.15
- Trạng thái IDLE:Ban đầu,khi có tín hiệu prst_n thì khối Transmitter chuyển về
trạng thái IDLE
Trang 34- Trạng thái TRANSMIT:Khi khối Transmitter đang ở trạng thái IDLE có tín hiệu
fsm_entích cực thì khối sẽ chuyến ngay sang trạng thái TRANSMIT.Khối sẽ giữ
trạng thái này cho đến khi tín hiệu apb_tx về 0 hay tín hiệu tx_completetích
cực.Nếu có 1 trong 2 điều kiện này xảy ra thì khối lại quay về trạng thái IDLEban đầu
Hình 2.15.Máy trạng thái hoạt động của khối Transmitter
Trong sơ đồ máy trạng thái này,các tín hiệu điều khiển chuyển đổi trạng
thái như fsm_en,apb_tx_en,tx_complete được tạo ra như Hình 2.16:
- Tín hiệu fsm_en:Tín hiệu cho phép máy trạng thái hoạt động.Ba tín hiệu ngõ vào gồm:brg_tx_shift(xung cho phép dịch dữ liệu theo tốc độ baud),apb_tx_en(TxFIFOchứa dữ liệu có thể phát) và uart_cts_mux.
- Tín hiệu apb_tx_en:Tín hiệu này là ngõ ra của 1 cổng AND gồm có 2 tín hiệu vào:tx_txne(tín hiệu cho biết TxFIFOkhông rỗng),apb_en(tín hiệu cho phép các
thành phần trong UART hoạt động)
- Tín hiệu tx_complete:Tín hiệu này bật lên 1 khi quá trình dịch dữ liệu hoàn tất,số bit đã truyền đi là 9(nếu apb_d9=0) hay 10(nếu apb_d9=1).
Trang 35Chương 2: THIẾT KẾ KHỐI UART
Hình 2.16.Máy trạng thái hoạt động của khối Transmitter
Để có thể truyền dữ liệu thì dữ liệu nhận từ bus APB apb_data trước hết
phải được lưu vào 1 thanh ghi dịch 10bit,sau đó sẽ dịch và truyền đi từng bit theo
xung brg_tx_shift.
Tùy theo có bit parity hay không mà giá trị đưa vào thanh ghi dịch
init_value sẽ khác nhau Khi có tín hiệu fsm_en thì dữ liệu init_value được nạp
vào thanh ghi dịch.Dữ liệu này được lưu ở đó chờ đến khi có tín hiệu tx_shift_en
bật lên 1 thì dữ liệu trong thanh ghi sẽ được dịch sang 1 bit.Cứ như vậy từng bit
dữ liệu sẽ được dịch và truyền đi lần lượt trong suốt quá trình phát dữ liệu(Hình2.17)
Hình 2.17.Thanh ghi dịch dữ liệu
2.5.4 Kh i RECEIVER:ố
Khối Receiver có chức năng nhận dữ liệu từ đường truyền uart_rx,lưu vào
bộ đệm dữ liệu RxFIFO.Sơ đồ tín hiệu vào ra được thể hiện như Hình 2.18
Trang 36Hình 2.18.Sơ đồ khối khối Receiver
Hoạt động của khối Receiver dựa trên 3 trạngthái:IDLE,START_BIT,RECEIVE được minh họa như Hình 2.19
- Trạng thái IDLE:Khi có tín hiệu reset prst_n hay khi tín hiệu apb_en chưa được
kích hoạt lên mức 1 thì khối Receiver ở trang thái IDLE
- Trạng thái START_BIT:Khối Receiver chuyển sang trạng thái START_BIT khi
có tín hiệu start_en.Trạng thái này được thiết kế để dò bit START trên đường truyền.Khi dã bắt được tín hiệu start_en thì trong trạng thái này sẽ lập tức khởi
động bộ đếm để tiến hành lấy mẫu tín hiệu
- Trạng thái RECEIVE:Sau khi tín hiệu cho phép dịch vào thanh ghi rx_shift_en
được set lên 1 thì khối sẽ chuyển sang hoạt động ở trạng thái RECEIVE.Ở trạngthái này,dữ liệu trên đường truyền sẽ được dịch vào thanh ghi dịch.Sau đó,dữ liệutrong thanh ghi dịch sẽ được lưu vào thanh ghi nhận RxFIFO chờ xử lý sau