TRƯỜNG ĐẠI HỌC BÁCH KHOA TPHCMKHOA ĐIỆN – ĐIỆN TỬ BÀI TẬP LỚN THIẾT KẾ VI MẠCH THIẾT KẾ BỘ ĐẾM LÊN VÀ ĐẾM XUỐNG GVHD: Trần Hoàng Quân SINH VIÊN THỰC HIỆN: Hà Huy Đức Thành phố Hồ
Trang 1TRƯỜNG ĐẠI HỌC BÁCH KHOA TPHCM
KHOA ĐIỆN – ĐIỆN TỬ
BÀI TẬP LỚN THIẾT KẾ VI MẠCH
THIẾT KẾ BỘ ĐẾM LÊN VÀ ĐẾM XUỐNG
GVHD: Trần Hoàng Quân
SINH VIÊN THỰC HIỆN: Hà Huy Đức
Thành phố Hồ Chí Minh, năm 2022
Trang 3I. Tổng quan lí thuyết
1.Thiết kế cấp độ Specification
- Sơ đồ thiết kế:
Hình 1: Sơ đồ thiết kế mạch counter
- Cách thức hoạt động của bộ trên:
+ Đưa cnt_in vào bộ counter ( Mình tự ghi giá trị đếm bắt đầu là 25)
+ Khi có xung clk cạnh lên, bộ đếm sẽ kiểm tra giá trị tín hiệu load,
+ Load= 1 thì cnt_in = cnt_in ( ban đầu)
Mode =1 cnt_out = cnt_in +1;
Mode =0 cnt_out = cnt_in – 1;
+ Load =0 thì cnt_in = cnt_out (trước đó)
Mode =1 cnt_out = cnt_in + 1;
Mode =0 thì cnt_out = cnt_in – 1;
- Ý tưởng thiết kế:
+ Ban đầu đọc file hướng dẫn thì chúng em có hình dung được cơ chế hoạt động của
mạch đếm lên và đếm xuống Theo bàn luận của cả nhóm thì thiết kế thành 1 khối lớn
trong đó vừa có đếm lên, đếm xuống vừa nhận tín hiệu load và lệnh mode cho khối
counter
II. Thực hiện thiết kế
1. Mạch thiết kế cấp cổng dùng Verilog
Dựa vào sơ đồ khối thiết kế trên, chúng em đã tạo bộ counter tên boxuli.v – dùng
ngôn ngữ Verilog để lập trình
Trang 4Hình 2: Dùng verilog thiết kế module
Giải thích từng đoạn lệnh:
Hình 3: Phần lệnh khai báo
- Khai báo về counter
- Khai báo mode, c_in[15:0], load, cnt_out[15:0],clk,rst
Tạo thêm 1 biến temp để giữ giá trị
TIEU LUAN MOI download : skknchat@gmail.com
Trang 5Hình 4: Phần lệnh thực hiện
2. Kiểm định RTL
a File testbench.v
Hình 5: File code testbench
- Ý nghĩa các lệnh code:
+ Khai báo các
- Màn hình sau khi chạy terminal của makefile
Cập nhật nhận 1 xung cạnh lên để
thực hiện câu lênh Gán giá trị cnt_in ban đầu vào temp - kiếm tra giá trị load:
+ nếu load =1 lưu cnt_in vào tạm, cnt_out=
cnt_in +1 nếu mode=1;
+ Nếu load =0:
mode =1 tăng biến tạm và lưu biến tạm vào cnt_out
Ngược lại nếu mode =0 giảm biến tạm và lưu biến tạm vào cnt_out
Trang 6Hình 6: Màn hình terminal sau khi chạy Makefile
+ Trên màn hình terminal sau khi chạy Makefile ta thấy được: cntout tại các giá trị mình xuất,
quan sát đc ngõ ra khi mình thay đổi load Thời gian CPU thực hiện, bao gồm cả biên lịch,
elab, link và mô phỏng
- Mô phỏng DVE
Hình 7: Dạng sóng và các câu lệnh thực hiện ở DVE
- Giải thích: I từ 0 tới 100 chúng ta cho chạy câu lệnh mode=1 và load =0 thì câu lệnh
cntout = cnt out (trước đó) + 1 nhưng đến khi câu lệnh tới i=10 thì câu lệnh đổi thành
mode 1 và load =1 lúc đó cntout=cntin+1 Tới câu lệnh i= 15 thì câu lệnh đổi thành
mode =0 và load =1 lúc đó cntout = cntin -1 Tới i=20 câu lệnh là mode =0 và load =0
thì cntout = cntout( trước đó) -1
TIEU LUAN MOI download : skknchat@gmail.com
Trang 73. Synthesis tổng hợp
Hình 8: Nội dung file dc_command.src
- File Verilog sau khi synthesis thành công
Thêm thư viện
Các file RTL cần phân tích
và file RTL cần synthesis Thiết kế ràng buộc
Chạy synthesis và lưu các file report + RTL đã synthesis( file lab_synth.netlist.v
Trang 10Hình 9: File verilog đã synthesis
- File report.timing
TIEU LUAN MOI download : skknchat@gmail.com
Trang 11Hình 10: File report.timing
- Giải thích: file này kiểm tra setup time dùng Path Type (max), hold time dùng Incr
(min) để kiểm tra các giá trị Slack (MET) = data require time – data arrival time có
nghĩa là các điều kiện đều thỏa mãn
4.Kiểm định netlist
- Kiểm tra matching: thì điều kiện matching đã thành công
Trang 12Hình 11: Kiểm tra Matching trong formality
- Kiểm tra verify: đã thành công
Hình 12: Kiểm tra verify
III. Kêt luận
1.Nhận xét
Trong quá trình làm bài thì khó khăn của chúng em là viết file boxuli.v làm sao để tối
ưu các câu lệnh nhất và những khó khăn khi tiếp xúc với một phần mềm mới
TIEU LUAN MOI download : skknchat@gmail.com
Trang 132.Kết luận
Sau khi làm mô phỏng và thực hiện thấy các chương trình mô phỏng đều chạy ổn và
chạy đúng với ý tưởng ban đầu của mình đề ra