You are on page 1of 16

Tổng hợp kiến thức về thiết kế vi mạch số

(compiled by Nhan Tran)

Dẫn nhập:
Tài liệu này phục vụ cho các bạn SV yêu thích lĩnh vực IC design và phục vụ môn học
EE3113 (Quy trình thiết kế và sản xuất vi mạch, GV: PGS.TS. Hoàng Trang).
Tài liệu này được soạn bởi anh SV K14 Trần Văn Nhân theo yêu cầu của thầy Hoàng
Trang.
Anh Nhân K14 đã học và làm được, soạn tài liệu này. Vậy, tại sao các bạn lại không?
Không có lý do nào cả. Cố gắng nhé các bạn SV. Good luck.

Tôi rất hy vọng các bạn vì tương lai của các bạn, hãy học tập 1 cách nghiêm túc, không
những trong môn học này mà còn trong mọi môn học khác, trong mọi lĩnh vực khác.

---------------~~~~~~~~~~~~~~~~~~~~~------------

Tài liệu sẽ đẫn dắt người đọc từng bước thực hiện để thiết kế vi mạch số. Các kiến thức căn
bản cũng như cần thiết, cốt lõi nhất trong thiết kế vi mạch số.
Nội dung kiến thức của tài liệu bao gồm:
- Sử dụng Linux phục vụ cho việc thiết kế cũng như mô phỏng
- Hướng đẫn cách xây dựng một môi trường (build enviroment) để tiến hành mô
phỏng cho đoạn code RTL (đây là code chính để mang đi thực hiện thành CHIP)
- Sử dụng ngôn ngữ Perl phục vụ cho thiết kế
- RTL design (verilog & testbench : phần này sẽ không được đề cập nhiều trong nội
dung của tài liệu, tác giả sẽ cung cấp tài liệu cũng như chia sẻ những kinh nghiệm
trong việc thực hiện RTL design)
Vị trí bắt đầu của tài liệu là: Người đọc đã có cài máy ảo Oracle VM VirtualBox và tool
VCS trên máy tính
Mục đích của tài liệu: Tác giả muốn người đọc dù là người mới bắt đầu, hay là người đã
biết qua về TKVMS thì sau khi xem qua tài liệu cũng có thể sử dụng để TKVMS một cách
dễ dàng.
1. Tổng hợp kiến thức về Linux
Tại sao phải sử dụng linux: linux là hệ điều hành mã nguồn mở không tốn phí cài đặt,
nhiều tool được các công ty viết trên linux đê phục vụ cho TKVMS, ví dụ như tool VCS
mà chúng ta đang sử dụng.
Sử dụng Linux cũng giống như sử dụng hđh Windown nhưng hầu như tất cả các thao tác
đều được thực hiện trên Terminal( khá giống với Command Promt trong Windown), như
di chuyển ra/vào thu mục, mở 1 tập tin, copy, cut, xóa…
 Command Line, Linux &Bash-Shell language
- Cài đặt ban đầu: để setup tool cho việc mô phỏng về sau
B1: Trong Terminal gõ lệnh “vi ~/.bashrc” để mở file ./bashrc ( file này là file config có thể
dùng để định nghĩa một lệnh mới trong Linux)

Sau khi đánh lệnh:


Tại dòng l=’clear; pwd; ls’ có nghĩa là định nghĩa một lệnh “l” kết hợp từ 3 lệnh clear , pwd
và ls.
Tại dòng có getlicense, dòng này để setup cho trước khi sử dụng tool VCS. Lưu ý: dòng
này luôn được thực hiện trước khi ta muốn sử dụng tool VCS.
Tại dòng có dve, dòng này để setup lệnh dve, để gọi một waveform (để xem sơ đồ dạng
sóng khi mô phỏng), sau này chỉ cần gõ lênh “dve” trong terminal là có thể mở phần mềm
lên.

- Các lệnh thường được sử dụng trong linux


Phần này khá quan trọng, tác giả sẽ gửi tài liệu đính kèm cùng với tài liệu này, người đọc
có thể tự thực hành trực tiếp trên hđh linux của mình.
Tài liệu tham khảo
01_03_Command_Line_Bash-Shell.pdf
 Sử dụng trình soạn thảo VI
Trình soạn thảo vi là trình soạn thảo được khuyên dùng cho kỹ sư TKVMS, khi sử dụng
thông thạo sẽ làm tăng tốc độ chỉnh sửa, kiếm lỗi, gỡ lỗi…
Trình soạn thảo vi có thể mở được nhiều file có đuôi như là .txt .sv .v … nhưng đối với
người TKVMS thì đuôi .v(file để viết code verilog) thường được sử dụng nhất.
Phần này cũngkhá quan trọng, tác giả sẽ gửi tài liệu đính kèm cùng với tài liệu này, người
đọc có thể tự thực hành trực tiếp trên hđh linux của mình.
03_Using_VI.pdf
2. Hướng dẫn xây dựng một môi trường cho việc mô phỏng
- Trong phần này tác giả sẽ lấy một ví dụ cụ thể nhằm giải thích rõ ràng cho người đọc.
Nội dung của thiết kế này là thiết kế ra một IC có thể cộng trừ nhân chia (tạm gọi là bộ tính
toán) từ 2 giá trị ngõ vào để đưa ra kết quả ở ngõ ra.
- Cụ thể: Ở ngõ vào các giá trị sẽ được lưu trong 2 file .txt. môi trường sử dụng ngôn ngữ
perl để đọc 2 file .txt này để lưu vào 2 bộ nhớ (memory) ảo cũng được tạo ra từ file perl
này.
Tiếp đến sẽ có 1 file testbench, có nhiệm vụ đọc giá trị của 2 bộ nhớ này đưa giá trị lần lượt
vào bộ tính toán( file rtl code).
Kết quả sau khi được tính toán sẽ được đưa ra một file log_alu.txt (file này chứa toàn bộ
kết quả tiến hành chạy mô phỏng tool VCS)
Cuối cùng một file perl được viết để sủ dụng file log_alu.txt ở trên, chọn kết quả mong
muốn để xuất ra .txt chứa kết quả cuối cùng.

Hình trên là sơ đồ thư mục của một môi trường cụ thể:


/home/student/Work/09_env_du: đây là đường đẫn của thư mục này.
01_Design: thư mục này chứa toàn bộ thiết kế. bao gồm tất cả các file code rtl, code
testbench.
02_Simulate: chứa tất cả các file perl, và có thư mục run (thường là nơi đứng để chạy mô
phỏng).
03_Scripts: chứa các file perl để đọc giá trị ở file .txt ngõ vào và tạo ra 2 bộ nhớ ảo, ngoài
ra còn chứa các file .txt là giá trị ngõ vào và file .txt là kết quả ngõ ra cuối cùng.
04_Lib: là thư mục chứa tất cả thư viện được sử dụng khi viết code RTL( trong ví dụ môi
trường này tác giả không sử dụng cách gọi thư viện mà viết trực tiếp trong file RTL code)
05_Sim_Log: là thư mục chứa file log_alu.txt là file khi chạy mô phỏng tool VCS xuất ra,
đã được đề cập ở trên.

 Khám phá 01_Design


Hình bên dưới cho thấy các file trong 01_Design

File floating_point_adder.v file này được viết để thực hiện bộ cộng, với 2 tín hiệu ngõ vào
File floating_point_division.v file này được viết để thực hiện bộ chia, với 2 tín hiệu ngõ
vào
File floating_point_multiple.v file này được viết để thực hiện bộ nhân, với 2 tín hiệu ngõ
vào
File floating_point_subtract.v file này được viết để thực hiện bộ trừ, với 2 tín hiệu ngõ vào
File alu.v là một file top, file này có tác dụng là nối tất cả các file trên lại tạo thành một khối
hoàn chỉnh, người đọc có thể hình dung quá sơ đồ khối bên dưới

File t_alu.v là file testbench file này để đẩy các giá trị vào bộ alu.v theo từng chu kỳ một,
nhằm thu được giá trị sau khi tính toán ở ngõ ra.
File mem_1.v và mem_2.v là file sau khi chạy các file perl (sẽ được đề cập sau) sẽ xuất ra
2 file này. Đây là bộ nhớ ảo mà đã được đề cập ở trước.
Các file còn lại chỉ là các file tham khảo, thực hiện thêm của tác giả, người đọc có thể
không cần quan tâm đến các file này.
- Trong phần này ta sẽ không đề cập vào các file code rtl, các file này phụ thuộc vào bài
toán thiết kế của mỗi người. Mà tập trung mổ xẻ file testbench.
File testbench này có nhiệm vụ đưa các giá trị ở ngõ vào, tạo xung clock, tạo file để đưa
vào waveform xem sơ đồ sóng.
Dưới đây là đoạn code verilog trong file t_alu.v
 Khám phá 02_Simulate
Các file perl như: perl_tee_add.pl, perl_tee_sub.pl… là các file để tạo ra file .txt kết quả
cuối cùng của ngõ ra. Đây là một file text chứa giá trị được tính toán sau khi đưa qua bộ
alu.
Các file perl này được viết tương tự nhau, xử lý file log_alu.txt ( nẳm ở 05_Sim_Log) để
thu được kết quả cuối cùng.
Dưới đây là code của file perl_tee_add.pl
Các file perl_tee_mul.pl perl_tee_div… cũng tương tự như file perl_tee_add.pl ở trên
- Tiếp đến là file run_01.sh đây là file chứa các dòng lệnh cần chạy để đưa ra kết quả.
Lúc chạy chương trình ta sẽ đứng ở trong thư mục run để chạy lần lượt các đoạn lệnh ở
trong file run_01.sh
Lúc vào thư mục run ta cần set up tool VCS trước khi chạy (việc này chỉ cần thực hiện 1
lần) bằng cách gọi lênh “getlicense”, sau đó thực hiện từng lệnh trong file run_01.sh
 Khám phá 03_Script\

Thư mục này chứa các file perl để tạo 2 bộ nhớ ảo: đó là gen_mem_1.pl và gen_mem_2.pl
Thư mục input chứa file txt ngõ vào, thư mục output chứa file txt đã được tạo ra sau khi
chạy chương trình
Dưới đây là hình ảnh giải thích lệnh cho file perl, 2 file tương tự nhau nên ta chỉ phân tích 1
file gen_mem1.pl

 Khám phá 05_Sim_Log


Trong 05_Sim_Log chứa file log_alu.txt là file chứa kết quả xuất ra màn hình khi chạy tool
VCS


Độc giả có thể tìm trong toàn bộ thư mục 09_env_du trong đính kẻm
3. Kiến thức căn bản về Perl
Thông thường ta chỉ sử dụng một số lênh đơn giản trong perl. Các lệnh đó đã được đề cập
thông qua việc thực hiện tìm hiều về môi trường trong phần 2.
Tham khảo file đính kèm để biết thêm chi tiết:
01_Perl_ref.pdf
4. RTL design
Phần này sẽ không được đề cập nhiều trong nội dung của bài viết:
Ở đây tác giả chỉ đưa ra kinh nghiệm của mình trong việc thực hiện code rtl
- Thông thường khi code cho phần cứng thì chỉ sử dụng các cổng logic (assign) hay các
fip-fip ( thướng là always@...) tuyệt đối không được sử dụng các vong lặp for, while… nếu
không giải thích được nó sẽ tạo thành phần cứng là cái gi? Thông thường các vòng lặp chỉ
được sử dụng khi những người đã làm nhiều năm kinh nghiệm trong lĩnh vực này.
- Khi code điều khiển một biến thì biến đó chỉ được xuất hiện trong 1 nhóm lệnh nhất định,
tuyệt đối không dùng nhiều lệnh điều khiển để điêu khiển 1 biến, vì lúc này khi mang đi
synthesize (lúc nạp xuông phần cứng) phần mềm thực hiện sẽ k biết được nó sẽ tạo ra cái
gi. Điều này sẽ đẫn đến sai sót thi thực hiện.
- Ở các module lớn, thông thường khi kết thúc các module nhở thì phải bọc các D fip-flop
ở đầu ngõ vào va cuối ngõ ra. Việc này đảm bảo được vần đề timing cho mạch lúc đi
synthersize, và khiến cho code rtl cũng có thể chạy ở tốc độ cao hơn.
- Còn rất nhiều kinh nghiệm trong việc thực hiện code cho phần cứng, nhưng rất khó để có
thể giải thích bằng lời nói, chỉ có thể trải nghiệm thực tế mới có thể rut ra được.
Tài liệu tham khảo cho RTL design
Verilog_tutorial.pdf

You might also like