Quy Trình Thiết Kế Vi Mạch Số ĐH Bách Khoa TPHCM Tài liệu hướng dẫn thí nghiệm Quy trình thiết kế vi mạch số. Vi mạch tích hợp (IC), hay có thể gọi là những mạch điện siêu nhỏ tích hợp và kết nối nhiều linh kiện điện tử bên trong, đang dần trở thành một phần không thể thiếu của bất kì máy móc nào trên toàn thế giới. Cùng với sự phát triển không ngừng của khoa học và công nghệ, các vi mạch cũng phát triển nhanh chóng về quy mô, tính hiệu quả nhằm phục vụ tốt hơn cho cuộc sống con người. Điện thoại thông minh, thiết bị an ninh, cho đến những rađa quân sự, hệ thống điều khiển xí nghiệp chắc hẳn đều chứa đựng những vi mạch tích hợp làm trọng tâm trong việc vận hành của bộ máy. Chính do đó, thiết kế và sản xuất vi mạch đã, đang và sẽ là ngành công nghiệp hấp dẫn bởi tiềm năng kinh tế to lớn mà nó mang lại.
Thiết kế vi mạch
Vi mạch tích hợp là thành phần quan trọng trong máy móc hiện đại nhờ vào kích thước nhỏ gọn và khả năng xử lý khối lượng lớn Sự phát triển này có được nhờ vào sự bùng nổ của ngành công nghiệp bán dẫn trong nửa sau thế kỷ 20 Các chất bán dẫn sở hữu nhiều tính chất hữu ích, như khả năng điều chỉnh dòng điện và thay đổi điện trở theo ánh sáng hoặc nhiệt, cho phép mở rộng và chuyển đổi năng lượng Do đó, công nghiệp bán dẫn đóng vai trò nền tảng trong việc khai thác năng lượng điện và phát triển vi mạch hiện nay.
Sự phát triển của ngành công nghiệp vi mạch đã thúc đẩy sự hình thành và phát triển mạnh mẽ của ngành công nghiệp phần mềm Vi mạch, với vai trò là phần cứng, cần được điều khiển bởi các phần mềm được lập trình bởi các lập trình viên Tính ứng dụng cao của phần mềm trong thiết kế đồ họa, game và các ứng dụng khác tạo ra nhu cầu về phần cứng đủ mạnh để vận hành các phần mềm mới nhất Do đó, hai ngành công nghiệp vi mạch và phần mềm cần phát triển song song và bền vững để đáp ứng lẫn nhau cũng như nhu cầu của người dùng.
Ngành công nghiệp vi mạch đóng vai trò quan trọng trong hiện tại và tương lai, mang đến nhiều cơ hội việc làm và nghiên cứu Những ứng dụng đa dạng của vi mạch tạo ra những thành tựu to lớn Tuy nhiên, đây cũng là một lĩnh vực cạnh tranh khốc liệt, đòi hỏi các chuyên gia không ngừng học hỏi và khám phá để duy trì vị thế và không bị tụt lại phía sau.
(b) Mặt sauHình 1.1: Cấu tạo vi mạch bên trong một chiếc iPhone 6.
Cấu trúc một vi mạch
Vi mạch thường được cấu tạo từ nhiều khối con với các chức năng khác nhau Chẳng hạn, trong vi mạch của iPhone 6, ta có thể thấy các khối như bộ nhớ Flash, module Wifi, LTE radio và vi xử lý A8 của Apple Những khối này có thể được cấu thành từ những khối nhỏ hơn, tạo thành một hệ thống lắp ghép hợp lý nhằm phục vụ mục đích cuối cùng của sản phẩm.
Như vậy, vi mạch có thể có cấu trúc rất lớn, liệu một doanh nghiệp, một
ASIC và FPGA
Apple không thể tự thiết kế toàn bộ các khối vi mạch mà họ sử dụng Mặc dù kỹ sư của công ty có thể trực tiếp thiết kế một số khối, nhưng nhiều khối khác sẽ được mua từ các doanh nghiệp chuyên sâu hơn Những khối này, được gọi là IP (Intellectual Property), thường được bảo mật kỹ càng để tránh lộ bí mật công nghệ và xuất hiện phổ biến trong quá trình thiết kế vi mạch của các công ty.
Khi thiết kế một khối không phải IP, việc hiểu cấu tạo của nó là rất quan trọng Chúng ta sẽ tiến từ các cấp bậc phân theo khối đến cấp độ thấp hơn gọi là cấp cổng, nơi nhiều cổng logic kết hợp lại để tạo ra khối nhỏ nhất Các cổng logic này, như AND, OR, XOR và NOT, thực hiện các phép toán logic cơ bản Thực tế, ngay cả những vi mạch phức tạp nhất cũng được xây dựng từ hàng triệu cổng logic nhỏ.
Các cổng logic được tạo thành từ MOSFET hay transistor, là những linh kiện bán dẫn cơ bản điều khiển dòng điện MOSFET và transistor cấu thành từ các chất bán dẫn mang điện dương hoặc âm, tạo ra phân cực và dòng điện Tuy nhiên, các kỹ sư thiết kế vi mạch thường không chú trọng vào khía cạnh vật lý của linh kiện bán dẫn, mà thay vào đó, các nhà máy sản xuất vi mạch sẽ cung cấp thư viện linh kiện và yêu cầu sử dụng chúng một cách hợp lý Quá trình tương tác giữa doanh nghiệp thiết kế vi mạch và nhà máy sản xuất sẽ được mô tả chi tiết hơn ở phần 1.4.
Trước khi đi tiếp vào quy trình thiết kế vi mạch, ta cần chú ý tới hai loại hình vi mạch phổ biến nhất hiện nay: ASIC và FPGA.
ASIC (Mạch tích hợp chuyên dụng) là vi mạch được thiết kế cho một mục đích cụ thể, mang lại hiệu suất và kích thước tối ưu Quy trình thiết kế ASIC yêu cầu doanh nghiệp chuẩn bị kỹ lưỡng về cấu trúc và chức năng dựa trên yêu cầu của nhà máy sản xuất Nhà máy sẽ chịu trách nhiệm sản xuất ASIC thành phẩm theo đơn đặt hàng Tuy nhiên, nếu ASIC có sai sót, việc sản xuất lại từ đầu sẽ dẫn đến chi phí cao, vì vậy chỉ những doanh nghiệp đủ mạnh mới lựa chọn phát triển ASIC.
FPGA (Field Programmable Gate Array) là một loại vi mạch thành phẩm, nổi bật với khả năng thay đổi cấu trúc và kết nối của chính nó Sự linh hoạt này là điểm khác biệt và tối ưu của FPGA, cho phép nó đáp ứng nhiều nhu cầu ứng dụng khác nhau.
FPGA, tương tự như một nhà máy, hoạt động theo thiết kế của người dùng và có khả năng lập trình lại để sửa chữa sai sót, từ đó giúp giảm chi phí Tuy nhiên, FPGA chủ yếu được sử dụng trong môi trường nghiên cứu, học tập và các doanh nghiệp vừa và nhỏ, do hiệu năng và kích thước của nó kém hơn so với vi mạch ASIC Nguyên nhân là vì FPGA không thể tận dụng tối đa tài nguyên của mình và không thể tối ưu hóa cấu trúc bên trong do phần cứng cố định.
Quy trình của thiết kế vi mạch
Front end
Bước đầu tiên trong thiết kế vi mạch là phát triển ý tưởng và cụ thể hóa nó thành các tài liệu chi tiết (Specification), giúp người khác dễ dàng hiểu và tiếp cận.
Mô hình cấp hệ thống trong Matlab giúp người dùng hiểu rõ bản chất và mục đích của vi mạch, từ đó tiến hành các bước tiếp theo một cách hiệu quả Các thông số kỹ thuật (Specification) có thể được trình bày dưới nhiều định dạng khác nhau, bao gồm file văn bản, bài thuyết trình hoặc bản vẽ trên giấy Quan trọng là những tài liệu này phải rõ ràng, cụ thể và dễ tiếp cận để người đọc có thể nắm bắt được thông tin về vi mạch cần thiết.
Dựa trên mô tả của Specification, bước Thiết kế ở cấp độ hệ thống (System Level Design) được thực hiện cho các thiết kế vi mạch quy mô lớn, sử dụng ngôn ngữ lập trình cao như C++/SystemC/Python/Matlab để kiểm tra hành vi của vi mạch Các khối con trong vi mạch được xây dựng và kết nối trong một model hay platform Tiếp theo, bước Thiết kế ở cấp độ chuyển thanh ghi (RTL Design) cụ thể hóa các mô tả trước đó bằng ngôn ngữ phần cứng như Verilog, System Verilog hay VHDL, với các module có thể chứa nhiều module con, cho phép thể hiện chi tiết từ mức độ module đến cấp cổng RTL design rất quan trọng vì nó đảm bảo mô tả chi tiết và thuận tiện cho việc kiểm tra chức năng vi mạch Cuối cùng, bước Kiểm định RTL (RTL Verification) sử dụng các công cụ kiểm định như Synopsys, Mentor và Cadence để phát hiện lỗi trong RTL, cùng với việc xây dựng các testbench để kiểm tra từ quy mô tổng quát đến cục bộ, nhằm đảm bảo tính chính xác của thiết kế.
1.4 QUY TRÌNH CỦA THIẾT KẾ VI MẠCH 7
Hình 1.5 minh họa thiết kế file Verilog cho bộ cộng, cho phép phân tích các tình huống có thể xảy ra với vi mạch Thông qua các file report và waveform, chúng ta có thể quan sát hành vi và hoạt động của vi mạch được mô tả trong RTL.
Sau khi đảm bảo rằng không có lỗi chức năng trong RTL, các file RTL sẽ được tiến hành Synthesis thông qua các công cụ hỗ trợ Công cụ này chuyển đổi các module trong thiết kế RTL sang dạng module tương đương, tối ưu hóa kết nối và sắp xếp mà không làm ảnh hưởng đến chức năng ban đầu Kết quả của quá trình Synthesis là các file RTL tương đương cùng với báo cáo về hiệu năng và timing Sau khi có RTL đã chuyển đổi, cần thực hiện kiểm tra lại để đảm bảo chức năng của vi mạch, do Synthesis chủ yếu được thực hiện bởi phần mềm và có thể dẫn đến sai sót Bước này, gọi là Netlist Verification, nhằm đảm bảo sự tương đồng giữa RTL trước và sau Synthesis và là bước cuối cùng trong công đoạn Front End.
Trong quá trình kiểm tra vi mạch, nếu phát hiện sai sót, cần thực hiện lại các công đoạn trước đó để khắc phục lỗi Thực tế cho thấy, thiết kế vi mạch RTL thường phải trải qua nhiều lần sửa chữa để đạt được độ chính xác mong muốn Vì vậy, quá trình thiết kế vi mạch ít khi diễn ra theo một hướng thẳng mà thường theo dạng "vòng xoáy", lặp đi lặp lại, với mỗi chu trình mang lại kết quả thiết kế hoàn thiện hơn.
Back end
Design For Test (DFT) là khái niệm chỉ việc tích hợp các khối phụ vào thiết kế vi mạch chính để tạo điều kiện cho việc kiểm tra vi mạch sau khi sản xuất Những khối phụ này được gọi là BIST (Built-in Self-Test) và chúng giúp nâng cao khả năng kiểm tra và đảm bảo chất lượng sản phẩm vi mạch.
Hình 1.6: Ví dụ sử dụng testbench để kiểm tra RTL.
Hình 1.7: Ví dụ cho bước Synthesis trong thiết kế vi mạch.
1.4 QUY TRÌNH CỦA THIẾT KẾ VI MẠCH 9
Hình 1.8: Mô tả quá trình Synthesis sử dụng tool DC của Synopsys.
DFT (Design for Test) là một bước quan trọng trong quy trình thiết kế mạch tích hợp, thường được áp dụng cho các thiết kế quy mô lớn Các RTL phụ được thêm vào nhằm mục đích kiểm tra, đặc biệt là kiểm tra bộ nhớ và các kết nối quan trọng Khi quá trình kiểm tra trở nên phức tạp, BIST (Built-In Self-Test) được sử dụng để đảm bảo hoạt động cục bộ của các khối chính trong thiết kế.
Trước đây, các BIST chỉ phát huy tác dụng sau khi vi mạch đã sản xuất với chip mẫu để kiểm tra kết nối Hiện nay, các nhà cung cấp kiểm định lớn đã phát triển thiết bị chứa nhiều logic cell với khả năng tái cấu trúc, hoạt động tương tự FPGA nhưng kém linh hoạt hơn, chỉ phù hợp cho việc kiểm tra các phần quan trọng của vi mạch Những thiết bị này có số lượng logic cell lớn, lý tưởng cho việc mô phỏng luồng dữ liệu lớn trong thời đại thông tin bùng nổ hiện nay.
Phân tích thời gian tĩnh (Static Timing Analysis - STA) là bước quan trọng trong quy trình thiết kế vi mạch, tập trung vào hiệu năng và timing STA sử dụng thư viện công nghệ và các yêu cầu, ràng buộc của vi mạch để xây dựng mô hình timing, từ đó phát hiện các vi phạm ràng buộc về timing và hiệu năng Bên cạnh đó, STA cũng cung cấp các ràng buộc không gian cho giai đoạn cuối của quy trình Back End, cụ thể là bước Place & Route Trong bước này, các khối vi mạch, các IP và kết nối I/O được sắp xếp lại về mặt không gian để tối ưu hóa thiết kế.
Hình 1.9: MBIST, tức BIST cho bộ nhớ, được chèn vào thiết kế RTL.
Hình 1.10: Mô tả quá trình STA sử dụng tool PrimeTime của Synopsys.
Cần đạt yêu cầu gì để thiết kế vi mạch
Hình 1.11 minh họa quá trình Place & Route cho một vi mạch đơn giản, trong đó vị trí các thành phần được điều chỉnh để tuân thủ các ràng buộc từ bước Synthesis và STA Điều này đảm bảo vi mạch hoạt động đúng chức năng, đạt hiệu suất tối ưu và thời gian xử lý hợp lý, đồng thời giảm thiểu diện tích Kết quả cuối cùng là layout tổng hợp mọi thành quả từ các bước trước, sẵn sàng được gửi đến nhà máy để tiến hành sản xuất.
Khi thực hiện các bước Synthesis, STA và Place & Route, cần đảm bảo rằng các ràng buộc và thư viện công nghệ phù hợp với nhà máy sản xuất vi mạch mong muốn Doanh nghiệp thiết kế vi mạch thường không tập trung vào hoạt động vật lý của vi mạch, mà để cho các nhà máy sản xuất, những người có chuyên môn sâu về bán dẫn, đảm nhiệm Các nhà máy này sẽ áp dụng kiến thức của họ để phát triển các thư viện công nghệ và ràng buộc cần thiết cho quy trình sản xuất.
1.5 Cần đạt yêu cầu gì để thiết kế vi mạch
Thiết kế vi mạch là một quá trình phức tạp với nhiều công đoạn khác nhau, mà một cá nhân không thể đảm nhận toàn bộ Vì vậy, sự hợp tác giữa các kỹ sư chuyên môn là cần thiết để đảm bảo chất lượng và hiệu quả trong từng giai đoạn thiết kế.
Trước khi gia nhập ngành công nghiệp, các lập trình viên cần xác định rõ hướng đi phù hợp giữa Front End và Back End.
Người làm việc ở front end cần hiểu rõ về vi mạch ở cấp độ hành vi, tức là cách thức hoạt động của vi mạch trong các tình huống chức năng cụ thể.
Back end: Người hoạt động ở công đoạn này tập trung nhiều hơn vào các đặc tính vật lý cũng như quá trình sản xuất vi mạch.
Ngành công nghiệp vi mạch đang phát triển nhanh chóng, yêu cầu người làm việc trong lĩnh vực này phải liên tục học hỏi và nghiên cứu để không bị tụt lại phía sau Thiết kế và sản xuất vi mạch mang lại lợi nhuận cao, nhưng chi phí đầu tư cũng rất lớn Việc không cải tiến sản phẩm sẽ dẫn đến tình trạng vi mạch không thể tiêu thụ, gây ra thiệt hại lớn cho doanh nghiệp.
Trong chương này, sinh viên sẽ được giới thiệu về các công cụ cơ bản cần thiết cho kỹ sư thiết kế vi mạch Tài liệu sẽ mô tả sơ lược các công cụ hỗ trợ, môi trường làm việc và ngôn ngữ lập trình Việc nghiên cứu và sử dụng các công cụ này sẽ tùy thuộc vào sự chủ động của người đọc.
Mô trường Linux và Bash Shell
Linux
Linux là hệ điều hành mã nguồn mở, cho phép người dùng tự do khám phá và sử dụng Người dùng có thể thay đổi mọi cấu trúc mã nguồn, từ giao diện đến cấu trúc thư mục, nhằm cải tiến và tối ưu hóa Điều này tạo ra môi trường lý tưởng cho thiết kế vi mạch, khi không bị ràng buộc bởi nhiều hạn chế.
Tất cả các chương trình trên môi trường Linux được cài đặt dưới dạng gói, giúp việc cài đặt và gỡ bỏ trở nên dễ dàng Các hãng phần mềm lớn trong lĩnh vực thiết kế vi mạch thường chọn cung cấp gói phần mềm trên nền tảng Linux do tính linh hoạt và khả năng chỉnh sửa cao, không cần qua nhiều bước kiểm tra như các hệ điều hành mã nguồn đóng Mặc dù nhiều người cho rằng Linux không có tính bảo mật tốt, nhưng thực tế cho thấy hệ thống này đạt cấp độ an toàn cao nhờ các công cụ hỗ trợ như sandbox, chế độ mã hóa, và cộng đồng người dùng có thể dễ dàng vá lỗ hổng bảo mật nhờ vào tính chất mã nguồn mở.
Một trong những đặc điểm nổi bật của Linux mà người dùng cần biết là giao diện dòng lệnh (Terminal) Giao diện này được cung cấp dưới dạng hộp đen với các dòng lệnh, cho phép người dùng tiếp cận mọi thứ trong máy tính một cách hiệu quả Đặc biệt, khi thiết kế vi mạch, Terminal trở thành công cụ tối ưu giúp nâng cao hiệu suất làm việc so với giao diện đồ họa.
14 CHƯƠNG 2 CÔNG CỤ LÀM VIỆC
Giao diện Terminal của Linux có vẻ dễ nhìn và dễ sử dụng, nhưng thực tế cho thấy làm việc với Terminal chỉ bằng bàn phím và một cửa sổ lại mang lại hiệu quả cao hơn nhiều, đặc biệt khi người dùng đã quen thuộc với các lệnh.
Mặc dù Linux vẫn còn nhiều khuyết điểm so với Windows, nhưng trong lĩnh vực thiết kế vi mạch, sự hỗ trợ từ các công cụ trên Linux và giao diện Terminal giúp tăng hiệu quả làm việc, khiến Linux trở thành sự lựa chọn ưu tiên cho các hệ điều hành, đặc biệt là cho máy chủ.
Các lệnh Linux và Bash Shell
Để làm việc hiệu quả trên Linux, người dùng cần nắm vững các câu lệnh phổ biến trong Terminal Những lệnh này có nhiều ứng dụng, từ việc tạo thư mục đến thay đổi quyền truy cập và hướng dẫn sử dụng lệnh Bảng 2.1 cung cấp cái nhìn tổng quan về một số lệnh cơ bản nhất trong Linux.
Trong Linux, các lệnh có thể đi kèm với các option để hướng dẫn cách thực thi Để tìm hiểu các option của một lệnh cụ thể, bạn có thể sử dụng hai cách sau: gõ "help [Lệnh cần tìm hiểu]" hoặc "info [Lệnh cần tìm hiểu]".
Lệnh "help" cung cấp hướng dẫn ngắn gọn, trong khi lệnh "info" mở ra tài liệu chi tiết về cách sử dụng Sau khi tham khảo thông tin từ lệnh "info", bạn chỉ cần nhấn phím Q để quay lại Terminal Đôi khi, chúng ta cần thực hiện một hoặc nhiều lệnh lặp lại, ví dụ như khi thiết lập môi trường mỗi khi bắt đầu một dự án.
2.1 MÔ TRƯỜNG LINUX VÀ BASH SHELL 15
Bảng 2.1 liệt kê một số lệnh thông dụng trong môi trường Linux, bao gồm: `pwd` để in ra vị trí hiện tại, `ls` để liệt kê các file và thư mục ở vị trí hiện tại, và `ll` để liệt kê chi tiết các file và thư mục với thông tin về quyền truy cập, chủ sở hữu, kích cỡ, và thời gian tạo/chỉnh sửa Lệnh `cd` cho phép di chuyển đến vị trí hiện tại theo đường dẫn chỉ định, trong đó cần hiểu cách định nghĩa đường dẫn trong Linux, được phân theo cấp thư mục mẹ và con, với các thư mục ngăn cách bởi dấu /.
Dấu "∼" đại diện cho vị trí thư mục gốc, thư mục cấp cao nhất trong hệ điều hành.
Dấu "." đại diện cho vị trí thư mục hiện tại
Dấu " " đại diện cho thư mục cấp cao hơn vị trí hiện tại một bậc.
Lệnh cd được sử dụng để di chuyển giữa các thư mục, ví dụ: `cd ~/Desktop`, `cd /thu_muc_con_A/thu_muc_chau_AA`, và `cd / ` để quay lên thư mục mẹ Để tạo thư mục mới, sử dụng lệnh `mkdir` kèm theo tên thư mục, ví dụ: `mkdir Thumucnew` hoặc `mkdir /abc/Thumucnew` để chỉ định đường dẫn Để sao chép file, dùng lệnh `cp fileA fileB`, có thể thêm đường dẫn Lệnh `mv fileA fileB` giúp di chuyển file, tương tự như lệnh Cut trong Windows, fileA sẽ bị xóa sau khi di chuyển Để xóa file, sử dụng `rm fileA`, có thể kèm đường dẫn, và để xóa thư mục cùng nội dung bên trong, dùng `rm -r folderA` với option "-r" Cuối cùng, lệnh `chmod 777 fileA` được dùng để thay đổi quyền truy cập cho file.
Cấp full quyền truy cập cho fileA, bao gồm quyền đọc (read), ghi (write) và thực thi (execute) Mỗi quyền lại được chia làm
Lệnh `chmod 777 -r folderA` được sử dụng để thiết lập quyền truy cập cho thư mục `folderA` với ba cấp độ: root, user và other Con số 777 biểu thị rằng tất cả các quyền (đọc, ghi, thực thi) đều được cấp cho mọi người, với 9 bit quyền được thiết lập thành 1 Lệnh này rất hữu ích trong trường hợp các tệp cần truy cập bị hạn chế về quyền.
Cấp full quyền truy cập cho thư mục A, có option "-r" touch fileA Tạo mới file A, nếu đã tồn tại thì cập nhật lại ngày tạo
16 CHƯƠNG 2 CÔNG CỤ LÀM VIỆC
File Bash Shell, với đuôi sh, cho phép người dùng lưu trữ và tự động thực hiện các lệnh để tạo ra bảng dữ liệu lớn Khi cần sử dụng lại các lệnh này, người dùng có thể thực thi file thông qua lệnh source hoặc bash.
Alias
Alias, hay còn gọi là biệt danh, cho phép người dùng định nghĩa lệnh riêng thông qua file bash shell tại thư mục gốc (∼/.bashrc) Trong file bashrc, người dùng có thể tìm thấy các dòng lệnh alias ở phần cuối, giúp tạo ra những lệnh mới tùy chỉnh Để áp dụng lệnh mới, người dùng cần thực hiện lệnh source trên file bashrc Ngoài ra, lệnh which có thể được sử dụng để kiểm tra xem Linux có nhận diện được một lệnh nào đó, bao gồm cả lệnh alias mới tạo hoặc lệnh từ các gói chương trình đã cài đặt hay không.
Giới thiệu về các ngôn ngữ viết script
Ngôn ngữ script, tương tự như Bash Shell, bao gồm các lệnh để thực hiện các tác vụ nhất định Khi lập trình với ngôn ngữ script, các tác vụ thường ảnh hưởng đến tệp hoặc điều khiển luồng lệnh Do đó, nhiều doanh nghiệp sử dụng ngôn ngữ script để thực hiện các tác vụ liên quan đến công cụ, cấu trúc khung bộ nhớ và xử lý dữ liệu lớn Lý do chính là ngôn ngữ script cho phép xử lý tác vụ với tốc độ cao và dễ dàng quản lý nhiều tác vụ con.
Ngôn ngữ lập trình phần cứng
Trong tài liệu này, chúng ta sẽ tìm hiểu về ba loại ngôn ngữ script phổ biến: Perl, Makefile và Tcl Hướng dẫn sử dụng ba ngôn ngữ này sẽ được trình bày một cách đơn giản thông qua các bài lab Nghiên cứu chuyên sâu sẽ dành cho sinh viên tự thực hiện.
Để thiết kế vi mạch, việc định nghĩa phần cứng là rất quan trọng Ngôn ngữ lập trình phần cứng phổ biến nhất hiện nay là Verilog, và tài liệu này sẽ sử dụng Verilog cho cả thiết kế và mô phỏng phần cứng, tương ứng với các bước RTL Design và RTL Verification Sinh viên cần tự tìm hiểu và nghiên cứu sâu về Verilog, vì đây là nền tảng thiết yếu cho việc thực hiện thiết kế vi mạch.
SystemVerilog là ngôn ngữ lập trình phần cứng kế thừa từ Verilog, với nhiều tính năng mới như randomization và mảng đa chiều Mặc dù hiện tại, hầu hết các kỹ sư thiết kế RTL tại Việt Nam vẫn sử dụng Verilog, nhưng xu hướng trong tương lai dự kiến sẽ chuyển hoàn toàn sang SystemVerilog cho cả thiết kế và kiểm định RTL.
VHDL là một ngôn ngữ lập trình phần cứng chất lượng, nhưng cú pháp của nó khá phức tạp và có nhiều quy định, khác với Verilog, ngôn ngữ gần gũi với C Mặc dù vậy, VHDL có cú pháp rõ ràng và chỉn chu, phù hợp cho người mới bắt đầu học lập trình phần cứng Quyết định sử dụng VHDL hay Verilog tùy thuộc vào sinh viên, nhưng cần lưu ý rằng Verilog vẫn được sử dụng phổ biến hơn.
18 CHƯƠNG 2 CÔNG CỤ LÀM VIỆC
Giới thiệu tool Synopsys
Quá trình thiết kế vi mạch bao gồm nhiều bước và cần các công cụ hỗ trợ Ba nhà cung cấp công cụ lớn nhất hiện nay là Cadence, Synopsys và Mentor, mỗi nhà cung cấp có các gói công cụ với ưu điểm và nhược điểm riêng Tài liệu này sẽ tập trung vào gói công cụ của Synopsys.
VCS: dùng cho mô phỏng và kiểm định RTL (RTL Verification)
DVE: dùng cho kiểm tra dạng sóng sau mô phỏng
DC Compiler: dùng cho tổng hợp RTL
Formality: dùng cho kiểm định RTL sau tổng hợp (Netlist Verification)
PrimeTime: dùng cho phân tích thời gian tĩnh (STA)
ICC Compiler: dùng cho Place&Route
Việc sử dụng các phần mềm này sẽ được trình bày chi tiết trong các bài Lab ở những chương sau Tuy nhiên, sinh viên nên chủ động tìm hiểu sâu hơn để thành thạo quy trình, chuẩn bị tốt cho tương lai.
Lab 1: Thiết kế bộ cộng 2 số 4 bit
Lab mở đầu sẽ hướng dẫn sinh viên xây dựng cấu trúc thư mục cho dự án thiết kế vi mạch, giúp họ làm quen với việc vẽ mô tả thiết kế và lập trình phần cứng Sinh viên sẽ được thực hành mô phỏng chức năng RTL bằng phần mềm VCS và thực hiện quá trình Synthesis bằng phần mềm DC.
Lý thuyết
Mục tiêu thiết kế
Mục tiêu thiết kế trong bài Lab này là một khối cộng 4 bit có các yêu cầu như sau:
Ngõ vào: hai số 4 bit.
Ngõ ra: tổng của hai số trên, kèm với 1 bit nhớ (Carry).
Ví dụ: Cho ngõ vào là hai số 4’b0110 (=’d6) và 4’b1100 (=’d12) Kết quả phép cộng sẽ là 5’b10010 (=’d18)
Bộ cộng 1 bit
Để xây dựng bộ cộng 4 bit, trước tiên, cần thiết kế các bộ cộng 1 bit ở cấp độ cổng Các ngõ vào của bộ cộng này bao gồm hai số X và Y mà chúng ta cần tính tổng, cùng với một số Cin.
Số nhớ carry được sử dụng để phép cộng nhiều hơn 1 bit, với các ngõ ra bao gồm số S biểu thị tổng và bit C out đại diện cho số nhớ cho phép cộng tiếp theo.
20 CHƯƠNG 3 LAB 1: THIẾT KẾ BỘ CỘNG 2 SỐ 4 BIT
Hình 3.1: Sơ đồ khối cho bộ cộng 1 bit.
Bảng 3.1: Bảng sự thật cho khối cộng 1 bit.
Khối cộng 1 bit được mô tả bằng các cổng logic XOR, AND và OR, như thể hiện trong hình 3.1 Để thiết kế mạch logic này, cần thực hiện việc rút gọn bằng bìa Karnaugh thông qua bảng sự thật (bảng 3.1) Tuy nhiên, tài liệu này sẽ không hướng dẫn chi tiết về quá trình rút gọn, vì đây là kiến thức cơ bản.
Kết nối thành bộ cộng 4 bit
Cộng hai số 4 bit tương tự như cộng hai số thập phân, bắt đầu từ bit thấp nhất (LSB) và cộng dồn lên Để thiết kế bộ cộng 4 bit, ta chỉ cần nối 4 bộ cộng 1 bit thành chuỗi, trong đó bit nhớ Cin của bộ cộng thấp nhất được nối bằng 0, và bit C out của bộ cộng cao nhất là bit nhớ của toàn bộ phép cộng.
Thực hiện thiết kế
Thiết kế cấp độ hệ thống
Thiết kế ở cấp độ hệ thống đòi hỏi sự phức tạp và đầu tư thời gian công sức Thông thường, thiết kế này được thể hiện qua sơ đồ khối hoặc tập hợp nhiều sơ đồ khối cho các khối con Mặc dù có thể sử dụng từ ngữ hay bảng tính để mô tả chi tiết, nhưng sơ đồ hình ảnh vẫn mang lại sự trực quan hơn Cách hiệu quả nhất để thực hiện thiết kế là kết hợp cả hình ảnh và từ ngữ, giúp người đọc nắm bắt tổng quát và đi vào chi tiết khi cần thiết.
Tạo dựng môi trường và các chuẩn bị khác
Để bắt đầu, khởi động máy ảo bằng cách chọn môi trường làm việc, cụ thể là máy ảo bao gồm VCS và DC trong thư mục VCS\Source file máy ảo\DC và VCS\Tool-VCS-MyOS\MyOS Sau khi cài đặt VMWare WorkStation 15.5 PRO, mở chương trình và chọn nút Open Virtual Machine hoặc vào File/Open Tiếp theo, truy cập vào đường dẫn đã nêu để mở file CentOS_6_64_bit.vmx Một tab cho máy ảo sẽ xuất hiện, và bạn chỉ cần chọn Power on this virtual machine để khởi động hệ điều hành.
Sau khi máy ảo vào màn hình chờ, hãy chọn người dùng Albert và nhập mật khẩu hoangtrang để đăng nhập Giao diện Desktop sẽ xuất hiện, từ đó mở chương trình Terminal và gõ lệnh LoadDC Lệnh này giúp bạn lấy license để có quyền sử dụng các công cụ VCS và DC Sau khi nhập lệnh, hãy chờ cho đến khi màn hình hiển thị như hình 3.4, điều này có nghĩa là bạn đã load tool thành công.
22 CHƯƠNG 3 LAB 1: THIẾT KẾ BỘ CỘNG 2 SỐ 4 BIT
Hình 3.3: Khởi động máy ảo.
Hình 3.4: Load tool DC và VCS thông qua việc lấy license.
Hình 3.5: Cấu trúc thư mục cho Lab 1.
Sau khi load tool, các bạn dùng lệnhgedit ∼/.bashrcđể mở file bashrc nhằm thêm biến môi trường Ở giữa file, các bạn có thể thấy các dòng lệnh
Biến môi trường $PATH trong Linux giúp hệ thống xác định vị trí các lệnh mà người dùng muốn thực thi Để thêm đường dẫn mới vào biến này, bạn có thể sử dụng lệnh sau: `export PATH=$PATH:/home/albert/MyPrograms/synopsys/M-2017.03-SP2/bin/`.
Lệnh này giúp thêm thư mục bin vào biến môi trường, nơi chứa các lệnh cần thiết Sau khi chỉnh sửa file bashrc, hãy sử dụng lệnh source ∼/.bashrc để cập nhật biến môi trường.
Để thực hiện một dự án hiệu quả, việc xây dựng môi trường làm việc, như Lab 1, là rất quan trọng Môi trường này cần được tổ chức một cách khoa học, đặc biệt trong quá trình thiết kế thường có nhiều thay đổi Do đó, việc chia thư mục dự án thành các phần riêng biệt, tương ứng với từng công đoạn thiết kế và nhiệm vụ của các nhóm kỹ sư khác nhau, là cần thiết để đảm bảo sự hợp tác và tiến độ công việc.
Tài liệu này sẽ hướng dẫn sinh viên xây dựng một thư mục làm việc theo từng phân đoạn, thể hiện trong hình 3.5 Trong đó:
01_spec: Đây là thư mục chứa các bản vẽ sơ đồ khối, hay các document thể hiện mô tả thiết kế.
02_rtl: Đây là thư mục chứa các mã lập trình phần cứng sử dụng Verilog.
03_verif: Đây là thư mục dành cho việc kiểm định RTL.
04_synth: Đây là thư mục dành cho việc tổng hợp RTL.
Các hình vẽ và sơ đồ khối cho thiết kế, như đã mô tả trong phần thiết kế cấp độ hệ thống, có thể được lưu trữ trong thư mục 01_spec Các thư mục khác sẽ được xử lý sau.
24 CHƯƠNG 3 LAB 1: THIẾT KẾ BỘ CỘNG 2 SỐ 4 BIT
Hình 3.6: Mã code Verilog cho các bộ cộng. hướng dẫn xây dựng qua các mục tiếp theo.
Mô tả thiết kế bằng Verilog
Dựa trên sơ đồ khối, chúng ta sẽ xây dựng hai file Verilog là adder_1bit.v và adder_4bit.v, với nội dung như hình 3.6, sử dụng toán tử logic và instance module con Sau khi lưu hai file này trong thư mục 02_rtl, bạn cần thêm một file lab_rtl.flist, đóng vai trò như bảng dẫn tổng hợp tất cả các file RTL File flist này thường được sử dụng trong các dự án lớn với hàng trăm, hàng nghìn file Verilog cần được import Tuy nhiên, trong Lab này, tài liệu sẽ hướng dẫn bạn tạo file flist để làm quen với môi trường làm việc sau này Hình 3.7 thể hiện nội dung và vị trí của file flist trong thư mục 02_rtl.
Thực hiện viết testbench
Bước tiếp theo là tạo ra môi trường kiểm định cho các file RTL đã thiết kế, nhằm tối ưu hóa khả năng sử dụng lại Môi trường này cần được xây dựng sao cho giảm thiểu việc chỉnh sửa, giúp quá trình kiểm định thiết kế trở nên dễ dàng và hiệu quả hơn.
Hình 3.7: File flist làm đường dẫn cho các file Verilog khác.
Để thực hiện việc này, thư mục 03_verif sẽ được xây dựng với cấu trúc bao gồm: env_script để thiết lập môi trường, verif để viết testbench và thực hiện phân tích cũng như mô phỏng RTL, và sim_result để lưu trữ các báo cáo dưới dạng logfile trong quá trình chạy.
Để thiết lập môi trường, ta sẽ xem xét file set_env.bash, trong đó định nghĩa một biến môi trường tên là WORKAREA theo đường dẫn của dự án hiện tại Biến này cho phép các file và thư mục khác sử dụng thay cho đường dẫn tuyệt đối, giúp dễ dàng thay đổi đường dẫn của WORKAREA khi chuyển sang dự án khác mà không ảnh hưởng đến các file khác Ví dụ, file lab_rtl.flist cũng sử dụng biến WORKAREA này.
Chúng ta sẽ xây dựng testbench bằng ngôn ngữ Verilog trong thư mục verif/sv Testbench này sẽ được lưu trong file testtop.v, với nội dung như được mô tả trong hình 3.10.
Sau khi hoàn thành việc viết file testtop.v, chúng ta cần tạo thêm file lab_ben.flist, tương tự như file bên RTL, với đường dẫn trỏ đến file testtop.v đã được tạo ra (hình 3.11).
Cuối cùng, chúng ta xây dựng thư mục verif/script, nơi chứa các file hỗ trợ tương tác với công cụ VCS của Synopsys và tự động hóa quá trình kiểm tra cho các dự án sau này Trong thư mục này, các file ben.f và rtl.f chứa các file flist đã tạo ở các bước trước Các file flist giúp chỉ định một hoặc nhiều file Verilog, giống như một gói package, trong khi ben.f và rtl.f có nhiệm vụ lựa chọn các package cần thiết cho quá trình kiểm tra Trong bài Lab này, cả thiết kế và testbench đều đơn giản, do đó việc thực hiện nhiều bước trở nên dễ dàng hơn.
26 CHƯƠNG 3 LAB 1: THIẾT KẾ BỘ CỘNG 2 SỐ 4 BIT
Hình 3.8: Cấu trúc chung cho thư mục 03_verif.
Hình 3.9: Nội dung file set_env.bash.
Hình 3.10: Nội dung file testtop.v.
Hình 3.11: Nội dung file flist của testbench.
28 CHƯƠNG 3 LAB 1: THIẾT KẾ BỘ CỘNG 2 SỐ 4 BIT
Hình 3.12: Nội dung file ben.f và rtl.f
Các file ben_libs.setup và synopsys_sim.setup, như thể hiện trong hình 3.13, có vai trò quan trọng trong các dự án lớn với nhiều file flist, giúp xác định vị trí để trả kết quả compile RTL và testbench cho công cụ VCS của Synopsys Mặc dù có thể không cần thiết trong các dự án nhỏ, nhưng việc sử dụng các file ben.f và rtl.f một cách phù hợp là cần thiết để thực hiện các bài test toàn thể hoặc cục bộ, như đã được trình bày trong bài lab với hình 3.12.
File Makefile là một ngôn ngữ script quan trọng, được sử dụng để thực hiện các quá trình như phân tích và mô phỏng Nội dung chi tiết của file này được trình bày trong hình 3.14.
Các mục màu xanh lá cây trước dấu ":" trong Makefile được gọi là target Mỗi target có thể chứa một hoặc nhiều lệnh Khi sử dụng lệnh make để chạy Makefile, người dùng có thể chọn một hoặc nhiều target, và các lệnh bên trong sẽ được thực thi theo thứ tự Nếu không chỉ định target nào, mặc định target được chọn là all.
Lệnh vlogan trong VCS được sử dụng để phân tích các file Verilog nhằm phát hiện lỗi cú pháp Một số tùy chọn liên quan sẽ được giải thích chi tiết trong hình 3.14.
Hình 3.14: Nội dung file Makefile.
Hình 3.15: Các lệnh để chạy thiết kế và mô phỏng RTL.
Lệnh vcs là công cụ dùng để phân tích và tìm ra lỗi trong các mối quan hệ giữa các file Verilog mà không liên quan đến cú pháp Khi sử dụng tùy chọn "-R", lệnh này sẽ thực hiện mô phỏng trực tiếp thông qua file testtop.sv đã được mô tả trước đó.
Targetalls sequentially executes sub-targets, including clean, which eliminates data from previous runs; analysis_rtl and analysis_ben, which analyze Verilog files in both RTL and testbench formats; and runsim, which simulates the RTL design.
Sau khi phân tích và mô phỏng, kết quả sẽ được lưu dưới dạng logfile trong thư mục sim_result theo đường dẫn chỉ định Để thực hiện kiểm định RTL, bắt đầu từ thư mục gốc, cần chạy các lệnh như trong hình 3.15 Đầu tiên, thực hiện lệnh source fileset_env.bash để thiết lập môi trường, sau đó vào thư mục chứa file Makefile và nhập lệnh make để tiến hành toàn bộ quá trình Việc chuẩn bị kỹ lưỡng sẽ giúp quá trình làm việc diễn ra nhanh chóng hơn Kết quả mô phỏng sẽ hiển thị trong Terminal (hình 3.16) và có thể xem thêm các logfile trong thư mục sim_result, nơi lưu lại quá trình chạy trên Terminal.
30 CHƯƠNG 3 LAB 1: THIẾT KẾ BỘ CỘNG 2 SỐ 4 BIT
Hình 3.16: Kết quả mô phỏng RTL.
Sau khi mô phỏng và đọc logfile, để kiểm chứng tính đúng đắn của RTL, bạn cần xem dạng sóng tín hiệu qua thời gian Để thực hiện điều này, sau khi mô phỏng, hãy nhập lệnh `dve&` trên Terminal để chạy chương trình DVE trong background Giao diện DVE dễ sử dụng; bạn chỉ cần chọn File/Open Database và mở tệp `verilog.dump` trong thư mục `verif/script` để xem dạng sóng Cửa sổ bên trái hiển thị mô hình phân cấp các khối, cho phép bạn lựa chọn khối cần xem, trong khi cửa sổ bên cạnh cho phép chọn tín hiệu tương ứng Sau khi lựa chọn, bạn có thể nhấn chuột phải chọn Add to Wave hoặc nhấn Ctrl+4 để mở dạng sóng và quan sát.
Tổng hợp (Synthesis)
Công đoạn cuối cùng trong Lab này là Synthesis RTL, nơi chúng ta sẽ chuyển đổi RTL đã thiết kế thành các cổng theo thư viện đã định sẵn Quá trình Synthesis không chỉ chuyển đổi mà còn tối ưu hóa các kết nối và logic của RTL Chúng ta sẽ sử dụng phần mềm DC của Synopsys cho quá trình này.
Thư mục 04_synth sẽ được tổ chức bao gồm các phần chính: thư mục lib chứa các thư viện với các cổng đã được chuẩn hóa, thư mục report lưu trữ thông tin về diện tích, timing và chất lượng, thư mục run chứa các file hệ thống trong quá trình chạy Synthesis, và file dc_command.src chứa các lệnh thực hiện quá trình Synthesis Để bắt đầu, bạn cần import thư viện vào thư mục lib bằng cách giải nén file Syn_library1.rar và sao chép tất cả các file bên trong.
Hình 3.17: Quan sát dạng sóng bằng phần mềm DVE.
Hình 3.18: Tổ chức thư mục 04_synth.
32 CHƯƠNG 3 LAB 1: THIẾT KẾ BỘ CỘNG 2 SỐ 4 BIT
Để thực hiện quá trình tổng hợp Synthesis, người dùng cần truy cập vào thư mục lib, nơi chứa các file thư viện cần thiết (hình 3.19) Mỗi thư viện bao gồm hai file (.lib và db) và được phân loại theo các góc cạnh quá trình (process corner) như ff, ss, tt, tương ứng với các chế độ nhanh, chậm và điển hình Điện áp hoạt động của MOSFET có thể là 1.08V hoặc 1.32V, trong khi nhiệt độ hoạt động có thể dao động từ 0°C đến 25°C Khi tiến hành Synthesis, chỉ cần chọn một thư viện duy nhất để thực hiện tổng hợp.
Để tự động hóa quá trình tổng hợp, chúng ta cần xây dựng file dc_command.src, như được mô tả trong hình 3.20 Để thực hiện tổng hợp, hãy vào thư mục run và khởi động chương trình DC bằng lệnh dc_shell, sau đó nhập lệnh source /dc_command.src và chờ quá trình Synthesis hoàn tất (hình 3.21) Sau khi tổng hợp, file RTL (report/lab_synth.netlist.v) sẽ cho thấy các cổng ban đầu đã được thay thế bằng các module trong thư viện, đồng thời số cổng logic cũng giảm xuống (hình 3.22) Bạn cũng có thể vào thư mục report để xem các báo cáo liên quan đến diện tích, timing và chất lượng của RTL, đảm bảo không có vi phạm nào xảy ra Đây là phần kết thúc hướng dẫn cho bài Lab 1.
Hình 3.20: Nội dung file dc_command.src và giải thích.
Hình 3.21: Chạy Synthesis trên Terminal bằng phần mềm DC.
34 CHƯƠNG 3 LAB 1: THIẾT KẾ BỘ CỘNG 2 SỐ 4 BIT
Hình 3.22: Kết quả RTL sau khi Synthesis.
Sinh viên tự thực hành
Để phát triển khả năng tự lập và vận dụng kỹ năng, sinh viên sẽ thực hiện một dự án tương đương sau mỗi bài Lab Cấu trúc thư mục của dự án sẽ được xây dựng giống như mô tả trong bài Lab, và cách đặt tên sẽ tuân theo quy tắc đã được quy định.
Lab1_HW_[Tên sinh viên]_MSSV Để làm báo cáo, sinh viên sẽ làm theo báo cáo mẫu đính kèm với tập tài liệu này.
Bài Lab dành cho sinh viên cuối chương này có nội dung như sau:
Tên: Thiết kế bộ ALU gồm 4 chức năng cộng, AND từng bit, OR từng bit và XOR từng bit.
Ngõ vào: Hai số 4 bitXvàY, 1 số 2 bitcmddùng cho xác định loại toán tử sẽ sử dụng, với:
Kết quả phép tính được thể hiện bằng một số 4 bit, trong khi một số 1 bit overflow cho biết liệu phép cộng có nhớ lên 1 ở bit cuối cùng hay không Đối với các phép toán AND, OR và XOR, bit overflow này sẽ có giá trị bằng 0.
Trong báo cáo, sinh viên cần chụp màn hình ở các bước cụ thể và trả lời một số câu hỏi lý thuyết ở cuối bài.
36 CHƯƠNG 3 LAB 1: THIẾT KẾ BỘ CỘNG 2 SỐ 4 BIT
Lab 2: Thiết kế bộ đếm
Lý thuyết
Mạch tổ hợp và mạch tuần tự
Trước khi thiết kế bộ đếm, cần phân biệt rõ giữa mạch tổ hợp và mạch tuần tự Mạch tổ hợp có đầu ra phụ thuộc hoàn toàn vào trạng thái đầu vào tại thời điểm hiện tại, trong khi mạch tuần tự lại có đầu ra phụ thuộc vào trạng thái trước đó Điều này có nghĩa là mạch tuần tự yêu cầu tính năng nhớ, cho phép lưu trữ một hoặc nhiều tín hiệu để sử dụng trong tương lai.
Như vậy, mạch tuần tự hoạt động thay đổi theo thời gian Để xây dựng được mạch tuần tự, ta cần hai yếu tố quan trong sau đây:
Clock là tín hiệu xác định khoảng thời gian hoạt động của mạch tuần tự, thường được biểu diễn dưới dạng xung vuông Thời điểm cạnh lên của xung thường được chọn làm thời điểm mạch tuần tự thay đổi trạng thái.
Flip-flop là các phần tử nhớ, trong đó ngõ ra sẽ thay đổi theo cạnh lên hoặc cạnh xuống của tín hiệu clock.
Mạch tuần tự thực chất bao gồm mạch tổ hợp và các phần tử nhớ, trong đó các phần tử nhớ thay đổi trạng thái theo tín hiệu clock Hiện nay, hầu hết các vi mạch đều sử dụng mạch tuần tự.
Setup time và hold time
Phân tích timing là yếu tố thiết yếu trong thiết kế vi mạch, đặc biệt là đối với mạch tuần tự Việc xác định ràng buộc về timing giúp chúng ta hiểu rõ hơn về hiệu suất và độ tin cậy của mạch, từ đó đảm bảo hoạt động ổn định và chính xác trong quá trình xử lý tín hiệu.
38 CHƯƠNG 4 LAB 2: THIẾT KẾ BỘ ĐẾM
Hình 4.2: Các loại flip flop thông dụng.
Yêu cầu về thời gian thiết lập (setup time) của flip flop là yếu tố quan trọng để đảm bảo vi mạch hoạt động ổn định ở tần số mong muốn Tần số, hay còn gọi là nghịch đảo của chu kỳ tín hiệu clock, càng cao thì chu kỳ càng nhỏ, dẫn đến việc mạch hoạt động nhanh hơn Khi chu kỳ rút ngắn, vi mạch có khả năng thực hiện nhiều tác vụ hơn trong cùng một khoảng thời gian.
Để tăng tần số hoạt động của vi mạch mà vẫn đảm bảo hiệu suất, cần chú ý đến cấu trúc các mạch tổ hợp bên trong Để thực hiện phân tích định lượng, hai đại lượng quan trọng được xác định là thời gian thiết lập (setup time) và thời gian giữ (hold time).
Thời gian setup là khoảng thời gian mà ngõ vào của flip flop cần phải giữ nguyên giá trị để đảm bảo nó có thể lấy đúng giá trị vào Trong thời gian này, giá trị ngõ vào có thể thay đổi trước khi bước vào thời gian setup, nhưng phải giữ nguyên cho đến khi flip flop nhận giá trị.
Thông thường, trong một mạch số, sẽ có hai flip flop: một flip flop để xuất dữ liệu và một flip flop thứ hai để nhận dữ liệu đó Dữ liệu cần phải đi qua mạch tổ hợp và đến flip flop thứ hai trước khi bắt đầu vào thời gian thiết lập (setup time) Cần lưu ý rằng, trong thực tế, dữ liệu khi di chuyển qua các linh kiện và dây dẫn sẽ tiêu tốn một khoảng thời gian nhất định Công thức được sử dụng để đảm bảo thời gian thiết lập trong trường hợp này là rất quan trọng.
Thời gian từ nguồn clock đến chân clock của flip flop thứ nhất được gọi là Tlaunch, trong khi Tck2q là thời gian từ khi flip flop thứ nhất nhận clock đến khi có ngõ ra Thời gian dành cho mạch tổ hợp xử lý dữ liệu được ký hiệu là Tdp Tcapture là thời gian từ nguồn clock đến chân clock của flip flop thứ hai, và Tcycle là chu kỳ của clock Cuối cùng, Tsetup là thời gian setup của flip flop thứ hai Cần lưu ý rằng, nếu dữ liệu A được flip flop thứ nhất lấy trong chu kỳ thứ nhất, thì nó sẽ mất thêm một chu kỳ nữa để dữ liệu A qua mạch tổ hợp và đến flip flop thứ hai.
40 CHƯƠNG 4 LAB 2: THIẾT KẾ BỘ ĐẾM trong chu kỳn+ 1 Đó là lý do mà ta phải cộng thêmT cycle trong công thức ở trên.
Khi tăng tần số của clock, tức giảm T cycle, vế phải của bất đẳng thức sẽ nhỏ đi, khiến cho khả năng không còn đúng; vì vậy, không thể liên tục tăng tần số của clock Đồng thời, việc tối ưu mạch tổ hợp để giảm Tdp sẽ làm giảm vế trái của bất đẳng thức, từ đó tăng khả năng vượt qua kiểm tra setup Ngoài ra, hold time là khoảng thời gian mà dữ liệu cần được giữ đủ lâu để flip flop có thể nhận dữ liệu chính xác theo chu kỳ, nếu dữ liệu thay đổi quá nhanh, nó có thể ghi đè lên dữ liệu cũ trước khi flip flop kịp nhận.
Lấy ví dụ cho 2 flip flop như ở trên (hình 4.6) Ta sẽ xét đến cạnh lên thứ
2 của CLKM trong hình, dữ liệu bắt đầu từ cạnh lên này sẽ mất Tlaunch+
Để đảm bảo flip flop thứ hai nhận dữ liệu chính xác trong chu kỳ clock tiếp theo, cần phải xem xét thời gian Tcapture từ CLM đến chân clock của flip flop này Trong cạnh lên clock, flip flop thứ hai cần bắt được dữ liệu xuất ra từ flip flop thứ nhất của chu kỳ trước Nếu dữ liệu này đến quá nhanh, nó có thể ghi đè lên dữ liệu cũ, dẫn đến việc flip flop thứ hai bắt sai dữ liệu Khoảng thời gian hold time là yếu tố quan trọng để đảm bảo rằng dữ liệu mà flip flop thứ hai nhận không bị ghi đè Công thức kiểm tra điều kiện hold time yêu cầu khoảng thời gian chênh lệch giữa thời điểm dữ liệu đến flip flop và thời điểm clock đến flip flop phải lớn hơn hold time của flip flop đó, nhằm đảm bảo dữ liệu cũ được giữ lại và không bị mất.
Để đảm bảo điều kiện hold trong mạch điện, cần lưu ý hai điểm quan trọng Thứ nhất, điều kiện hold không phụ thuộc vào chu kỳ của đồng hồ Thứ hai, nếu mạch tổ hợp hoạt động quá nhanh và vi phạm điều kiện hold, cần bổ sung các khối đệm, chẳng hạn như hai cổng NOT nối tiếp, để tăng thời gian xử lý của mạch tổ hợp và cải thiện vế trái của công thức (2).
Thiết kế bộ đếm lên
Bài lab thứ 2 này sẽ hướng dẫn sinh viên thực hiện một mạch tuần tự rất đơn giản là bộ đếm lên Ở đó:
Ngõ vào: tín hiệu clock tên clk, độ rộng 1 bit.
Ngõ ra: số đếm têncnt, có giá trị tăng dần sau mỗi cạnh lên của clock, độ rộng 16 bit.
Bộ đếm lên được mô tả trong Hình 4.7, trong đó khối cộng 1 hoạt động như một mạch tổ hợp, cho phép ngõ ra lớn hơn ngõ vào một đơn vị D flip flop đóng vai trò quan trọng trong việc lưu trữ và chuyển đổi tín hiệu.
Hình 4.4: Ví dụ cho kiểm tra điều kiện setup của flip flop.
Hình 4.5: Yêu cầu về hold time của flip flop.
42 CHƯƠNG 4 LAB 2: THIẾT KẾ BỘ ĐẾM
Hình 4.6: Ví dụ cho kiểm tra điều kiện hold của flip flop.
Thực hiện thiết kế
Thiết kế cấp độ hệ thống
Phần này ta đã mô tả trong phần lý thuyết.
Tạo dựng môi trường và các chuẩn bị khác
Trong bài lab này, chúng ta sẽ giữ nguyên cấu trúc thư mục giống như bài lab 1, nhưng sẽ bổ sung thêm bước kiểm định netlist bằng công cụ Formality của Synopsys Thư mục mới mang tên 05_nl_verif sẽ được thêm vào để lưu trữ các kết quả kiểm định.
Vì lý do kỹ thuật và bản quyền, các phần mềm không thuộc VCS của Synopsys sẽ được lưu trữ trên các máy ảo riêng biệt Bài viết này sẽ hướng dẫn bạn cách sử dụng các phần mềm đó.
44 CHƯƠNG 4 LAB 2: THIẾT KẾ BỘ ĐẾM
Để tạo thư mục chia sẻ giữa các máy ảo và máy Windows, trước tiên, bạn cần tắt máy ảo VCS nếu nó đang mở Mở VMware Station và chọn máy ảo VCS, sau đó vào Edit virtual machine settings Trong cửa sổ hiện ra, chọn tab Options và tiếp theo là Shared Folders Tích chọn Always enabled và nhấn Add để thêm thư mục Nhập đường dẫn của thư mục trên máy Windows vào mục Host path và đặt tên cho thư mục trong máy ảo tại mục Name Cuối cùng, nhấn Next, sau đó chọn Finish và OK để hoàn tất.
Sau khi bật máy ảo, để truy cập thư mục trên, trênDesktopchọn Com- puter→Computer→Filesystem→mnt→hgfs Thư mục được chia sẻ sẽ nằm ở đây.
Mô tả thiết kế bằng Verilog
Ở mục này, ta sẽ thực hiện thiết kế 3 file Verilog: add_1.v: Khốicộng 1mô tả ở trên.
DFF.v: D flip flop counter.v: bộ đếm tổng hợp hai file trên.
Nội dung và giải thích ngắn gọn về các file được trình bày trong hình 4.12 Những file này sẽ được bổ sung đường dẫn vào file lab_rtl.flist, tương tự như trong bài lab trước.
Hình 4.10: Thêm thư mục chia sẻ (2).
Hình 4.11: Thêm thư mục chia sẻ (3).
46 CHƯƠNG 4 LAB 2: THIẾT KẾ BỘ ĐẾM
Hình 4.12: Code Verilog của RTL bài lab 2.
Hình 4.13: Code Verilog của testbench bài lab 2.
Thực hiện viết testbench
Để áp dụng cho bài lab này, chúng ta chỉ cần chỉnh sửa nội dung của file testtop.v trong bài lab trước Nội dung của file này được thể hiện trong hình 4.13.
Sau khi cập nhật đường dẫn của testtop.v vào file lab_ben.flist, bạn cần chạy lại như đã thực hiện trong bài lab trước Đừng quên chỉnh sửa đường dẫn trong file set_env.bash để trỏ đến thư mục của bài lab hiện tại.
Kết quả sau khi chạy mô phỏng được thể hiện trong hình 4.14 Tương tự, kết quả dạng sóng được thể hiện trong hình 4.15.
Hình 4.14: Kết quả mô phỏng của bài lab 2.
48 CHƯƠNG 4 LAB 2: THIẾT KẾ BỘ ĐẾM
Hình 4.15: Dạng sóng mô phỏng của bài lab 2.
Tổng hợp (Synthesis)
Trong phần tổng hợp của bài lab, chúng ta sẽ bổ sung một số ràng buộc về timing để công cụ DC có khả năng kiểm tra các điều kiện liên quan đến setup time và hold time (hình 4.16).
Các ràng buộc được thêm vào ở mục CONSTRAINT FOR DESIGN. Trong đó:
Tạo clock có tênclk(trùng tên với tín hiệu trong filecounter.v) có chu kì là 1000ns (Đơn vị dùng trong DC là ns).
Thời gian delay của dữ liệu trước khi đến được input của bộ đếm sẽ nằm trong khoảng [1;10] ns.
Thời gian delay của dữ liệu khi ra ngoài output của bộ đếm cũng tương tự nằm trong khoảng [1;10] ns.
Lưu ý rằng các điều kiện về thời gian trong thiết kế do người thiết kế tự đặt ra Thời gian thiết lập (setup time) và thời gian giữ (hold time) của các flip flop được quy định bởi thư viện.
Chúng ta tiếp tục thực hiện chạy Synthesis bằng công cụ DC giống như trong bài lab trước Sau khi hoàn thành, mở file report.timing trong thư mục 04_synth/report để quan sát kết quả Tại đây, có một phép thử timing duy nhất với Path Type là max, nghĩa là kiểm tra điều kiện setup time (min kiểm tra điều kiện hold time) Phép thử này được chia thành ba phần rõ ràng.
Từ clock clk đến data arrival timelà thời gian dữ liệu đến được flip flop, hay vế trái của (1).
Từclock clktiếp theo đến data required timelà vế phải của 1.
Để kiểm tra điều kiện setup time, ta lấy hiệu hai đại lượng trên (slack) Nếu slack đạt MET, điều kiện về setup time đã được thỏa mãn; ngược lại, nếu vi phạm, hệ thống sẽ báo là VIOLATED Kết thúc công đoạn Synthesis, hãy sao chép toàn bộ thư mục Lab 2 vào thư mục chia sẻ.
Hình 4.16: File dc_command.src của bài lab 2.
Kiểm tra netlist
Để kiểm tra netlist, chúng ta cần sử dụng công cụ Formality của Synopsys, nằm trong máy ảo theo đường dẫn Formality\Source file máy ảo\Formality_tool_Thầy Trang-003\CentOS 6 64-bit_new Sinh viên cần làm theo hướng dẫn cài đặt có trong tài liệu tại đường dẫn Formality\Hướng dẫn sử dụng\Cách mở tool Formality.pdf Sau khi cài đặt, hãy trỏ thư mục chia sẻ vào thư mục mà chúng ta đã làm cho máy ảo VCS trước đó.
Sau khi khởi động máy, mở Terminal và nhập lệnh loadLic để tải công cụ Formality Tiếp theo, truy cập vào thư mục chia sẻ để tải thư mục lab 2 về máy nhằm thực hiện kiểm định netlist.
TrongTerminal, trỏ đường dẫn vào trong thư mục05_nl_verif Sau đó nhập lệnhformality & để mở giao diện tool Formality (hình 4.18).
Các bước tiếp theo nhằm kiểm định netlist sẽ được thực hiện như sau:
Click on the tab labeled "tab1.Ref" and then press the "Verilog" button Select all Verilog files located in the "02_rtl" folder and click "Load Files." Next, navigate to "tab 3.Set Top Design" at the bottom and choose "modulecounter" as the top design, then click "Set Top."
Nhấn chọn tab2.Impl., nhấn nútVerilog Chọn filelab_synth.netlist.v trong thư mục04_synth/report Sau đó nhấnLoad Files Chọn sang
50 CHƯƠNG 4 LAB 2: THIẾT KẾ BỘ ĐẾM
Hình 4.17: Report timing của tool DC.
The Formality tool interface allows users to access DB Libraries by clicking the DB button and selecting the library for synthesizing the counter from the 04_synth/lib directory After loading the files, users should navigate to the Set Top Design tab and select the module counter as the top design before clicking the Set Top button.
Nhấn chọn tab4.Match., nhấn chọnRun Matchingđể kiểm chứng sự tương đồng của RTL khi thiết kế và sau khi Synthesis (hình 4.19)
Nhấn chọn tab 5.Verify., nhấn chọn Verify để kiểm chứng chức năng của RTL sau khi Synthesis (hình 4.20).
Nhấn chọn tab6.Debug để sử dụng chức năng này khi gặp lỗi trong quá trình so sánh RTL trước và sau khi tổng hợp Đây là phần kết thúc hướng dẫn cho bài Lab 2.
52 CHƯƠNG 4 LAB 2: THIẾT KẾ BỘ ĐẾM
Hình 4.19: Kiểm tra tương đồng giữa RTL trước và sau khi Synthesize.
Hình 4.20: Kiểm tra chức năng RTL sau khi Synthesize.