Professional Documents
Culture Documents
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)
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
…
Độ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