Các mức trừu tượng hóa thiết kế
Thuộc phần Kiến thức nền tảng trong hành trình Verilog của Coddy. Bài học 5 trên 90.
Trong thiết kế số, ta có thể mô tả cùng một mạch ở các mức độ chi tiết khác nhau. Verilog là ngôn ngữ có thể mô tả mạch ở bất kỳ mức trừu tượng nào trong số này. Điều đó làm nên sức mạnh của Verilog!
Đây là các cấp độ:
Cấp độ 1: Hành vi
Cấp độ này mô tả mạch điện làm gì, chứ không phải cách mạch thực hiện. Cấp độ này tập trung vào chức năng hoặc hành vi, như "đếm tăng" hoặc "cộng hai số".
Chi tiết bên trong của quá trình đếm hoặc cộng không được hiển thị. Cách biểu đạt này gần với suy nghĩ của con người nhất và dễ viết hơn.
Cấp độ 2: RTL
Cấp độ này cho thấy dữ liệu di chuyển giữa các thanh ghi và những phép toán được thực hiện trên dữ liệu đó. Bạn có thể thấy đường đi của dữ liệu: dữ liệu đi từ một thanh ghi đến bộ cộng, rồi quay lại thanh ghi.
Đây là mức mà hầu hết nhà thiết kế kỹ thuật số làm việc, vì nó cân bằng tốt giữa tính dễ hiểu và mức độ chi tiết cần thiết để tạo ra phần cứng.
Cấp độ 3: Cấp cổng logic
Cấp độ này mô tả mạch bằng các cổng logic (logic gate) cơ bản như AND, OR và XOR. Mọi kết nối đều được thể hiện rõ ràng.
Cấp độ này rất chi tiết và khó viết bằng tay. Thông thường, các công cụ tạo ra nó từ những mô tả ở cấp độ cao hơn, thay vì viết thủ công.
Vì sao điều này quan trọng
- **Cấp độ cao hơn** = Dễ viết hơn, ít quyền kiểm soát hơn
- **Cấp độ thấp hơn** = Khó viết hơn, nhiều quyền kiểm soát hơn
- **RTL** là lựa chọn cân bằng nhất cho hầu hết công việc thiết kế
Thử thách
Cần làm gì:
- Chạy đoạn code này và xem cùng một phép toán được mô tả ở ba mức độ khác nhau như thế nào:
Tự làm thử
module abstraction_demo;
initial begin
$display("=== Design Abstraction Levels ===");
$display("");
$display("Level 1 (Behavioral):");
$display(" 'Add a and b' - no details how");
$display("");
$display("Level 2 (RTL):");
$display(" 'On clock edge, result <= a + b' - shows data flow");
$display("");
$display("Level 3 (Gate Level):");
$display(" 'XOR gates for sum, AND gates for carry' - actual gates");
$display("");
$finish;
end
endmoduleBài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.
Tất cả bài học trong Kiến thức nền tảng
1Giới thiệu
Verilog là gìPhần cứng và phần mềmModule đầu tiênChú thíchCác mức trừu tượng hóa thiết kế4Toán tử phần 1
Toán tử số họcToán tử moduloToán tử so sánhÔn tập: phép tính đơn giảnToán tử thao tác bit7Gán và cổng logic
Gán liên tụcGán bằng toán tửCác cổng nguyên thủy tích hợp sẵnCổng AND, OR, NOTCổng XOR, XNORÔn tập: mạch cổng logic10Ra quyết định
Câu lệnh ifIf và elseÔn tập: Bộ so sánh đơn giảnCâu lệnh caseCasex và casezÔn tập: Thiết kế ALU5Các toán tử, phần 2
Toán tử logicToán tử rút gọnToán tử dịch bitToán tử nốiToán tử điều kiệnÔn tập: thử thách về toán tử11Vòng lặp
Vòng lặp forVòng lặp whileVòng lặp repeatVòng lặp vô hạnCâu lệnh vô hiệu hóaÔn tập: các mẫu vòng lặp3Hệ thống số
Biểu diễn nhị phânSố có kích thướcSố không có kích thướcSố âmCác giá trị đặc biệt X và ZÔn tập: định dạng số6Module
Cấu trúc moduleCổng đầu vào và đầu raCổng vào ra hai chiềuKhởi tạo moduleÁnh xạ cổng theo tênÁnh xạ cổng theo thứ tựÔn tập: xây dựng module9Khối thủ tục
Khối alwaysKhối initialDanh sách độ nhạyPhép gán chặnPhép gán không chặnÔn tập: always và initial12Dự án bộ ghép kênh
Thiết kế bộ ghép kênh 2 thành 1Thiết kế bộ ghép kênh 4 thành 115Bộ điều khiển đèn giao thông
Xác định các trạng tháiLogic máy trạng tháiTự luyện tập: Trình biên dịch Verilog online