lOMoARcPSD| 58728417
BÁO CÁO CUỐI KỲ HỌC PHẦN THIẾT KẾ HỆ THỐNG 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?
lOMoARcPSD| 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
lOMoARcPSD| 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.
lOMoARcPSD| 58728417
- Phân ch:
lOMoARcPSD| 58728417
lOMoARcPSD| 58728417
lOMoARcPSD| 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:
lOMoARcPSD| 58728417

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