







Preview text:
  lOMoAR cPSD| 58728417
BÁO CÁO CUỐI KỲ HỌC PHẦN THIẾT KẾ HỆ THỐNG VÀ VI MẠCH TÍCH HỢP  (Bản nháp)  Đề tài: I2C  GVHD: Đỗ Duy  Tân  1. Nguồn tham khảo: 
- Sử dụng project Verilog-i2c của tác giả Alex Forencich 
h ps://github.com/alexforencich/verilog-i2c 
2. chuẩn bị cho mô phỏng: 
Lưu ý: Đối với laptop windows 
- B1: Download phần mềm khởi tạo máy ảo Vmware. 
- B2: Tạo một máy ảo sử dụng Ubuntu, các bạn có thể tham khảo trên youtube. 
- B3: Cài đặt MyHDL và GTKwave để mô phỏng  - B4: 
 + nhấp chuột phải, chọn open terminal 
 + paste các lệnh sau vào rồi enter: 
sudo apt update sudo apt install 
iverilog gtkwave sudo apt install 
python3 python3-pip pip3 install  myhdl 
- B5: biên dịch ra thư viện myhdl.vpi để sử dụng cho mô phỏng 
+ hãy vào thư mục myhdl bạn vừa cài 
+ m thư mục cosimula on -> Icarus 
+ mở terminal tại thư mục Icarus lên rồi gõ lệnh make để biên dịch 
+ kiểm tra xem myhdl.vpi đã xuất hiện chưa?        lOMoAR cPSD| 58728417     3. Mô Phỏng:  - 
Để hiểu rõ về cơ chế hoạt động của I2C chỉ cần m hiểu về module I2C_master.v và 
I2C_slave.v. Hãy vào đường link ở đầu trang, download, dowload các file được khoanh đỏ    - 
khi mô phỏng có thể sẽ mắc một số lỗi liên quan tới đường dẫn đến file thư viện 
myhdl.vpi hay module rtl, bạn có thể copy lỗi và đường link nguồn tha khảo lên chatgpt để hỏi, 
vì mỗi máy sẽ khác nhau nên mình không thể đưa ra 1 cách sửa chung được, hoặc liên hệ email 
của mình Khanhhoang.030604@gmail.com  a. mô phỏng I2C_master.v: 
mở terminal tại thư mục chứa các file đó mà gõ: python3 test_i2c_master.py sau đó enter, sẽ 
xuất hiện hai file là test_i2c_master.vvp và test_i2c_master.lxt để xem dạng sóng thì gõ 
“gtkwave test_i2c_master.lxt” sẽ có giao diện như sau: muốn hiển thị sóng của n hiệu nào 
thì chọn bên góc trái màn hình      lOMoAR cPSD| 58728417  
- giải thích ý nghĩa của các n hiệu:  - Lệnh (Commands): 
• read: Đọc 1 byte từ slave; có thể yêu cầu điều kiện START và STOP; nếu có STOP, n hiệu 
cuối (tlast) sẽ được đặt. 
• Write: Ghi 1 byte. start sẽ tạo điều kiện START nếu cần; stop phát điều kiện STOP sau  ghi. 
• write mul ple: Ghi nhiều byte liên ếp cho đến khi nhận tlast. start/stop hoạt động tương tự  lệnh ghi đơn. 
• stop: Phát điều kiện STOP nếu bus đang hoạt động.    - Trạng thái (Status): 
• busy: Module đang giao ếp trên bus. 
• bus_control: Module đang điều khiển bus. 
• bus_ac ve: Bus đang hoạt động (có thể do master khác). 
• missed_ack: Slave không phản hồi ACK.    - Tham số (Parameters): 
• prescale: Xác định tốc độ SCL. Tính theo: prescale = Fclk / (FI2Cclk ×  4) • 
stop_on_idle: Tự động phát STOP nếu không có lệnh mới.      lOMoAR cPSD| 58728417       - Phân ch:      lOMoAR cPSD| 58728417       lOMoAR cPSD| 58728417           lOMoAR cPSD| 58728417
b. I2C_slave.v các bước mô phỏng tương  tự i2c_master 
- Module này dịch các thao tác đọc và ghi I2C thành các luồng truyền AXI. 
- Các byte được ghi qua I2C sẽ bị trì hoãn một khoảng thời gian bằng một byte để đảm bảo 
byte cuối cùng trong quá trình ghi có thể được đánh dấu chính xác. 
- Khi đọc, module sẽ kéo n hiệu SCL xuống mức thấp cho đến khi một byte dữ liệu được 
trình bày tại đầu vào luồng AXI. 
- Điều khiển:release_bus:Giải phóng quyền điều khiển bus.  - Trạng thái: 
• busy:Module đang thực hiện giao ếp trên bus. 
• bus_address:Địa chỉ đang hoạt động trên bus khi module được gán địa chỉ. 
• bus_addressed:Module hiện tại đang được gán địa chỉ trên bus. 
• bus_ac ve:Bus đang hoạt động, không nhất thiết phải do module này điều khiển.  - Thông số: 
• device_address:Địa chỉ của thiết bị slave. 
• device_address_mask:Chọn các bit của địa chỉ thiết bị để so sánh, thiết lập thành 
7'h7f để kiểm tra tất cả các bit (thiết bị có địa chỉ đơn).  - Phân ch:        lOMoAR cPSD| 58728417