You are on page 1of 13

TRƯỜ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


I. 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.
Hì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ị.
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

Hì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
Hì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.
3. Synthesis tổng hợp

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

Hình 8: Nội dung file dc_command.src

- File Verilog sau khi synthesis thành công


Hình 9: File verilog đã synthesis

- File report.timing
Hì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
Hì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.
2. 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.

You might also like