meokonk

New Member

Download miễn phí Đề tài Thiết kế core I2C


MỤC LỤC i
DANH MỤC CÁC BẢNG BIỂU iii
DANH MỤC CÁC HÌNH VẼ iii
DANH MỤC CÁC TỪ VIẾT TẮT iii
LỜI NÓI ĐẦU vi
CHƯƠNG 1: NGÔN NGỮ VERILOG VÀ PHẦN MỀM THIẾT KẾ, MÔ PHỎNG 1
1.1 Giới thiệu sơ lược về ngôn ngữ lập trình Verilog [4] 1
1.1.1 Mô tả 1
1.1.2 Tại sao sử dụng Verilog ? 1
1.1.3 Một số qui ước thiết kế [1] 2
1.1.3.1 Cấu trúc chương trình: 3
1.1.3.2 Các kiểu dữ liệu và vùng nhớ: 3
1.1.3.3 Toán tử 4
1.1.3.4 Các cấu trúc điều khiển 6
1.1.3.5 Điều khiển theo sự kiện 7
1.1.3.6 Sự kết hợp giữa nhiều module 8
1.2 Phần mềm thiết kế vi mạch Quartus II [4] 9
1.2.1 Giới thiệu về phần mềm Quartus II 9
1.2.2 Chức năng của phần mềm Quartus II 9
1.2.2.1 Design Entry (Thiết kế ban đầu) 9
1.2.2.2 Tổng hợp (Synthesis) 10
1.2.2.3 Nối dây và định vị các phần tử-Fitting (Placement and Routing) 10
1.2.2.5 Programing and Configuration 10
1.3. Phần mền mô phỏng Modelsim Altera [4] 10
CHƯƠNG 2: CHUẨN GIAO TIẾP I2C VÀ BỘ ĐIỀU KHIỂN BUS I2C PCF8584 11
2.1 Chuẩn giao tiếp I2C [3] 11
2.1.1 Giới thiệu chung về chuẩn giao tiếp I2C 11
2.1.2 Đặc điểm giao tiếp I2C 11
2.1.2.1 Điều kiện START và STOP (START and STOP conditions) 14
2.1.2.2 Định dạng dữ liệu truyền 15
2.1.2.3 Định dạng địa chỉ thiết bị 16
2.1.2.4 Truyền dữ liệu trên bus I2C, chế độ Master - Slave 17
2.1.2.5 Chế độ Multi‐Master 19
2.2 Bộ điều khiển bus I2C PCF8584 20
2.2.1 Đặc điểm [2] 20
2.2.2 Sơ đồ và chức năng các chân 22
2.2.3 Miêu tả các thanh ghi [2] 23
2.2.3.1 Thanh ghi địa chỉ nội S0’ 23
2.2.3.2 Thanh ghi đồng hồ S2 23
2.2.3.3 Thanh ghi vector ngắt S3 24
2.2.3.4 Thanh ghi dịch/đệm (shift register/read buffer) dữ liệu S0 25
2.2.4 Truy cập các thanh ghi 28
2.2.5 Giản đồ định thì ở các chế độ hoạt động 29
2.2.6 RESET và STROBE: 31
2.2.7 Cách chọn chế độ giao tiếp 31
2.2.8 Sơ đồ giao tiếp với các vi điều khiển/vi xử lý 33
CHƯƠNG 3: THIẾT KẾ VÀ MÔ PHỎNG LÕI IP CORE MỀM ĐIỀU KHIỂN BUS I2C 34
3.1 Giới thiệu chức năng 34
3.2 Sơ đồ chân 35
3.3 Sơ đồ khối 36
3.3.1 Mô tả chức năng và mục đích các khối 37
3.3.2 Mô tả các thanh ghi 37
3.4 Thiết kế và phân tích các khối 39
3.4.1 Khối cpu_interface 39
3.4.1.1 chức năng 39
3.4.1.2 Sơ đồ chân 42
3.4.1.3 Mô tả chân 43
3.4.1.4 Giản đồ định thời 45
3.4.2 Khối control 46
3.4.2.1 chức năng 46
3.4.2.2 Sơ đồ chân 46
3.4.2.3 Mô tả chân 47
3.4.2.4 Quá trình hoạt động : 48
3.4.2.5 Lưu đồ hoạt động của từng trạng thái: 51
3.4.3 Khối i2c_interface 51
3.4.3.1 chức năng: 51
3.4.3.2 Mô tả chân 52
3.4.3.3 Các trạng thái hoạt động của khối: 54
3.4.3.4 Mô tả hoạt động từng trạng thái: 54
3.4.3.5 Các loại mạch được sử dụng trong khối i2c_interface 56
3.4.3.6 Giản đồ timing hoạt động của khối: 58
3.4.4. Khối compare 60
3.4.4.1 Mô tả chân 60
3.4.4.2 Hoạt động chi tiết của khối compare 61
3.4.5. Khối clock_generator 62
3.4.5.1 Mô tả chân 62
3.4.5.2 chức năng 63
3.4.6. Khối interrupt 64
3.4.6.1 Mô tả chân 64
3.4.6.2 Mục đích 65
3.4.6.3 Thực hiện 65
3.5 Kết quả mô phỏng 65
3.5.1 Chủ truyền – Tớ nhận (Master Transmitter – Slave Receiver) 65
3.5.2 Chủ nhận – Tớ truyền (Master Receiver - Slave Transmitter) 66
3.5.3 Tiếp tục trao đổi dữ liệu sau khi phát lệnh Stop: 67
3.5.3 Restart khi đang trao đổi dữ liệu: 72
3.5.4 Bus lỗi: 74
CHƯƠNG 4: KẾT LUẬN CHUNG VÀ HƯỚNG PHÁT TRIỂN CỦA ĐỀ TÀI 76
4.1 Nhận xét chung 76
4.1.1 Những kết quả đạt được 76
4.1.2 Những giới hạn tồn tại 76
4.2 Hướng phát triển 77
TÀI LIỆU THAM KHẢO 77

DANH MỤC CÁC BẢNG BIỂU
Bảng 2.1 Sơ đồ và chức năng chân PCF8584 [2] 22
Bảng 2.2 Thiết lập giá trị đường SCL bằng các bit S21,S20 [2] 24
Bảng 2.3 Giá trị các bit S24, S23, S22 tương ứng với giá trị tần số đồng hồ ở chân CLK [2] 24
Bảng 2.4 Thanh ghi điều khiển/trạng thái S1 [2] 26
Bảng 2.5 Giá trị bit STA-STO 27
Bảng 2.6 Cách truy cập các thanh ghi của PCF8584 29
Bảng 2.7 Các tín hiệu tự động cài đặt bởi PCF8584 khi giao tiếp với vi điều khiển / vi xử lý [2] 32
Bảng 3.1 Sơ đồ chân I2C Core 35
Bảng 3.2 Các thanh ghi 37
Bảng 3.3 Chức năng các bit của thanh ghi S1 control (S1c) 37
Bảng 3.4 Chức năng các bit của thanh ghi S1 status (S1s) 38
Bảng 3.5 Thanh ghi data_buffer (S0d) 39
Bảng 3.6 Mô tả chân khối cpu_interface 43
Bảng 3.7 Giải mã địa chỉ các thanh ghi 44
Bảng 3.8 Mô tả chân khối control 47
Bảng 3.9 Mô tả chân khối i2c_interface 52
Bảng 3.10 Bảng lựa chọn giữa gen_clko và scli 578
Bảng 3.11 Mô tả chân khối compare 601
Bảng 3.12 Mô tả chân khối clock_generetor 623
Bảng 3.13 Bảng chia tần số đường SCL 63
Bảng 3.14 Bảng chia tần số clock hoạt động của Core 634
Bảng 3.15 Mô tả chân khối interrupt 645

Tóm tắt nội dung tài liệu:
(Standard mode) và chế độ nhanh (Fast mode) [3]
Mỗi dây SDA hay SCL đều được nối với điện áp dương của nguồn cấp thông qua một điện trở kéo lên (pullup resistor). Sự cần thiết của các điện trở kéo này là vì chân giao tiếp I2C của các thiết bị ngoại vi thường là dạng cực máng hở (opendrain hay opencollector). Giá trị của các điện trở này khác nhau tùy vào từng thiết bị và chuẩn giao tiếp, thường dao động trong khoảng 1KΩ đến 4.7KΩ.
Trở lại với hình 3.1, ta thấy có rất nhiều thiết bị (ICs) cùng được kết nối vào một bus I2C, tuy nhiên sẽ không xảy ra chuyện nhầm lẫn giữa các thiết bị, bởi mỗi thiết bị sẽ được nhận ra bởi một địa chỉ duy nhất với một quan hệ chủ/tớ tồn tại trong suốt thời gian kết nối. Mỗi thiết bị có thể hoạt động như là thiết bị nhận hay truyề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 thuộc vào việc thiết bị đó là chủ (master) hay tớ (slave).
Một thiết bị hay một IC khi kết nối với bus I2C, ngoài một địa chỉ (duy nhất) để phân biệt, nó còn được cấu hình là thiết bị chủ hay tớ .Tại sao lại có sự phân biệt này ? Đó là vì trên mộ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ốt quá trình giao tiếp. Thiết bị chủ giữ vai trò chủ động, còn thiết bị tớ giữ vai trò bị động trong viêc giao tiếp.
Hình 2.3 Truyền nhận dữ liệu giữa chủ/tớ [3]
Nhìn hình trên ta thấy xung đồng hồ chỉ có một hướng từ chủ đến tớ, còn luồng dữ liệu có thể đi theo hai hướng, từ chủ đến tớ hay ngược lại tớ đến chủ.
Về dữ liệu truyền trên bus I2C, một bus I2C chuẩn truyền 8bit dữ liệu có hướng trên đường truyền với tốc độ là 100 kbit/s – Chế độ chuẩn (Standard mode). Tốc độ truyền có thể lên tới 400 kbit/s -Chế độ nhanh (Fast mode) và cao nhất là 3,4 Mbit/s – Chế độ cao tốc (High speed mode).
Một bus I2C có thể hoạt động ở nhiều chế độ khác nhau:
- Một chủ một tớ (one master – one slave)
- Một chủ nhiều tớ (one master – multi slave)
- Nhiều chủ nhiều tớ (Multi master – Multi slave)
Dù ở chế độ nào, một giao tiếp I2C đều dựa vào quan hệ chủ/tớ. Giả thiết một thiết bị A muốn gửi dữ liệu đến thiết bị B, quá trình được thực hiện như sau:
-Thiết bị A (Chủ) xác định đúng địa chỉ của thiết bị B (tớ), cùng với việc xác định địa chỉ, thiết bị A sẽ quyết định việc đọc hay ghi vào thiết bị tớ
-Thiết bị A gửi dữ liệu tới thiết bị B
- Thiết bị A kết thúc quá trình truyền dữ liệu
Khi A muốn nhận dữ liệu từ B, quá trình diễn ra như trên, chỉ khác là A sẽ nhận dữ liệu từ B. Trong giao tiếp này, A là chủ còn B vẫn là tớ. Chi tiết việc thiết lập một giao tiếp giữa hai thiết bị sẽ được mô tả chi tiết trong các mục dưới đây.
2.1.2.1 Điều kiện START và STOP (START and STOP conditions)
START và STOP là những điều kiện bắt buộc phải có khi một thiết bị chủ muốn thiết lập giao tiếp với một thiết bị nào đó trên bus I2C. START là điều kiện khởi đầu, báo hiệu bắt đầu của giao tiếp, còn STOP báo hiệu kết thúc một giao tiếp. Hình dưới đây mô tả điều kiện START và STOP.
Ban đầu khi chưa thực hiện quá trình giao tiếp, cả hai đường SDA và SCL đều ở mức cao (SDA = SCL = HIGH). Lúc này bus I2C được coi là rỗi (“bus free”), sẵn sàng cho một giao tiếp. Hai điều kiện START và STOP là không thể thiếu trong việc giao tiếp giữa các thiết bị I2C với nhau.
Hình 2.4 Điều kiện START và STOP của bus I2C [3]
Đ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. Cả hai điều kiện START và STOP đều được tạo ra bởi thiết bị chủ. Sau tín hiệ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ủ.
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 START được lặp lại 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. Tín hiệu START và lặp lại START (Repeated START) đều có chức năng giống nhau là khởi tạo một giao tiếp.
2.1.2.2 Định dạng dữ liệu truyền
Dữ liệu được truyền trên bus I2C theo từng bit, bit dữ liệu được truyền đi tại mỗi cạnh lên của xung đồng hồ trên dây SCL, quá trình thay đổi bit dữ liệu xảy ra khi SCL đang ở mức thấp.
Hình 2.5 Quá trình truyền 1 bit dữ liệu [3]
Mỗi byte dữ liệu được truyền có độ dài là 8 bit. Số lượng byte có thể truyền trong một lần là không hạn chế. Mỗi byte được truyền đi theo sau là một bit ACK để báo hiệu đã nhận dữ liệu. Bit có trọng số cao nhất (MSB) sẽ được truyền đi đầu tiên, các bit sẽ được truyền đi lần lượt. Sau 8 xung clock trên dây SCL, 8 bit dữ liệu đã được truyền đi. Lúc này thiết bị nhận, sau khi đã nhận đủ 8 bít dữ liệu sẽ kéo SDA xuống mức thấp tạo một xung ACK ứng với xung clock thứ 9 trên dây SDA để báo hiệu đã nhận đủ 8 bit. Thiết bị truyền khi nhận được bit ACK sẽ tiếp tục thực hiện quá trình truyền hay kết thúc.
Hình 2.6 Dữ liệu truyền trên bus I2C [3]
Hình 2.7 Bit ACK, Not-ACK trên bus I2C [3]
Một byte truyền đi có kèm theo bit ACK là điều kiên bắt buộc, nhằm đảm bảo cho quá trình truyền nhận được diễn ra chính xác. Khi không nhận được đúng địa chỉ hay khi
muốn kết thúc quá trình giao tiếp thiết bị nhận sẽ gửi một xung Not-ACK(SDA ở mức cao) để báo cho thiết bị chủ biết, thiết bị chủ sẽ tạo xung STOP để kết thúc hay lặp lại một xung START để bắt đầu quá trình mới.
2.1.2.3 Định dạng địa chỉ thiết bị
Mỗi thiết bị ngoại vi tham gia vào bus I2C đều có một địa chỉ duy nhất, nhằm phân biệt giữa các thiết bị với nhau. Độ dài địa chỉ là 7 bit, điều đó có nghĩa là trên một bus I2C ta có thể phân biệt tối đa 128 thiết bị. 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.
Hình 2.8 Cấu trúc byte dữ liệu đầu tiên [3]
Mỗi một thiết bị ngoại vi sẽ có một địa chỉ riêng do nhà sản xuất ra nó quy định. Địa chỉ đó có thể là cố định hay thay đổi. 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ừ con tớ gửi đến con chủ. Việc thiết lập giá trị cho bit này do con chủ thi hành, con tớ sẽ tùy theo giá trị đó mà có sự phản hồi tương ứng đến con chủ.
Hiện nay có thể đánh địa chỉ các thiết bị trên bus I2C dưới dạng 10bit địa chỉ.Việc thực hiện đánh dấu địa chỉ theo khung 10bit được thực hiện


Link download:
 
Top