Ngày nay, khi mạch thiết kế với hàng triệu cổng logic được tích hợp trong một con Chip thì việc thiết kế mạch và đi dây kết nối bằng tay trở nên bất khả thi, chính từ lí do đó một khái niệm ngôn ngữ có mức độ trừu tượng cao dùng để mô tả thiết kế phần cứng được ra đời, đó chính là Verilog. Cùng với sự ra đời của ngôn ngữ mô tả phần cứng Verilog là hàng loạt các công cụ EDA (Electronic Design Automation) và CAD (Computer Aided Design) đã giúp cho những kĩ sư thiết kế phần cứng tạo nên những con Chip có độ tích hợp rất cao, tốc độ siêu việt và chức năng đa dạng. Giáo trình Ngôn ngữ mô tả phần cứng Verilog nhằm giúp sinh viên trang bị kiến thức về thiết kế vi mạch. Giáo trình tập trung vào mảng thiết kế các mạch số với mạch tổ hợp và mạch tuần tự. Giáo trình cũng giới thiệu về các bước cần thực hiện trong quá trình thiết kế vi mạch từ việc mô tả thiết kế, kiểm tra, phân tích cho đến tổng hợp phần cứng của thiết kế. Giáo trình Ngôn ngữ mô tả phần cứng Verilog dùng cho sinh viên chuyên ngành Kĩ thuật máy tính và sinh viên các khối điện tử. Để tiếp nhận kiến thức dễ dàng, sinh viên cần trang bị trước kiến thức về thiết kế số và hệ thống số. Giáo trình này được biên dịch và tổng hợp từ kinh nghiệm nghiên cứu giảng dạy của tác giả và ba nguồn tài liệu chính: IEEE Standard for Verilog Hardware Description Language, 2006; Verilog Digital System Design, Second Edition, McGraw-Hill; The Complete Verilog Book, Vivek Sagdeo, Sun Micro System, Inc. Nhằm cung cấp một luồng kiến thức mạch lạc, giáo trình được chia ra làm 9 chương: Chương 1: Dẫn nhập thiết kế hệ thống số với Verilog. Chương này sẽ giới thiệu lịch sử phát triển của ngôn ngữ mô tả phần cứng Verilog, bên 3 / 303 cạnh đó một qui trình thiết kế vi mạch sử dụng ngôn ngữ mô tả phần cứng Verilog cũng được trình bày cụ thể ở đây. Chương 2: Trình bày các từ khóa được sử dụng trong môi trường mô tả thiết kế bởi Verilog. Chương 3: Trình bày các loại dữ liệu được sử dụng trong thiết kế mạch bởi Verilog, gồm hai loại dữ liệu chính đó là loại dữ liệu net và loại dữ liệu biến. Chương 4: Trình bày các toán tử cũng như các dạng biểu thức được hỗ trợ bởi Verilog. Chương 5: Giới thiệu cấu trúc của một thiết kế, phương thức sử dụng thiết kế con. Chương 6: Trình bày phương pháp thiết kế sử dụng mô hình cấu trúc, trong phương thức này, module thiết kế được xây dựng bằng cách gọi các module thiết kế nhỏ hơn và kết nối chúng lại. Chương 7: Trình bày phương thức thiết kế sử dụng mô hình RTL bởi phép gán nối tiếp và mô hình hành vi sử dụng ngôn ngữ có tính trừu tượng cao tương tự như ngôn ngữ lập trình. Phần thiết kế máy trạng thái sử dụng mô hình hành vi cũng được nêu ra trong chương này. Chương 8: Trình bày phương pháp thiết kế và sử dụng tác vụ và hàm. Chương 9: Giới thiệu các phương pháp kiểm tra chức năng của thiết kế. Do thời gian cũng như khối lượng trình bày giáo trình không cho phép tác giả đi sâu hơn về mọi khía cạnh của thiết kế vi mạch như phân tích định thời, tổng hợp phần cứng. Để có được những kiến thức này độc giả có thể tham khảo trong các tài liệu tham khảo mà giáo trình này đã cung cấp. Mặc dù nhóm tác giả đã cố gắng biên soạn kỹ lưỡng tuy nhiên cũng khó tránh khỏi những thiếu sót. Nhóm tác giả mong nhận được những đóng góp mang tính xây dựng từ quí độc giả nhằm chỉnh sửa giáo trình hoàn thiện hơn.
ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN oOo Giáo trình NGƠN NGỮ MƠ TẢ PHẦN CỨNG VERILOG Biên soạn: TS Vũ Đức Lung ThS Lâm Đức Khải Ks Phan Đình Duy 2012 Lời nói đầu Ngày nay, mạch thiết kế với hàng triệu cổng logic tích hợp Chip việc thiết kế mạch dây kết nối tay trở nên bất khả thi, từ lí khái niệm ngơn ngữ có mức độ trừu tượng cao dùng để mô tả thiết kế phần cứng đời, Verilog Cùng với đời ngôn ngữ mô tả phần cứng Verilog hàng loạt công cụ EDA (Electronic Design Automation) CAD (Computer Aided Design) giúp cho kĩ sư thiết kế phần cứng tạo nên Chip có độ tích hợp cao, tốc độ siêu việt chức đa dạng Giáo trình Ngơn ngữ mơ tả phần cứng Verilog nhằm giúp sinh viên trang bị kiến thức thiết kế vi mạch Giáo trình tập trung vào mảng thiết kế mạch số với mạch tổ hợp mạch Giáo trình giới thiệu bước cần thực trình thiết kế vi mạch từ việc mô tả thiết kế, kiểm tra, phân tích tổng hợp phần cứng thiết kế Giáo trình Ngơn ngữ mơ tả phần cứng Verilog dùng cho sinh viên chuyên ngành Kĩ thuật máy tính sinh viên khối điện tử Để tiếp nhận kiến thức dễ dàng, sinh viên cần trang bị trước kiến thức thiết kế số hệ thống số Giáo trình biên dịch tổng hợp từ kinh nghiệm nghiên cứu giảng dạy tác giả ba nguồn tài liệu chính: IEEE Standard for Verilog Hardware Description Language, 2006; Verilog Digital System Design, Second Edition, McGraw-Hill; The Complete Verilog Book, Vivek Sagdeo, Sun Micro System, Inc Nhằm cung cấp luồng kiến thức mạch lạc, giáo trình chia làm chương: Chương 1: Dẫn nhập thiết kế hệ thống số với Verilog Chương giới thiệu lịch sử phát triển ngôn ngữ mô tả phần cứng Verilog, bên cạnh qui trình thiết kế vi mạch sử dụng ngôn ngữ mô tả phần cứng Verilog trình bày cụ thể Chương 2: Trình bày từ khóa sử dụng môi trường mô tả thiết kế Verilog Chương 3: Trình bày loại liệu sử dụng thiết kế mạch Verilog, gồm hai loại liệu loại liệu net loại liệu biến Chương 4: Trình bày tốn tử dạng biểu thức hỗ trợ Verilog Chương 5: Giới thiệu cấu trúc thiết kế, phương thức sử dụng thiết kế Chương 6: Trình bày phương pháp thiết kế sử dụng mơ hình cấu trúc, phương thức này, module thiết kế xây dựng cách gọi module thiết kế nhỏ kết nối chúng lại Chương 7: Trình bày phương thức thiết kế sử dụng mơ hình RTL phép gán nối tiếp mơ hình hành vi sử dụng ngơn ngữ có tính trừu tượng cao tương tự ngơn ngữ lập trình Phần thiết kế máy trạng thái sử dụng mơ hình hành vi nêu chương Chương 8: Trình bày phương pháp thiết kế sử dụng tác vụ hàm Chương 9: Giới thiệu phương pháp kiểm tra chức thiết kế Do thời gian khối lượng trình bày giáo trình khơng cho phép tác giả sâu khía cạnh thiết kế vi mạch phân tích định thời, tổng hợp phần cứng Để có kiến thức độc giả tham khảo tài liệu tham khảo mà giáo trình cung cấp Mặc dù nhóm tác giả cố gắng biên soạn kỹ lưỡng nhiên khó tránh khỏi thiếu sót Nhóm tác giả mong nhận đóng góp mang tính xây dựng từ q độc giả nhằm chỉnh sửa giáo trình hoàn thiện Chương Dẫn nhập thiết kế hệ thống số với Verilog Chương Dẫn nhập thiết kế hệ thống số với Verilog Khi kích thước độ phức tạp hệ thống thiết kế ngày tăng, nhiều công cụ hỗ trợ thiết kế máy tính (CAD) sử dụng vào q trình thiết kế phần cứng Thời kì đầu, cơng cụ mơ tạo phần cứng đưa phương pháp thiết kế, kiểm tra, phân tích, tổng hợp tự động tạo phần cứng cách phức tạp Sự phát triển không ngừng công cụ thiết kế cách tự động phát triển ngôn ngữ mô tả phần cứng (HDLs) phương pháp thiết kế dựa ngôn ngữ Dựa ngôn ngữ mô tả phần cứng (HDLs), công cụ CAD thiết kế hệ thống số phát triển kĩ sư thiết kế phần cứng sử dụng rộng rãi Hiện tại, người ta tiếp tục nghiên cứu để tìm ngôn ngữ mô tả phần cứng tốt Một ngôn ngữ mô tả phần cứng sử dụng rộng rãi ngơn ngữ Verilog HDL Do chấp nhận rộng rãi ngành công nghiệp thiết kế số, Verilog trở thành kiến thức đòi hỏi phải biết kĩ sư sinh viên làm việc học tập lĩnh vực phần cứng máy tính Chương trình bày cơng cụ mơi trường làm việc có sẵn tương thích với ngơn ngữ Verilog mà kĩ sư thiết kế sử dụng qui trình thiết kế tự động để giúp đẩy nhanh tiến độ thiết kế Đầu tiên trình bày bước thiết kế phân cấp, thiết kế mức cao từ việc mô tả thiết kế ngôn ngữ Verilog đến việc tạo phần cứng thiết kế Những qui trình từ khóa chun mơn minh họa phần Kế tiếp thảo luận cơng cụ CAD có tương thích với Verilog chức mơi trường thiết kế tự động Phần cuối chương nói số đặc tính Chương Dẫn nhập thiết kế hệ thống số với Verilog Verilog khiến trở thành ngơn ngữ nhiều kĩ sư thiết kế phần cứng lựa chọn 1.1 Qui trình thiết kế số Trong thiết kế hệ thống số sử dụng mơi trường thiết kế tự động, qui trình thiết kế bắt đầu việc mô tả thiết kế nhiều mức độ trừu tượng khác kết thúc việc tạo danh sách linh kiện đường kết nối linh kiện với (netlist) cho mạch tích hợp với ứng dụng cụ thể (ASIC), mạch in (layout) cho mạch tích hợp theo yêu cầu khách hàng (custom IC), chương trình cho thiết bị logic có khả lập trình (PLD) Hình 1.1 mơ tả bước qui trình thiết kế Bước đầu thiết kế, thiết kế mô tả hỗn hợp mô tả mức độ hành vi (behavioural) Verilog, sử dụng gói (module) thiết kế Verilog thiết kế sẵn, việc gán hệ thống bus wire để liên kết gói thiết kế thành hệ thống hoàn chỉnh Kĩ sư thiết kế phải có trách nhiệm tạo liệu để kiểm tra (testbench) xem thiết kế chức hay chưa dùng để kiểm tra thiết kế sau tổng hợp Việc kiểm tra thiết kế thực việc mơ phỏng, chèn kĩ thuật kiểm tra, kiểm tra thông thường kết hợp ba phương pháp Sau bước kiểm tra đánh giá thiết kế (bước gọi kiểm tra tiền tổng hợp (presynthesis verification)), thiết kế tiếp tục việc tổng hợp để tạo phần cứng thực cho hệ thống thiết kế cuối (ASIC, custom IC or FPLD,…) Nếu hệ thống thiết kế ASIC, thiết kế sẽ sản xuất nhà sản xuất khác; custom IC, thiết kế sản xuất trực tiếp; FPLD, thiết kế nạp lên thiết bị lập trình Sau bước tổng hợp trước Chương Dẫn nhập thiết kế hệ thống số với Verilog phần cứng thực tạo ra, trình mơ khác (hậu tổng hợp (postsynthesis)) phải thực Việc mơ này, ta sử dụng testbench tương tự testbench sử dụng mô tiền tổng hợp (presynthesis) Bằng phương pháp này, mô hình thiết kế mức độ hành vi mơ hình phần cứng thiết kế kiểm tra với liệu ngõ vào Sự khác mô tiền tổng hợp hậu tổng hợp mức độ chi tiết đạt từ loại mô Mô tả thiết kế dùng Verilog module flipflop (q,d,clk); … always(posedge clk) … endmodule Mô tiền tổng hợp: dùng Testbench tạo dạng sóng - Kiểm tra chức - Kiểm tra định thời - Phân tích Tạo liệu trung gian in out Tổng hợp Đặt cell kết Đưa hàm Boole nối Rút gọn biểu thức - Tối ưu diện tích Tạo phần cứng - Tối ưu kết nối kết nối linh kiện 2.1ns Phân tích timing - Chỉ thời gian trì hỗn path mạch - Mô hậu tổng hợp: dùng Testbench tạo dạng sóng - Kiểm tra chức - Kiểm tra định thời in out Nạp thiết kế lên Tạo ASIC netlist tới mức Tạo layout để chế cổng transistor tạo Chip FPGA Hình 1.1 Luồng thiết kế ASIC Chương Dẫn nhập thiết kế hệ thống số với Verilog Những phần mơ tả tỉ mỉ khối Hình 1.1 1.1.1 Dẫn nhập thiết kế Bước thiết kế hệ thống số bước dẫn nhập thiết kế Trong bước này, thiết kế mô tả Verilog theo phong cách phân cấp từ cao xuống thấp (top-down) Một thiết kế hồn chỉnh bao gồm linh kiện mức cổng mức transistor, khối (module) phần cứng có chức phức tạp mô tả mức độ hành vi, linh kiện liệt kê cấu trúc bus Do thiết kế Verilog mức cao thường mô tả mức độ mà mơ tả hệ thống ghi truyền liệu ghi thông qua hệ thống bus, việc mô tả hệ thống thiết kế mức độ xem mức độ truyền liệu ghi (RTL) Một thiết kế hoàn chỉnh mô tả tạo phần cứng tương ứng thực rõ ràng Những cấu trúc thiết kế Verilog mức độ RTL sử dụng phát biểu qui trình (producedural statements), phép gán liên tục (continuous assignments), phát biểu gọi sử dụng khối (module) xây dựng sẵn Những phát biểu qui trình Verilog (procedural statements) dùng để mô tả mức độ hành vi mức cao Một hệ thống linh kiện mơ tả mức độ hành vi tương tự với việc mô tả ngôn ngữ phần mềm Ví dụ, mơ tả linh kiện việc kiểm tra điều kiện ngõ vào nó, bật cờ hiệu, chờ có kiện xảy ra, quan sát tín hiệu bắt tay tạo ngõ Mô tả hệ thống cách qui trình vậy, cấu trúc if-else, case Verilog ngôn ngữ phần mềm khác sử dụng Những phép gán liên tục (continuous assignment) Verilog phép gán cho việc thể chức khối logic, phép Chương Dẫn nhập thiết kế hệ thống số với Verilog gán bus, mô tả việc kết nối hệ thống bus chân ngõ vào ngõ Kết hợp với hàm Boolean biểu thức có điều kiện, cấu trúc ngơn ngữ để mơ tả linh kiện hệ thống theo phép gán ghi bus chúng Những phát biểu gọi sử dụng khối Verilog thiết kế sẵn (instantiantion statements) dùng cho linh kiện mức thấp thiết kế mức độ cao Thay mơ tả mức độ hành vi, chức năng, bus hệ thống, mơ tả hệ thống Verilog cách kết nối linh kiện mức độ thấp Những linh kiện nhỏ mức cổng hay transistor, lớn vi xử lí hoàn chỉnh 1.1.2 Testbench Verilog Một hệ thống thiết kế dùng Verilog phải mô kiểm tra xem thiết kế xem chức chưa trước tạo phần cứng Trong trình chạy mô này, lỗi thiết kế không tương thích linh kiện dùng thiết kế phát Chạy mơ thiết kế đòi hỏi việc tạo liệu ngõ vào kiểm tra trình quan sát kết sau chạy mô phỏng, liệu dùng để kiểm tra gọi testbench Một testbench sử dụng cấu trúc mức cao Verilog để tạo liệu kiểm tra, quan sát đáp ứng ngõ ra, việc bắt tay tín hiệu thiết kế Bên testbench, hệ thống thiết kế cần chạy mô gọi (instantiate) testbench Dữ liệu testbench với hệ thống thiết kế tạo mơ hình mơ mà sử dụng công cụ mô Verilog Chương Dẫn nhập thiết kế hệ thống số với Verilog 1.1.3 Đánh giá thiết kế Một nhiêm vụ quan trọng thiết kế số cần đánh giá thiết kế Đánh giá thiết kế trình mà người thiết kế kiểm tra thiết kế họ có sai sót xảy suốt q trình thiết kế hay khơng Một sai sót thiết kế xảy mơ tả thiết kế mơ hồ, sai sót người thiết kế, sử dụng khối thiết kế Đánh giá thiết kế thực mô phỏng, việc chèn kĩ thuật kiểm tra, kiểm tra thông thường 1.1.3.1 Mô Chạy mô dùng việc đánh giá thiết kế thực trước thiết kế tổng hợp Bước chạy mô hiểu mô mức độ hành vi, mức độ RTL hay tiền tổng hợp Ở mức độ RTL, thiết kế bao gồm xung thời gian clock khơng bao gồm trí hoãn thời gian cổng dây kết nối (wire) Chạy mơ mức độ xác theo xung clock Thời gian việc chạy mô mức độ RTL theo tín hiệu xung clock, không quan tâm đến vấn đề như: nguy hiểm tiềm ẩn khiến thiết kế bị lỗi (hazards, glitch), tượng chạy đua khơng kiểm sốt tín hiệu (race conditions), vi phạm thời gian setup hold tín hiệu ngõ vào, vấn đề liên quan đến định thời khác Ưu điểm việc mô tốc độ chạy mô nhanh so với chạy mô mức cổng mức transistor Chạy mô cho thiết kế địi hỏi liệu kiểm tra Thơng thường mơi trường mô Verilog cung cấp nhiều phương pháp khác để đưa liệu kiểm tra vào thiết kế để kiểm tra Dữ liệu kiểm tra tạo đồ họa sử dụng công cụ soạn Chương Kiểm tra thiết kế assert_always #( severity_level, property_type, msg, coverage_level ) instance_name ( clk, reset_n, test_expr ) Lệnh liên tục chèn kiểm tra test_expr để chắn ln ln cạnh clock Nếu biểu thức kiểm tra sai, thơng điệp tương ứng hiển thị Ví dụ 9.13 module BCD_Counter (input rst, clk, outputreg [3:0] cnt); always @(posedge clk) begin if (rst || cnt >= 10) cnt = 0; else cnt = cnt + 1; end assert_always #(1, 0, “Err: Non BCD Count”, 0) AA1 (clk, 1’b1, (cnt >= 0) && (cnt