Tổng quan về hdl, vhdl, verilog và thiết kế bộ giải mã dùng verilog
MỤC LỤC
LỜI NÓI ĐẦU 4
TỔNG QUAN VỀ HDL, VHDL, VERILOG VÀ THIẾT KẾ BỘ GIẢI MÃ DÙNG VERILOG 6
PHẦN I: TỔNG QUAN VỀ HDL VERILOG. 6
1.1. Giới thiệu về HDL và verilog:. 6
1.1.1. Lịch sử phát triển HDL: 6
1.1.2. Giới thiệu về HDLs: 7
1.1.3. Verilog HDL: 7
1.2. Ngôn ngữ đặc tả phần cứng (HDL):. 8
1.3. Phương pháp luận thiết kế HDL:. 9
1.3.1. Design spelification ( thiết kế ý niệm):. 10
1.3.2. Thiết kế phân hoạch ( design partition):. 11
1.3.3. Design Entry:. 12
1.3.4. Mô phỏng và kiểm tra chức năng ( Simulation and function verification). 12
1.3.5. Thiết kế tích hợp và kiểm tra ( design integration and verification). 13
1.3.6. Presynthesis Sign – off:. 13
1.3.7. Tổng hợp mức cổng và ánh xạ công nghệ (Gate – level synthesis and technology mapping) 13
1.3.8. Thiết kế sau tổng hợp ( Post – synthesis design validation):. 14
1.3.9. Kiểm tra thời gian sau tổng hợp ( Post – synthesis timing verification):. 15
1.3.10. Kiểm tra sản phẩm và mô phỏng lỗi ( test generation and fault simulation). 16
1.3.11. Sắp đặt và nối dây ( placement ang routing). 16
1.3.12. Kiểm tra vật lý và điện ( Physical and electrical design rule checks). 17
1.3.13. Loại bỏ ký sinh ( Parasitic extraction). 17
1.3.14. Design sign – off:. 17
1.4. Mô hình cấu trúc và mô hình hành vi trong HDLs:. 18
1.5. Những nguy hiểm trong thiết kế Verilog:. 18
1.6. Mô hình cấu trúc cho mạch luận lý tổ hợp:. 19
1.6.1. Mô hình mạch tổ hợp. 19
1.6.2. Mô hình cấu trúc mạch tổ hợp. 19
1.6.3. Verilog primitives. 20
1.6.4. Mô hình cấu trúc trong Verilog. 21
1.6.5. Module ports. 22
1.6.6. Quy tắt trong Verilog. 22
1.6.7. Thiết kế từ trên xuống (top-down). 22
1.6.8. Binary full adder. 23
1.6.9. Thiết kế phân cấp và tổ chức mã nguồn. 23
1.6.10. Mạch cộng 16-bit ripple carry. 24
1.6.11. Cây phân cấp mạch cộng 16-bit ripple carry. 25
1.6.12. Hiện thực mạch cộng 16-bit ripple carry. 25
1.6.13. Vectors trong Verilog. 26
1.7. Mô phỏng luận lý, kiểm chứng thiết kế và phương pháp luận kiểm tra. 26
1.7.1. Các giá trị luận lý trong Verilog. 26
1.7.2. Phương pháp luận kiểm tra. 27
1.8. Thời gian trễ truyền lan. 28
1.8.1. Thời gian trễ truyền lan. 28
1.8.2. Các loại trễ lan truyền. 29
1.9. Mô hình bảng sự thật cho mạch luận lý tổ hợp và tuần tự với verilog. 29
1.9.1. Bảng sự thật trong verilog. 29
PHẦN II: TỔNG QUAN VỀ VHDL. 30
2.1. Giới thiệu về ngôn ngữ mô tả phần cứng VHDL. 30
2.2. Cấu trúc một mô hình hệ thống mô tả bằng VHDL. 32
2.2.1. Thực thế (entity) của mô hình. 32
2.2.2. Kiến trúc của mô hình. 34
PHẦN III: THIẾT KẾ BỘ GIẢI MÃ DÙNG VERILOG 36
3.1. Ví dụ 1: Thiết kế mạch giải mã 3 sang 8. 37
3.2. Ví dụ 2 : Thiết kế mạch giải mã 4 sang 16. 43
KẾT LUẬN 48
LỜI NÓI ĐẦU Hiện nay các mạch tích hợp ngày càng thực hiện được nhiều chức năng hơn, do đó chúng ngày càng trở nên phức tạp hơn. Các phương pháp thiết kế mạch truyền thống như dùng tối thiểu hoá hàm Boolean hay dùng sơ đồ các phần tử không còn đáp ứng được các yêu cầu đặt ra khi thiết kế. Hơn nữa các mạch thiết kế ra yêu cầu phải được thử nghiệm kỹ lưỡng trước khi đưa vào chế tạo hàng loạt.
Mặt khác cần phải xây dựng một bộ tài liệu hướng dẫn vận hành hệ thống hoàn chỉnh dễ hiểu và thống nhất. Chúng ta đã làm việc với một số chương trình phần mềm hỗ trợ cho việc thực hiện mô tả mạch hay hiểu được cách thiết kế mạch. Ví dụ: Proteus, HDL,VHDL, Verilog Trong phần này chúng ta sử dụng hai ngôn ngữ phần cứng chuẩn công nghiệp là VHDL và Verilog. Cả hai ngôn ngữ này đều được sử dụng rộng rãi và đã được IEE chấp nhận.
Dưới đây là bài viết : “Tổng quan về HDL, VHDL, Verilog và thiết kế bộ giải mã dùng Verilog”. Bài viết này sẽ giúp chúng ta hiểu một cách tổng quan nhất về HDL, VHDL, Verilog và biết cách thiết kế một bộ giải mã sử dụng Verilog, thông qua phần mềm Quatus II.
50 trang |
Chia sẻ: lvcdongnoi | Lượt xem: 5115 | Lượt tải: 2
Bạn đang xem trước 20 trang tài liệu Tổng quan về hdl, vhdl, verilog và thiết kế bộ giải mã dùng verilog, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Hà Nội 01- 2012
BỘ CÔNG THƯƠNG
TRƯỜNG ĐẠI HỌC KINH TẾ - KỸ THUẬT CÔNG NGHIỆP
KHOA ĐIỆN - ĐIỆN TỬ
YYYYY YYYYY
THỰC TẬP NÂNG CAO HDL
Đề Tài: Tổng quan về HDL, VHDL, Verilog và thiết kế bộ giải mã dùng verilog
Giảng viên hướng dẫn : Chử Đức Hoàng
Sinh viên thực hiện : Phạm Tiến Đại
Vũ Xuân Đạo
Lê Tuấn Đạt
Đinh Công Đạt
Phùng Tiến Đạt
Trần Hữu Long
Lớp : Điện Tử 2AHN
Nhóm : 6
MỤC LỤC
LỜI NÓI ĐẦU
Hiện nay các mạch tích hợp ngày càng thực hiện được nhiều chức năng hơn, do đó chúng ngày càng trở nên phức tạp hơn. Các phương pháp thiết kế mạch truyền thống như dùng tối thiểu hoá hàm Boolean hay dùng sơ đồ các phần tử không còn đáp ứng được các yêu cầu đặt ra khi thiết kế. Hơn nữa các mạch thiết kế ra yêu cầu phải được thử nghiệm kỹ lưỡng trước khi đưa vào chế tạo hàng loạt.
Mặt khác cần phải xây dựng một bộ tài liệu hướng dẫn vận hành hệ thống hoàn chỉnh dễ hiểu và thống nhất. Chúng ta đã làm việc với một số chương trình phần mềm hỗ trợ cho việc thực hiện mô tả mạch hay hiểu được cách thiết kế mạch. Ví dụ: Proteus, HDL,VHDL, Verilog…Trong phần này chúng ta sử dụng hai ngôn ngữ phần cứng chuẩn công nghiệp là VHDL và Verilog. Cả hai ngôn ngữ này đều được sử dụng rộng rãi và đã được IEE chấp nhận.
Dưới đây là bài viết : “Tổng quan về HDL, VHDL, Verilog và thiết kế bộ giải mã dùng Verilog”. Bài viết này sẽ giúp chúng ta hiểu một cách tổng quan nhất về HDL, VHDL, Verilog và biết cách thiết kế một bộ giải mã sử dụng Verilog, thông qua phần mềm Quatus II.
TỔNG QUAN VỀ HDL, VHDL, VERILOG VÀ THIẾT KẾ BỘ GIẢI MÃ DÙNG VERILOG
PHẦN I: TỔNG QUAN VỀ HDL VERILOG.
Giới thiệu về HDL và verilog:
Lịch sử phát triển HDL:
ISP (circa 1977) – dự án nghiên cứu CMU (Carnegie Mellon University)
Mô phỏng nhưng không tổng hợp
Abel (circa 1983) – được triển bởi Data-I/O
Mục tiêu dùng cho các thiết bị luận lý khả lập trình
Không tốt cho máy trạng thái
Verilog ( circa 1985) – phát triển bởi Gateway ( now Cadence)
Đặc tả được đưa ra từ 1985
Ban đầu được phát triển cho mô phỏng, tương tự C và Pascal
Hiệu quả và dễ viết
Berkeley phát triển công cụ tổng hợp vào thập niên 80
Được IEEE chuẩn hóa
Verilog standardized (Verilog-1995 standard)
Verilog-2001 standard
VHDL (circa 1987) - DoD sponsored standard
Dưa trên VHSIC phát triển bởi DARPA
Tương tự như Ada (Nhấn mạnh vào tái sử dụng và bảo trì)
Ngữ nghĩa phỏng mô rõ ràng
Rất tổng quát nhưng dài dòng
Được IEEE chuẩn hóa
VHDL standardized (’87 and ’93)
Cấu trúc nghiêm ngặt
Giới thiệu về HDLs:
HDLs (Hardware Description Languages)
Không là một ngôn ngữ lập trình
Tựa C
Thêm những chức năng mô hình hóa, mô phỏng chức năng.
Verilog vs. VHDL
Các bước thiết kế bằng HDL
Mô tả mạch từ khóa
Biên dịch để kiểm tra cú pháp (syntax)
Mô phỏng để kiểm tra chức năng của mạch
Verilog HDL:
Verilog là một ngôn ngữ lớn
Có nhiều tính năng cho tổng hợp và mô phỏng phần cứng
Có thể biểu diễn những đặc trưng mức thấp
Transistor
Có thể hoạt động như ngôn ngữ lập trình
Cấu trúc lặp
Cấu trúc điều khiển….
Các công cụ mô phỏng chấp nhận toàn bộ khái niệm của Verilog
Các công cụ tổng hợp công chỉ chấp nhận một phần các khái niệm của Verilog
Chỉ tập trung nghiên cứu một phần
Sử dụng ở một mức thích hợp
Tập trung trên những cấu trúc tổng hợp được
Tập trung tránh những cấu trúc gây khi tổng hợp
Ngôn ngữ đặc tả phần cứng (HDL):
Là ngôn ngữ thuộc lớp ngôn ngữ máy tính ( computer language).
Dùng để miêu tả cấu trúc và hoạt động của một vi mạch.
Dùng mô phỏng, kiểm tra hoạt động của vi mạch.
Biểu diễn hành vi theo thời gian và cấu trúc không gian của mạch.
Bao gồm những ký hiệu biểu diễn thời trang và sự đồng thời ( time and concurrence).
Ưu điểm:
Dễ quản lý những mạch lớn và phức tạp.
Uyển chuyển và độc lập với công nghệ.
Cho phép tái sử dụng những thiết kế đã có sẵn.
Mạch có thể dược tổng hợp tự động từ đặc tả.
VerilogTM & VHDL.
Được sử dụng rộng rãi trong công nghiệp.
Theo chuẩn IEEE (Institute of Electrical and Electronics Engineerings).
Được hỗ trợ bởi các công cụ tổng hợp ASIC (appilcationspecific integrated circuits) và FPGA (field-programmable gate arrays).
Phương pháp luận thiết kế HDL:
Kiểm tra: thiết kế đã đúng yêu cầu chưa? Ánh xạ đặc tả thành các hiện thực
Chức năng: Hành vi I/O
Mức thanh ghi (Kiến trúc)
Mức lý luận (Cổng)
Mức transistor (Điển tử)
Timing: Waveform Behavior
Dưới đây là lưu đồ thiết kế ASICs bằng HDL:
Design spelification ( thiết kế ý niệm):
Đặc tả chi tiết:
Chức năng.
Thời gian.
Năng lượng tiêu hao.
Biểu diễn:
Đồ thị trạng thái ( state transation graph).
Máy trạng thái (algorithmic state machine).
Ngôn ngữ cấp cao: system C , superLog…
Thiết kế phân hoạch ( design partition):
Mạch lớn được phân chia thành các mạch nhỏ hơn.
Mỗi mạch nhỏ này được đặc tả bằng HDL.
Mỗi mạch nhỏ có thể được tổng hợp trong thời gian chấp nhận được.
Phương pháp thiết kế từ trên xuống ( top – down design/ hierarchical design).
Design Entry:
Đặc tả thiết kế theo một dạng chuẩn
Ngày nay dùng HDL.
Mô hình hành vi (behavioral modeling).
Được sử dụng nhiều trong công nghiệp.
Chỉ ra mạch sẽ thực hiện chức năng gì.
Không cần chỉ ra xây dựng phần cứng như thế nào.
Các bước thiết kế dùng mô hình hành vi:
Tạo hành vi nguyên mẫu cho thiết kế.
Kiểm tra chức năng: Sử dụng những công cụ tổng hợp tối ưu và ánh xạ thiết kế vào một công nghệ.
Mô phỏng và kiểm tra chức năng ( Simulation and function verification).
Quay về bước 3 nếu phát hiện lỗi.
Ba bước tiến hành kiểm tra.
Lập kế hoạch kiểm tra: chức năng nào cần kiểm tra và kiểm ra thế nào?
Thiết kế mẫu kiểm tra ( testbench).
Thực hiện kiểm tra.
Thiết kế tích hợp và kiểm tra ( design integration and verification)
Các mạch nhỏ được tích hợp lại và kiểm tra
Chức năng:
Cần có các testbench riêng kiểm tra chức năng ngõ nhập – xuất hoạt động của bus…
Đây là bước quyết định và phải được thực hiện hoàn hảo để đảm bảo tính đúng đắn của quá trình tổng hợp.
Presynthesis Sign – off:
Bảo đảm tất cả các chức năng được thể hiện trong testbench.
Bảo đảm những khác biệt giữa các chức năng biểu diễn bằng mô hình hành vi và thiết kế được giải quyết hoàn toàn.
Sign – off được thực hiện sau khi tất cả các lỗi chức năng đã giải quyết xong.
Tổng hợp mức cổng và ánh xạ công nghệ (Gate – level synthesis and technology mapping)
Sử dụng công cụ tổng hợp để tạo ra biểu diễn luận lý tối ưu và thực hiện theo một công nghệ hiện có.
Công cụ tối ưu loại bỏ những dư thừa và giảm diện tích mạch logic cần dùng để thực hiện.
Kết quả sẽ được ánh xạ vào một FPGA:
Netlist.
Cơ sở dữ liệu.
Thiết kế sau tổng hợp ( Post – synthesis design validation):
Bộ so sánh được thực hiện bằng phần mềm hoặc bằng đồ họa.
Tìm hiểu và giải quyết sự khác biệt một cách cẩn thận.
Verilog behavioral description: Phần mô tả hành vi của verilog.
Logic Synthesis: logic tổng hợp.
Gate – level description: Phần mô tả mức cổng.
Stimulus generation: máy kích thích.
Testbench for post – synthesis design validation: Mẫu kiểm tra cho thiết kế sau tổng hợp.
Response Comparation: Đáp ứng lại sự so sánh.
Check signal: Kiểm tra tín hiệu.
Kiểm tra thời gian sau tổng hợp ( Post – synthesis timing verification):
Thời gian trên mạch phải phù hợp với thiết kế trên những đường then chốt (critical path).
Bước này được lặp lại sau bước loại bỏ điện dung không mong muốn ( parasitic extraction)
Thực hiện tổng hợp lại nếu thời gian không phù hợp với thiết kế.
Thay đổi kích thước transitor.
Thay đổi kiến trúc mạch.
Thay đổi công nghệ.
Kiểm tra sản phẩm và mô phỏng lỗi ( test generation and fault simulation).
Sau khi chế tạo mạch tích hợp phải được kiểm tra tính đúng đắn ( lỗi sản xuất – không phải lỗi thiết kế).
Có thể dùng lại những mẫu kiểm tra mô hình hành vi để kiểm tra sản phẩm sau khi chế tạo.
Mô phỏng lỗi là quyết định một tập hợp các mẫu dùng để kiểm tra có các lỗi này hay không -> sử dụng phần mềm tạo thêm các mẫu thử.
Sắp đặt và nối dây ( placement ang routing).
Sắp xếp các linh kiện (cell) lên một vùng giới hạn và kết nối các đường tín hiệu giữa chúng.
Chèn tín hiệu clock vào mạch sao cho không xảy ra lệch xung clock ( clock skew).
Kiểm tra vật lý và điện ( Physical and electrical design rule checks).
Layout vật lý của thiết kế phải được kiểm tra các ràng buộc.
Độ dày vật liệu ( material width)
Chồng lấp ( overlap)
Tách biệt ( separation)
+ Kiểm tra điện:
Fan – out
Các tín hiệu không trỗn lẫn với nhau (compromise).
Nhiễu.
Tiêu hao năng lượng.
Loại bỏ ký sinh ( Parasitic extraction)
Điện dung ký sinh ( Parasitic capacitance)
Không có trong thiết kế
Ảnh hưởng xấu đến hoạt động của mạch
Làm giảm băng thông
Sử dụng phần mềm để tạo ra các kiểm tra chính xác về các đặc tính điện và thời gian ( electrical characteristics and timing performance).
Design sign – off:
Các ràng buộc được thỏa mãn.
Đặc tả bao gồm hình dạng hình học cho quá trình sản xuất.
Các tài nguyên được mở rộng để chip sản xuất ra thỏa mãn thiết kế về hiệu suất và chức năng.
Mô hình cấu trúc và mô hình hành vi trong HDLs:
Cấu trúc (Structural) chỉ tra cấu trúc phần cứng thật sự của mạch
Mức trừu tượng thấp
Các cổng cơ bản ( ví dụ and, or, not)
Cấu trúc phân cấp thông qua các module
Tương tự lập trình hợp ngữ
Hành vi (Behavioral) chỉ ra hoạt động của mạch
trên các bits
Mức trừu tượng cao hơn
Biểu diễn bằng các biểu thức (ví dụ out = (a & b) | c)
Không phải tất cả các đặc tả hành đều tổng hợp được
Không sử dụng: + - * / % > >= > <<
Những nguy hiểm trong thiết kế Verilog:
Chương trình tuần tự, bộ tổng hợp có thể sẽ phải thêm phần nhiều chi tiết cứng
Cần một bộ priority encoder
Nếu song song những chương trình song, có thể có trạng thái không xác định
Nhiều khối “always”, khối nào thực thi trước?
Tạo ra nhiều trạng thái không dự dịnh trước
if (x == 1) out = 0;
if (y == 1) out = 1; // else out retains previous state?
R-S latch!
Không tính trước được số phần tử phần cứng
x = x + 1 có thể cần RẤT NHIỀU phần tử phần cứng
Mô hình cấu trúc cho mạch luận lý tổ hợp:
Mô hình mạch tổ hợp
Một mô hình Verilog của một mạch tóm tắt các mô tả chức năng bằng góc nhìn cấu trúc hay hành vi trên những mối quan hệ ngõ vào-ngõ ra
Một mô hình cấu trúc là một cấu trúc kết nối (netlist) chứa
Các cổng
Các khối chức năng
Một mô hình hành vi là
Các biểu thức Boolean đơn giản
Mô hình chuyển đổi mức thanh ghi ( Register Transfer Level – RTL)
Một giải thuật
Mô hình cấu trúc mạch tổ hợp
Thiết kế cấu trúc tương tự như tạo ra một sơ đồ (schematic)
Schematic
Hình biểu diễn cổng logic,
Ngõ vào ra,
Các đường kết nối giữa các cổng.
Mô hình cấu trúc HDL
Danh sách các cổng cơbản và kết nối giữa chúng
Các phát biểu chỉ ra ngõ vào-ra
Verilog primitives
Primitives là các đối tượng cơ bản có thể được sử dụng trong thiết kế
26 đối tượng chức năng được định nghĩa trước
Mô hình cấu trúc trong Verilog
Module
Ví dụ:
Module ports
Giao tiếp với “môi trường” bên ngoài
Kiểu của port quyết định chiều truyền liệu
Một chiều (Unidirectional)
input
output
Hai chiều (Bidirectional)
inout
Kiểu của module port phải được khai báo tường minh và không cần theo thứ tự xuất hiện trong port list
Quy tắt trong Verilog
Phân biệt chữ hoa thường (Case sensitive)
Identifier: a-z, A-Z, 0-9, ‘_’ và ‘$’
Tên biến không được bắt đầu bằng ‘$’ hay ký số và có thể tối đa là 1024 ký tự
Một phát biểu được kết thúc bằng ‘;’
Chú thích
‘//’ một dòng chú thích
/*…*/ chú thích nhiều dòng
Các identifiers có phạm vi nhất định
Có thể viết các phát biểu trên một dòng hay nhiều dòng
Thiết kế từ trên xuống (top-down)
Hệ thống phức tạp được phân chia thành những đơn vị chức năng nhỏ hơn
Dễ thiết kế
Dễ kiểm tra
Các module lồng nhau trong Verilog hỗ trợ thiết kế từ trên xuống
Module tham khảo đến module khác được gọi là module “cha”, module được module khác tham khảo đến gọi là module “con”
Độ sâu của các module lồng nhau không giới hạn
Mỗi module con phải có tên duy nhất trong phạm vi module cha (trừ các primitives)
Binary full adder
Thiết kế phân cấp và tổ chức mã nguồn
Top-level module là module ở cấp cao nhhất
Module ở mức thấp nhất
Chứa các primitives
Các module không phân chia nhỏ hơn
Tất cả các module được đặt trong một hay nhiều tập tin khác nhau
Công cụ mô phỏng tích hợp các module từ các tập tin
Mạch cộng 16-bit ripple carry
Cây phân cấp mạch cộng 16-bit ripple carry.
Hiện thực mạch cộng 16-bit ripple carry.
Vectors trong Verilog.
Một vector được biểu diễn bằng ngoặc vuông chứa dãy liên tiếp các bit
sum[3:0] vector sum kích thước 4 bit
Bit trái nhất là MSB
Bit phải nhất là LSB
Có thể truy xuất từng bit hay từng dãy bit trong vector
sum[1] bit thứ 2 từ phải sang của sum
sum[2:1] bit thứ 2 và 3 từ phải sang của sum
sum[4] giá trị x (không xác định)
Có thể gán, so sánh 2 vector với nhau
Mô phỏng luận lý, kiểm chứng thiết kế và phương pháp luận kiểm tra.
Các giá trị luận lý trong Verilog.
Phương pháp luận kiểm tra.
Kiểm tra mạch thực hiện đúng chức năng
Kiểm tra ngẫu nhiên phức tạp và không chính xác
Cần lập kế hoạch kiểm tra tỉ mỉ
Kiểm tra mạch lớn
Kiểm tra tất cả các trường hợp
Mạch cộng 16 bit cần kiểm tra 223 trường hợp
Kiểm tra phân cấp
half_adder
full_adder
Add_rca_4 cần kiểm tra 29 trường hợp
Chọn một số trường hợp để kiểm tra kết nối của các
Add_rca_4 trong Add_rca_16
Kiểm tra theo chiều ngược so với cây phân cấp thiết kế
Thời gian trễ truyền lan.
Thời gian trễ truyền lan.
Ngõ vào thay đổi ngõ ra không thay đổi ngay lập tức
Các phần tử cơ bản của verilog có thời gian trễ là 0
Các vi mạch thực tế được sản xuất dựa trên các thư viện chuẩn được định nghĩa trước
Người thiết kế chỉ quan tâm đến tính đúng đắn của mạch
Sử dụng các công cụ tổng hợp để hiện thực các thiết kế thỏa mãn các ràng buộc thời gian
‘timescale /
Chỉ thị biên dịch
Chỉ ra đơn vị thời gian và độ chính xác thời gian trễ
Phải được khai báo trước khi các module
Ví dụ: Timecase
Các loại trễ lan truyền.
Trễ quán tính (inertial delay)
Trễ truyền (transport delay)
Gây ra do các dây nối
0.033ns/1cm
Có thể bỏ qua
wire #2 long_wire
Mô hình bảng sự thật cho mạch luận lý tổ hợp và tuần tự với verilog.
Bảng sự thật trong verilog.
Table
Ngõ ra phải có kiểu vô hướng (scalar)
Dùng kí hiệu ‘?’ thay cho 0, 1, x
Thứ tự các cột trong tương ứng với thứ tự trong khai báo input của module
Mạch tổ hợp
:
Mạch tuần tự
::
Ngõ ra phải được khai báo kiểu thanh ghi
Dùng kí hiệu ‘-’ biểu diễn ngõ ra không thay đổi
PHẦN II: TỔNG QUAN VỀ VHDL
2.1. Giới thiệu về ngôn ngữ mô tả phần cứng VHDL.
VHDL là ngôn ngữ mô tả phần cứng cho các mạch tích hợp tốc độ cao, là một loại ngôn ngữ mô tả phần cứng được phát triển cho chương trình VHSIC ( Very High Speed Itergrated Circuit) của bộ quốc phòng Mỹ. Mục tiêu của việc phát triển VHDL là có được một ngôn ngữ mô phỏng phần cứng tiêu chuẩn và thống nhất cho phép thử nghiệm các hệ thống số nhanh hơn cũng như cho phép dễ dàng đưa các hệ thống đó vào ứng dụng trong thực tế.
VHDL được phát triển như một ngôn ngữ độc lập không gắn với bất kỳ một phương pháp thiết kế, một bộ mô tả hay công nghệ phần cứng nào. Người thiết kế có thể tự do lựa chọn công nghệ, phương pháp thiết kế trong khi chỉ sử dụng một ngôn ngữ duy nhất. Và khi đem so sánh với các ngôn ngữ mô phỏng phần cứng khác đã kể ra ở trên ta thấy VHDL có một số ưu điểm hơn hẳn các ngôn ngữ khác:
Thứ nhất là tính công cộng: VHDL được phát triển dưới sự bảo trợ của chính phủ Mỹ và hiện nay là một tiêu chuẩn của IEEE. VHDL được sự hỗ trợ của nhiều nhà sản xuất thiết bị cũng như nhiều nhà cung cấp công cụ thiết kế mô phỏng hệ thống.
Thứ hai là khả năng hỗ trợ nhiều công nghệ và phương pháp thiết kế. VHDL cho phép thiết kế bằng nhiều phương pháp ví dụ phương pháp thiết kế từ trên xuống, hay từ dưới lên dựa vào các thư viện sẵn có. VHDL cũng hỗ trợ cho nhiều loại công cụ xây dựng mạch như sử dụng công nghệ đồng bộ hay không đồng bộ, sử dụng ma trận lập trình được hay sử dụng mảng ngẫu nhiên.
Thứ ba là tính độc lập với công nghệ: VHDL hoàn toàn độc lập với công nghệ chế tạo phần cứng. Một mô tả hệ thống dùng VHDL thiết kế ở mức cổng có thể được chuyển thành các bản tổng hợp mạch khác nhau tuỳ thuộc công nghệ chế tạo phần cứng mới ra đời nó có thể được áp dụng ngay cho các hệ thống đã thiết kế.
Thứ tư là khả năng mô tả mở rộng: VHDL cho phép mô tả hoạt động của phần cứng từ mức hệ thống số cho đến mức cổng. VHDL có khả năng mô tả hoạt động của hệ thống trên nhiều mức nhưng chỉ sử dụng một cú pháp chặt chẽ thống nhất cho mọi mức. Như thế ta có thể mô phỏng một bản thiết kế bao gồm cả các hệ con được mô tả chi tiết.
Thứ năm là khả năng trao đổi kết quả: Vì VHDL là một tiêu chuẩn được chấp nhận, nên một mô hình VHDL có thể chạy trên mọi bộ mô tả đáp ứng được tiêu chuẩn VHDL. Các kết quả mô tả hệ thống có thể được trao đổi giữa các nhà thiết kế sử dụng công cụ thiết kế khác nhau nhưng cùng tuân theo tiêu chuẩn VHDL. Cũng như một nhóm thiết kế có thể trao đổi mô tả mức cao của các hệ thống con trong một hệ thống lớn (trong đó các hệ con đó được thiết kế độc lập).
Thứ sáu là khả năng hỗ trợ thiết kế mức lớn và khả năng sử dụng lại các thiết kế: VHDL được phát triển như một ngôn ngữ lập trình bậc cao, vì vậy nó có thể được sử dụng để thiết kế một hệ thống lớn với sự tham gia của một nhóm nhiều người. Bên trong ngôn ngữ VHDL có nhiều tính năng hỗ trợ việc quản lý, thử nghiệm và chia sẻ thiết kế. Và nó cũng cho phép dùng lại các phần đã có sẵn.
2.2. Cấu trúc một mô hình hệ thống mô tả bằng VHDL.
Thông thường một mô hình VHDL bao gồm ba phần: thực thể, kiến trúc và các cấu hình. Đôi khi ta xử dụng các gói( packages) và mô hình kiểm tra hoạt động của hệ thống( testbench).
2.2.1. Thực thế (entity) của mô hình.
Phần khai báo thực thể chỉ rõ TÊN của thực thể và liệt kê các lối vào và ra và có dạng chung như sau
Entity tên_thực_thể is
Generic (khai báo generic);
Port (khai báo các tín hiệu vào ra);
End tên_thực_thể;
Một thực thể luôn bắt đầu với từ khóa entity, theo sau là tên của thực thể và từ khóa is. Rồi đến các khai báo cổng với từ khóa port. Một thực thể luôn kết thúc với từ khóa end và tên của thực thể.
Tên thực thể là tên của thực thể do người dùng đặt.
Các tín hiệu vào ra: tên của các tín hiệu do người dung đặt, ngăn cách với nhau bởi dấu phẩy, chỉ ra các tín hiệu nối với bên ngoài.
Các chế độ của tín hiệu khai báo trong “port”: chỉ ra chiều của tín hiệu, có các mode sau:
in: chỉ ra rằng tín hiệu là một tín hiệu vào.
out: chỉ ra rằng tín hiệu là một tín hiệu ra khỏi thực thể và chỉ các thực thể khác dùng đến tín hiệu này mới có thể đọc giá trị của nó.
buffer: tín hiệu là tín hiệu ra và giá trị của nó có thể được đọc cả ở bên trong thực thể.
inout: tín hiệu có thể là tín hiệu vào hoặc tín hiệu ra.
Ví dụ 1: ENTITY Adder IS
-- declares the generic identifier n having a default value 4
GENERIC (n: INTEGER := 4);
PORT (
-- the vector size is 3 downto 0 since n is 4
A, B: IN STD_LOGIC_VECTOR(n-1 DOWNTO 0);
Cout: OUT STD_LOGIC;
SUM: OUT STD_LOGIC_VECTOR(n-1 DOWNTO 0));
S: OUT STD_LOGIC);
END Siren;
2.2.2. Kiến trúc của mô hình.
Cấu trúc của nó như sau:
ARCHITECTURE tên_architecture OF tên_entity IS
[các phần khai báo:signal, component…]
BEGIN
[code]
END tên_architecture;
Trong kiến trúc mô hình chúng ta có thể khai báo tất cả mọi thứ liên quan tới chương trình, trong đó có các process, các chương trình con với lời gọi hàm component, và khai báo các signal và các câu lệnh “port map” để kết nối các thành phần con có trong kiến trúc. Nói chung cũng như ngôn ngũ C thì ở đây kiến trúc(architecture) là thân của chương trình của ta.
Ví dụ 2 :
-- using a FOR-GENERATE statement to generate four instances of the full adder
-- component for a 4-bit adder
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY Adder4 IS PORT (
Cin: IN STD_LOGIC;
A, B: IN STD_LOGIC_VECTOR(3 DOWNTO 0);
Cout: OUT STD_LOGIC;
SUM: OUT STD_LOGIC_VECTOR(3 DOWNTO 0));
END Adder4;
ARCHITECTURE Structural OF Adder4 IS
COMPONENT FA PORT (
ci, xi, yi: IN STD_LOGIC;
co, si: OUT STD_LOGIC);
END COMPONENT;
SIGNAL Carryv: STD_LOGIC_VECTOR(4 DOWNTO 0);
BEGIN
Carryv(0) <= Cin;
Adder: FOR k IN 3 DOWNTO 0 GENERATE
FullAdder: FA PORT MAP (Carryv(k), A(k), B(k), Carryv(k+1), SUM(k));
END GENERATE Adder;
Cout <= Carryv(4);
END Structural;
PHẦN III: THIẾT KẾ BỘ GIẢI MÃ DÙNG VERILOG
Mạch giải mã là mạch có chức năng ngược lại với mạch mã hoá tức là nếu có 1 mã số áp vào ngõ vào thì tương ứng sẽ có 1 ngõ ra được tác động, mã ngõ vào thường ít hơn mã ngõ ra. Tất nhiên ngõ vào cho phép phải được bật lên cho chức năng giải mã.
Mạch giải mã được ứng dụng chính trong ghép kênh dữ liệu, hiển thị led 7 đoạn, giải mã địa chỉ bộ nhớ, thiết kế bộ cộng.
3.1. Ví dụ 1: Thiết kế mạch giải mã 3 sang 8.
Mạch giải mã 3 đường sang 8 đường bao gồm 3 ngõ vào tạo nên 8 tổ hợp trạng thái, ứng với mỗi tổ hợp trạng thái được áp vào sẽ có 1 ngõ ra được tác động.
Từ bảng sự thật ta có thể vẽ được sơ đồ mạch logic của mạch giải mã trên
Cấu trúc mạch giải mã 3 sang 8
Rút gọn hàm logic sử dụng mạch giải mã :
Nhiều hàm logic có ngõ ra là tổ hợp của nhiều ngõ vào có thể được xây dựng từ mạch giải mã kết hợp với một số cổng logic ở ngõ ra(mạch giải mã chính là 1 mạch tổ hợp nhiều cổng logic cỡ MSI). Mạch giải mã đặc biệt hiệu quả hơn so với việc sử dụng các cổng logic rời trong trường hợp có nhiều tổ hợp ngõ ra.
Ví dụ sau thực hiện mạch cộng 3 số X, Y, Z cho tổng là S và số nhớ là C thực hiện bằng mạch giải mã :
Giả sử mạch cộng thực hiện chức năng logic như bảng sau :
Từ bảng cho phép ta xác định được các tổ hợp logic ngõ vào để S rồi C ở mức cao.
S(x, y, z) = (1,2,4,7)
C(x, y, z) = (3,5,6,7)
x
y
z
s
c
0
0
0
0
1
1
0
0
1
1
0
0
0
1
0
1
0
1
0
1
1
0
1
0
0
0
0
1
0
1
Như vậy sẽ cần 1 cổng OR để nối chung các tổ hợp logic thứ 1, 2, 4, 7 để đưa ra ngõ S.Tương tự ngõ ra C cũng cần 1 cổng OR với ngõ vào là tổ hợp logic thứ 2, 5, 6, 7.
Vậy mạch giải mã thực hiện bảng logic trên sẽ được mắc như sau :
Phần code mạch giải mã 3 sang 8:
module decoder_38 (data , code ,enable);
output [7:0] data;
input [2:0] code;
input enable ;
reg [7:0] data;
always @(enable & data)
begin data=0;
if (enable) begin
case(code)
0: data = 8'b00000001;
1: data = 8'b00000010;
2: data = 8'b00000100;
3: data = 8'b00001000;
4: data = 8'b00010000;
5: data = 8'b00100000;
6: data = 8'b01000000;
7: data = 8'b10000000;
endcase
end
end
endmodule
Phần mạch thu được:
Phần mạch mô phỏng:
3.2. Ví dụ 2 : Thiết kế mạch giải mã 4 sang 16.
Phần code mạch giải mã 4 sang 16:
module decoder (
binary_in , // 4 bit binary input
decoder_out , // 16-bit out
enable // Enable for the decoder
);
input [3:0] binary_in ;
input enable ;
output [15:0] decoder_out ;
reg [15:0] decoder_out ;
always @ (enable or binary_in)
begin
decoder_out = 0;
if (enable) begin
case (binary_in)
4'h0 : decoder_out = 16'h0001;
4'h1 : decoder_out = 16'h0002;
4'h2 : decoder_out = 16'h0004;
4'h3 : decoder_out = 16'h0008;
4'h4 : decoder_out = 16'h0010;
4'h5 : decoder_out = 16'h0020;
4'h6 : decoder_out = 16'h0040;
4'h7 : decoder_out = 16'h0080;
4'h8 : decoder_out = 16'h0100;
4'h9 : decoder_out = 16'h0200;
4'hA : decoder_out = 16'h0400;
4'hB : decoder_out = 16'h0800;
4'hC : decoder_out = 16'h1000;
4'hD : decoder_out = 16'h2000;
4'hE : decoder_out = 16'h4000;
4'hF : decoder_out = 16'h8000;
endcase
end
end
endmodule
Phần mạch thu được:
Phần mạch mô phỏng:
KẾT LUẬN
Dưới sự hướng dẫn của thầy và qua phần tìm hiểu bài dưới đây chúng em đã có những hiểu biết thêm về “Tổng quan về HDL, VHDL, Verilog và thiết kế bộ giải mã dùng verilog “.
Bài làm của chúng em có thể còn nhiều thiếu sót. Rất mong nhận được chỉ bảo của thầy cũng như những đóng góp từ phía các bạn trong lớp.
Mọi ý kiến đóng góp có thể trao đổi trực tiếp trên lớp hoặc xin gửi về địa chỉ: vudao89@gmail.com .
Chân thành cảm ơn thầy cùng các bạn!
Các file đính kèm theo tài liệu này:
- Tổng quan về HDL, VHDL, Verilog và thiết kế bộ giải mã dùng verilog.doc