Nhìn vào một hệ thống được mô tả bằng hai phương pháp trên dưới dạng hàm Boolean hay dạng sơ đồ ta không thể lập tức chỉ ra được các chỉ tiêu và chức năng chung nhất của hệ thống.. Với s
Trang 1TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG
KHOA CÔNG NGHỆ ĐIỆN TỬ VÀ TRUYỀN THÔNG
Bài giảng:
THIẾT KẾ MẠCH ĐIỆN BẰNG MÁY TÍNH
(Tài liệu lưu hành nội bộ)
THÁI NGUYÊN - 2009
MỤC LỤC
Trang 2Chương 1 8
GIỚI THIỆU VỀ PHƯƠNG PHÁP THIẾT KẾ SỐ 8
BẰNG NGÔN NGỮ MÔ TẢ PHẦN CỨNG 8
1.1 CÁC PHƯƠNG PHÁP THIẾT KẾ TRUYỀN THỐNG 9
1.1.1 Phương pháp thiết kế dùng hàm Boolean 9 1.1.2 Phương pháp thiết kế dựa trên sơ đồ 9 1.1.3 Nhược điểm của các phương pháp thiết kế truyền thống 10 1.2 PHƯƠNG PHÁP THIẾT KẾ SỐ BẰNG NGÔN NGỮ MÔ TẢ PHẦN CỨNG .10
1.3 CÁC QUÁ TRÌNH THỰC HIỆN THIẾT KẾ SỐ BẰNG NGÔN NGỮ MÔ TẢ PHẦN CỨNG TRÊN FPGA 12
Chương 2 17
GIỚI THIỆU VỀ VI MẠCH LOGIC KHẢ TRÌNH 17
VÀ GIẢI PHÁP CỦA XILINX 17
2.1 GIỚI THIỆU VỀ VI MẠCH LOGIC KHẢ TRÌNH 17
2.1.1 Mảng logic khả trình (PLA) 17 2.1.2 Logic mảng khả trình (PAL) 18 2.1.3 Vi mạch logic khả trình phức hợp (CPLD) 19 2.1.4 Mảng cổng cho phép lập trình được (FPGA) 20 2.2 GIỚI THIỆU VỀ GIẢI PHÁP CỦA XILINX 22
2.2.1 CPLD Xilinx
23 2.2.2 FPGA Xilinx
25
Trang 3Chương 3 30
NGÔN NGỮ VHDL 30
GIỚI THIỆU VỀ VHDL 30
3.1 CÁC CẤU TRÚC CƠ BẢN CỦA NGÔN NGỮ VHDL 31
3.1.1 Khai báo Entity 32 3.1.2 Các kiểu kiến trúc (Achitecture) 35 3.1.2.1 Kiến trúc theo kiểu hành vi hoạt động (Behavioral) 35
3.1.2.2 Kiến trúc theo kiểu hoạt động của các luồng dữ liệu (Dataflow) 36
3.1.2.2 Kiến trúc theo kiểu cấu trúc (Structure) 37
3.1.3 Các đóng gói (Packages) 38 3.1.3.1 Phần khai báo Package 38
3.1.3.1 Phần khai báo thân Package 39
3.1.4 Định cấu hình (Configurations) 40 3.1.5 Các thư viện thiết kế 41 3.2 CÁC ĐỐI TƯỢNG DỮ LIỆU 41
3.2.1 Các hằng (Constants) 42 3.2.2 Các biến (Variables) 42 3.2.3 Các kiểu tín hiệu (Signals) 42 3.3 CÁC KIỂU DỮ LIỆU 43
3.3.1 Các kiểu liệt kê (ENUMERATION)
43 3.3.2 Kiểu nguyên
44 3.3.3 Các kiểu dữ liệu tiền định nghĩa trong VHDL
Trang 444 3.3.4 Kiểu mảng
45 3.3.5 Kiểu Record
46 3.3.6 Các kiểu STD_LOGIC
46 3.3.7 Các kiểu dữ liệu có dấu và không dấu
47 3.3.8 Các kiểu con
47
3.4 CÁC TOÁN TỬ 48
3.4.1 Các toán tử Logical 49 3.4.2 Các toán tử quan hệ 49 3.4.3 Các toán tử dịch bit 49 3.4.4 Các toán tử cộng 50 3.5 CÁC KIỂU TOÁN HẠNG 50
3.5.1 Kiểu chữ 51 3.5.1.1 Kiểu chữ ký tự 51
3.5.1.2 Kiểu chuỗi 51
3.5.1.3 Kiểu BIT 52
3.5.1.4 Kiểu BIT_VECTOR 52
3.5.1.5 Kiểu chữ trong đóng gói chuẩn STD_LOGIC 52
3.5.1.6 Kiểu chữ STD_LOGIC_VECTOR 52
3.5.1.7 Kiểu Boolean 52
3.5.1.8 Kiểu số thực 52
3.5.1.9 Kiểu nguyên 53
Trang 53.5.1.10 Kiểu TIME 53
3.5.2 Các kiểu định danh
53 3.5.3 Kiểu INDEX
53 3.5.4 Kiểu Slice và ALIAS
54 3.5.5 Kiểu thuộc tính ATTRIBUTE
54 3.5.6 Kiểu tập hợp
54 3.5.7 Biểu thức gán kiểu
55 3.5.8 Phép chuyển đổi kiểu tín hiệu
55
3.6 CÁC PHÁT BIỂU TUẦN TỰ (SEQUENTIAL STATEMENTS) 55
3.6.1 Phát biểu gán biến
56 3.6.2 Phát biểu gán tín hiệu
58 3.6.3 Phát biểu IF
62 3.6.4 Phát biểu CASE
64 3.6.5 Phát biểu NULL
65 3.6.6 Phát biểu xác nhận ASSERTION
65 3.6.7 Phát biểu Loop
66
Trang 63.6.8 Phát biểu NEXT
67 3.6.9 Phát biểu EXIT
68 3.6.10 Phát biểu WAIT
68 3.6.11 Các lời gọi chương trình con
70
3.7 CÁC PHÁT BIỂU ĐỒNG THỜI 70
3.7.1 Phát biểu Process
71 3.7.2 Các phép gán tín hiệu đồng thời
72 3.7.3 Các phép gán tín hiệu có điều kiện và các phép gán tín hiệu được chọn lựa
73 3.7.4 Các phát biểu Block
76 3.7.5 Các lời gọi thủ tục đồng thời
77 3.7.6 Các chương trình con
78
3.8 CÁC ĐÓNG GÓI 823.9 MÔ HÌNH CẤU TRÚC 84
3.9.1 Các khai báo thành phần
84 3.9.2 Các thể hiện của Component
85 3.9.3 Các phát biểu Generate
87 3.9.4 Các thông số của việc định cấu hình
Trang 7Chương 4 91GIỚI THIỆU PHẦN MỀM ISE CỦA XILINX 914.1 Các công cỤ thiẾt kẾ 91
4.1.1 Nhập thiết kế
92 4.1.2 Tổng hợp thiết kế
92 4.1.3 Thực thi và nạp cấu hình
92 4.1.4 Tích hợp mức Board
92 4.1.5 Các kỹ thuật kiểm tra
93 4.1.6 Công cụ phần mềm nhúng
103 4.3.2 Thiết kế mức đỉnh bằng ngôn ngữ mô tả phần cứng
109 4.3.3 Thiết kế mức đỉnh bằng sơ đồ nguyên lý
Trang 84.4.1.2 Chỉnh sửa các ràng buộc 126
4.4.1.3 Thực thi với CPLD 131
4.4.1.4 CPLD Reports 132
4.4.1.5 Mô phỏng thời gian 134
4.4.1.6 Cấu hình 135
4.4.2 Thực thi thiết kế trên FPGA 136 4.4.2.1 Thay đổi dự án từ CoolRunner-II thành Spartan-3E 137
4.4.2.2 Tổng hợp 138
4.4.2.3 File ràng buộc thiết kế 140
4.4.2.4 FPGA Reports 144
4.4.2.5 Tải cấu hình vào FPGA 144
Chương 1 GIỚI THIỆU VỀ PHƯƠNG PHÁP THIẾT KẾ SỐ BẰNG NGÔN NGỮ MÔ TẢ PHẦN CỨNG
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 hóa hàm Boolean hay dùng sơ đồ các phần tử không còn
Trang 9đá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 và 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
Vì thế người ta thường sử dụng các ngôn ngữ mô tả phần cứng làm phương tiện thiết
kế, mô phỏng thử nghiệm các hệ thống số
1.1 CÁC PHƯƠNG PHÁP THIẾT KẾ TRUYỀN THỐNG
1.1.1 Phương pháp thiết kế dùng hàm Boolean
Tất cả các mạch dựa trên các phần tử logic cơ bản gồm cổng logic và các mạch flip-flop đều có thể thiết kế bằng các hàm Boolean Có nhiều phương pháp đã được
sử dụng để tối thiểu hóa hàm Boolean nhằm tăng tính hiệu quả sử dụng các phần tử logic, chẳng hạn như phương pháp dùng bìa cácnô Về mặt lý thuyết bất kỳ hệ thống
số nào cũng có thể biểu diễn dưới dạng các hàm Boolean Nhưng việc tối thiểu hóa cũng như xử lý hàng nghìn hàm logic rõ ràng là không thực tế Trong khi các yêu cầu thiết kế hệ thống hiện nay đòi hỏi tới hàng nghìn hàm Boolean Hình 1.1 minh họa cho phương pháp thiết kế dùng hàm Boolean
Hình 1.1: Minh họa cho phương pháp thiết kế dùng hàm Boolean.
1.1.2 Phương pháp thiết kế dựa trên sơ đồ
Phương pháp thiết kế dựa trên sơ đồ là sự mở rộng của phương pháp thiết kế dùng hàm Boolean Trong phương pháp này, người thiết kế có thể sử dụng thêm các mạch chức năng thông dụng khác ngoài các phần tử cơ bản là cổng và flip-flop Như vậy, phương pháp này cho phép thiết kế hệ thống một cách có cấu trúc Phương pháp thiết kế dựa trên sơ đồ được dùng phổ biến và có rất nhiều phần mềm cung cấp cho người thiết kế một giao diện đồ họa thuận tiện Trong nhiều năm, phương pháp này
Trang 10là phương pháp được sử dụng chủ yếu trong ngành công nghiệp chế tạo phần cứng số.
1.1.3 Nhược điểm của các phương pháp thiết kế truyền thống
Mặc dù có ưu điểm là dễ hiểu và dễ sử dụng, phương pháp thiết kế dùng hàm Boolean và phương pháp thiết kế dựa trên sơ đồ có một số nhược điểm Nhược điểm lớn nhất của các phương pháp này là chúng chỉ mô tả hệ thống dưới dạng mạng các phần tử nối với nhau Nhìn vào một hệ thống được mô tả bằng hai phương pháp trên (dưới dạng hàm Boolean hay dạng sơ đồ) ta không thể lập tức chỉ ra được các chỉ tiêu và chức năng chung nhất của hệ thống Ðể thiết kế một hệ thống bằng phương pháp truyền thống, người thiết kế cần phải đi qua hai bước thực hiện hoàn toàn thủ công đó là: Chuyển từ các yêu cầu về chức năng của hệ thống sang biểu diễn hệ thống bằng hàm Boolean, sau đó chuyển từ hàm Boolean sang sơ đồ mạch của hệ thống Cũng tương tự khi cần hiểu được một hệ thống, người ta cần phân tích sơ đồ mạch của hệ thống chuyển nó thành các hàm Boolean sau đó mới lập lại được các chức năng, hoạt động của hệ thống Các bước nói trên hoàn toàn phải thực hiện thủ công không có bất kỳ sự trợ giúp nào của máy tính Ở đây người thiết kế chỉ có thể
sử dụng máy tính làm công cụ hỗ trợ trong việc vẽ sơ đồ mạch của hệ thống (dùng công cụ CAE – Computer Aided Tool) và chuyển từ sơ đồ mạch sang công cụ tổng hợp mạch vật lý
Một nhược điểm khác của phương pháp thiết kế truyền thống là sự giới hạn trong
độ phức tạp của hệ thống Phương pháp dùng hàm Boolean chỉ có thể dùng để thiết
kế các hệ thống lớn nhất biểu diễn bởi vài trăm hàm Phương pháp dựa trên sơ đồ chỉ
có thể dùng để thiết kế lớn nhất chứa tới 6000 phần tử
1.2 PHƯƠNG PHÁP THIẾT KẾ SỐ BẰNG NGÔN NGỮ MÔ TẢ PHẦN CỨNG
Ngôn ngữ mô tả phần cứng giải quyết được nhược điểm lớn nhất của các phương pháp thiết kế trước đây Nếu các phương pháp cũ đòi hỏi phải chuyển đổi từ mô tả
hệ thống (các chỉ tiêu về chức năng của hệ thống) sang tập hợp các hàm logic bằng tay thì bước chuyển đổi đó hoàn toàn không cần thiết khi dùng ngôn ngữ mô tả phần cứng Hầu hết các công cụ thiết kế dùng ngôn ngữ mô tả phần cứng đều cho phép sử dụng biểu đồ trạng thái (finite-state-machine) cho các hệ thống tuần tự cũng như cho phép sử dụng bảng chân lý cho hệ thống tổng hợp Việc chuyển đổi từ các biểu đồ trạng thái và bảng chân lý sang mã ngôn ngữ mô tả phần cứng được thực hiện tự động Ngôn ngữ mô tả phần cứng được dùng nhiều để thiết kế cho các linh kiện
Trang 11logic khả trình (PLD-Programmable Logic Device) từ loại đơn giản đến các loại phức tạp như ma trận cổng lập trình được (Field Programmable Gate Array).
Phương pháp thiết kế số bằng ngôn ngữ mô tả phần cứng có nhiều ưu điểm hơn
so với phương pháp thiết kế truyền thống Hãy lấy bộ nhân 16×16 làm ví dụ để so sánh Một bộ nhân thường phức tạp về mặt sắp xếp các bộ cộng và thanh ghi, công việc này yêu cầu khá nhiều cổng Ví dụ của chúng ta có hai đầu vào 16 bit (A và B)
và đầu ra 32 bit tổng cộng có 64 cổng vào/ra Mạch này yêu cầu cỡ 6000 cổng Thực hiện theo sơ đồ mạch các cổng sẽ phải được lấy ra, đặt vào bản vẽ và nối với nhau sau đó nối với các cổng vào ra Như vậy sẽ phải mất khoảng 3 ngày làm việc
Việc thực hiện bằng ngôn ngữ mô tả phần cứng, cũng với khoảng 6000 cổng, cần
8 dòng lệnh và có thể thực hiện trong 3 phút Tệp này chứa tất cả những thông tin cần thiết để định nghĩa một bộ nhân 16×16 Ngoài việc tiết kiệm thời gian ra, phương pháp thiết kế bằng ngôn ngữ mô tả phần cứng còn độc lập hoàn toàn với nhà cung cấp, đây cũng là một lợi thế của phương pháp này
Hình 1.2: Bộ nhân (16×16) được thiết kế bằng HDL.
Để tạo ra bộ nhân 32×32, ta chỉ cần thay đổi một chút xíu Đối với phương pháp
vẽ mạch, cần phải có 3 bản sao của thiết kế 30 trang trước đó, tức là 90 trang cần phải vẽ lại, sau đó định địa chỉ lại cho bề rộng đường bus lớn hơn Điều này có lẽ phải cần đến 4 giờ chế bản bằng phương pháp đồ họa Theo cách mô tả bằng ngôn ngữ mô tả phần cứng thì vấn đề chỉ là thay đổi đường bus từ 15 thành 31 ở dòng thứ
2 và từ 31 thành 63 ở dòng thứ 3 Việc này có lẽ chỉ mất đến 6 giây Sau đây là minh
Trang 12họa của ngôn ngữ mô tả phần cứng khi thay đổi 2 bộ nhân trên Ví dụ thay đổi file HDL:
Đầu tiên là bộ nhân 16×16:
entity MULT is
port(A,B:in std_logic(15 downto 0);
Y:out std_logic(31 downto 0));
port(A,B:in std_logic(31 downto 0);
Y:out std_logic(63 downto 0));
Trang 13Hình 1.3: Quá trình thiết kế số trên FPGA.
Quá trình 1: Mô tả ban đầu về thiết kế (Specification) Khi xây dựng một chip
khả trình (FPGA) với ý nghĩa dành cho một ứng dụng riêng biệt, vì xuất phát từ mỗi ứng dụng trong thực tiễn cuộc sống, sẽ đặt ra yêu cầu phải thiết kế IC thực hiện tối
ưu nhất những ứng dụng đó Bước đầu tiên của quy trình thiết kế này có nhiệm vụ tiếp nhận các yêu cầu của thiết kế và xây dựng nên kiến trúc tổng quát của thiết kế Các bước gồm:
• Mô tả thiết kế (Design Specification): Trong bước này, từ những yêu cầu của
thiết kế và dựa trên khả năng của công nghệ hiện có, người thiết kế kiến trúc
sẽ xây dựng nên toàn bộ kiến trúc tổng quan cho thiết kế Nghĩa là trong bước này người thiết kế kiến trúc phải mô tả được những vấn đề sau:
- Thiết kế có những khối nào?
- Mỗi khối có chức năng gì?
- Hoạt động của thiết kế và của mỗi khối ra sao?
Trang 14- Phân tích các kỹ thuật sử dụng trong thiết kế và các công cụ, phần mềm hỗ trợ thiết kế.
Một thiết kế có thể được mô tả sử dụng ngôn ngữ mô tả phần cứng, như VHDL hay Verilog HDL hoặc có thể mô tả qua bản vẽ mạch (schematic capture) Một thiết kế có thể vừa bao gồm bản vẽ mạch mô tả sơ đồ khối chung, vừa có thể dùng ngôn ngữ HDL để mô tả chi tiết cho các khối trong sơ
đồ
• Mô phỏng chức năng (Function simulation): Sau khi mô tả thiết kế, người
thiết kế cần mô phỏng tổng thể thiết kế về mặt chức năng để kiểm tra thiết kế
có hoạt động đúng với các chức năng yêu cầu
• Tổng hợp logic (Logic Synthesis): Tổng hợp logic là quá trình tổng hợp các
mô tả thiết kế thành sơ đồ bố trí mạch (netlist) Quá trình chia thành 2 bước: Chuyển đổi các mã RTL, mã HDL thành mô tả dưới dạng các biểu thức đại số Boolean và dựa trên các biểu thức này kết hợp với thư viện tế bào chuẩn sẵn
có để tổng hợp nên một thiết kế tối ưu
Hình 1.4: Logic Synthesis.
• Hiệu chỉnh các kết nối (Datapath Schematic): Nhập netlist và các ràng buộc
về thời gian vào một công cụ phân tích thời gian (timing analysic) Công cụ phân tích này sẽ tách rời tất cả các kết nối của thiết kế, tính thời gian trễ của các kết nối dựa trên các ràng buộc Dựa trên kết quả phân tích (report) của công cụ phân tích, xác định các kết nối không thỏa mãn về thời gian Tùy theo nguyên nhân dẫn đến không thỏa mãn mà ta có thể viết lại mã và tiến hành lại tổng hợp logic hoặc hiệu chỉnh lại các ràng buộc
Trang 15Quá trình 2: Thực thi (Implementation) Ta đã có sơ đồ bố trí netlist mô tả tổng
thể thiết kế tại mức cổng (chỉ gồm các cổng logic cơ bản) Quá trình này sẽ đặt sơ đồ netlist này lên chip, gọi là quá trình thực thi (Device Implementation) Quá trình này gồm các bước:
• Ánh xạ (mapping): Chuẩn bị dữ liệu đầu vào, xác định kích thước các khối
Các khối này sẽ phải phù hợp với cấu trúc của một tế bào cơ bản của FPGA (gồm nhiều cổng logic) và đặt chúng vào các vị trí tối ưu cho việc chạy dây
Hình 1.5: Mapping.
• Đặt khối và định tuyến (Place & Route): Đặt khối tức là đặt các khối ánh xạ
vào các tế bào (cell) ở vị trí tối ưu cho việc chạy dây
Hình 1.6: Placing.
Trang 16Định tuyến tức là thực hiện việc nối dây các tế bào.
Hình 1.7: Routing.
Để thực hiện việc này, chúng ta cần có các thông tin sau:
- Các thông tin vật lý về thư viện tế bào, ví dụ kích thước tế bào, các điểm để kết nối, định thời, các trở ngại trong khi đi dây
- Một netlist được tổng hợp sẽ chỉ ra chi tiết các instance và mối quan hệ kết nối bao gồm cả các đường dẫn bị hạn chế trong thiết kế
- Tất cả các yêu cầu của tiến trình cho các lớp kết nối, bao gồm các luật thiết
kế cho các lớp chạy dây, trở kháng và điện dung, tiêu thụ năng lượng, các luật
về sự dẫn điện trong mỗi lớp
Quá trình 3: Nạp (download) và lập trình (program) Sau quá trình thực hiện, thiết kế
cần được nạp vào FPGA dưới dạng dòng bit (bit stream) Quá trình nạp thiết kế vào FPGA thường nạp vào bộ nhớ bay hơi, ví dụ như SRAM Thông tin cấu hình sẽ được nạp vào bộ nhớ Dòng bit được truyền lúc này sẽ mang thông tin định nghĩa các khối logic cũng như kết nối của thiết kế Tuy nhiên, lưu ý rằng, SRAM sẽ mất dữ liệu khi mất nguồn nên thiết kế sẽ
không lưu được đến phiên làm việc kế tiếp Lập trình là thuật ngữ để mô tả quá trình nạp
chương trình cho các bộ nhớ không bay hơi, ví dụ như PROM Như vậy, thông tin cấu hình vẫn sẽ được lưu trữ khi mất nguồn
Trang 17Chương 2GIỚI THIỆU VỀ VI MẠCH LOGIC KHẢ TRÌNH
VÀ GIẢI PHÁP CỦA XILINX
2.1 GIỚI THIỆU VỀ VI MẠCH LOGIC KHẢ TRÌNH
2.1.1 Mảng logic khả trình (PLA)
Cuối những năm 1970, các linh kiện logic chuẩn đang chiếm toàn bộ trên bản mạch in, và một số người đã đặt vấn đề: “Sẽ thế nào nếu nhà thiết kế có thể thực hiện kết nối các đường mạch trong một linh kiện lớn hơn” Điều này sẽ cho phép các nhà thiết kế tích hợp nhiều linh kiện logic chuẩn trong một vi mạch
Ron Cline đã đưa ra ý tưởng về hai mảng khả trình Hai mảng này kết hợp các cổng AND và OR Đây là kiến trúc mềm dẻo và được gọi là PLA (Programmable Logic Array) Đặc điểm PLA là:
Hình 2.1 mô tả kiến trúc của PLA
Hình 2.1: Kiến trúc của PLA.
Trang 182.1.2 Logic mảng khả trình (PAL)
PAL đã có sự thay đổi nhỏ về kiến trúc so với PLA Kiến trúc mới này khác với PLA ở chỗ là một mảng khả trình được cố định với mảng cổng OR chỉ có mảng AND là khả trình Kiến trúc PAL nhanh hơn, phần mềm ít phức tạp hơn, nhưng không được mềm dẻo như PLA Đặc điểm của PAL là:
Hình 2.2 mô tả kiến trúc của PAL
Hình 2.2: Kiến trúc của PAL.
Kiến trúc này có một mạng lưới kết nối ngang và dọc Ở mỗi kết nối có một cầu chì Với sự trợ giúp của công cụ phần mềm, người thiết kế có thể lựa chọn kết nối nào không được nối bằng cách phá vỡ tất cả các cầu chì không được kết nối (việc này được thực hiện bằng một bộ nạp, nhưng bây giờ thường làm bằng công nghệ ISP)
Công nghệ PLD đã phát triển từ những ngày đầu tiên cho đến bây giờ bởi những công ty như Xilinx đang sản xuất những vi mạch trên công nghệ CMOS tiêu thụ năng lượng cực nhỏ, dựa trên công nghệ lưu trữ flash PLD dựa trên flash cho phép khả năng lập trình lại nhiều lần, lập trình và xóa bằng điện
Trang 192.1.3 Vi mạch logic khả trình phức hợp (CPLD)
CPLD (Complex PLD) mở rộng mật độ của SPLD (Simple PLD), CPLD có một vài khối PLD hay còn gọi là macrocells trong một linh kiện vi điện tử, với mạng kết nối nằm ở giữa Các khối logic đơn giản có thể được thực hiện với một khối đơn lẻ còn các khối logic tinh vi hơn yêu cầu nhiều khối và sử dụng với mạng kết nối chung CPLD có đặc điểm sau:
• Mạng kết nối trung tâm
• Định thời trước, đơn giản
CPLD cho phép thiết kế dễ dàng, chi phí phát triển thấp hơn, và cho phép đưa các sản phẩm ra thị trường một cách nhanh chóng Các ưu điểm của CPLD như:
• Thiết kế dễ: CPLD hỗ trợ cách thiết kế một cách đơn giản Khi một thiết kế
được mô tả bằng sơ đồ nguyên lí, hoặc ngôn ngữ mô tả phần cứng, ta chỉ cần dùng công cụ phát triển CPLD để thực hiện tối ưu thiết kế, ghép nối thiết kế vào thiết bị đích, và mô phỏng thiết kế Công cụ thiết kế tạo ra một file để nạp cho CPLD với chức năng mong muốn Điều này tạo ra một cấu trúc phần cứng và cho phép các quá trình xử lý, gỡ rối có thể thực hiện ngay từ khi bắt đầu công việc thiết kế Khi cần thiết phải thay đổi thiết kế, ta có thể thay đổi thiết kế đó vào trong công cụ phát triển CPLD và thực thi trên nó, sau đó ta có thể kiểm tra thiết kế mới ngay sau đó bằng một phần mềm mô phỏng
Trang 20• Chi phí phát triển thấp: CPLD làm cho chi phí phát triển giảm xuống còn
rất thấp Vì có thể lập trình lại được, ta có thể dễ dàng và không tốn kém gì để thay đổi thiết kế của mình Điều này cho phép ta tối ưu thiết kế và thêm những tính năng mới để nâng cấp sản phẩm Công cụ thiết kế CPLD rất đáng tin cậy và rất rẻ (hoặc miễn phí đối với trường hợp của Xilinx)
• Giảm kích thước bo mạch sử dụng: CPLD đưa ra một mức tích hợp cao
hơn (tức là một mức độ lớn các cổng hệ thống trên một đơn vị diện tích) Điều này cung cấp một giải pháp hoàn chỉnh cho người thiết kế mà sản phẩm của họ phải thích hợp với các bo mạch có diện tích bị giới hạn Ví dụ, CP56 CPLD có khoảng cách của các chân là 0,5mm và kích thước đóng gói chỉ là 6×6 mm, điều này cho phép đưa ra một sản phẩm nhỏ gọn cùng với mức độ tiêu thụ nguồn thấp CoolRunner II CPLD cũng được đóng gói sẵn ở gói QF (Quad Flat) là dạng nhỏ nhất trong công nghiệp QF32 có kích thước chỉ là 5×5mm Hình 2.4 là các dạng đóng gói khác nhau của CPLD
Hình 2.4: Các dạng đóng gói khác nhau của CPLD.
• Chi phí của người sử dụng: Chi phí người sử dụng có thể định nghĩa như là
chi phí để bảo dưỡng, sửa chữa hoặc bảo hành sản phẩm Bởi vì CPLD có khả năng tái lập trình, không đòi hỏi phải tái lập lại phần cứng, như vậy chi phí rất
ít để thay đổi thiết kế sử dụng chúng
• Độ tin cậy: Có độ tin cậy cao bởi việc sử dụng công suất nhỏ dẫn đến giảm
sự tiêu thụ năng lượng và giảm nhiệt
2.1.4 Mảng cổng cho phép lập trình được (FPGA)
Năm 1985, Xilinx giới thiệu một ý tưởng mới: Đó là sự kết hợp giữa việc điều khiển của người dùng và thời gian tiếp cận thị trường của các PLD cùng với mật độ tích hợp và giá của các ma trận cổng Điều này đã cho ra đời vi mạch FPGA và cho đến nay Xilinx vẫn là nhà cung cấp số một về FPGA trên thế giới
FPGA (Field Programmable Gate Array) thường là cấu trúc của các tế bào logic (Logic Cell hay module) và các liên kết hoàn điều khiển được Điều này có nghĩa là
ta có thể thiết kế, lập trình và thay đổi bất cứ lúc nào ta muốn FPGA ngày nay đang vượt qua giới hạn 10 triệu cổng và ta có thể thực hiện những tham vọng cho những thiết kế lớn Hình 2.5 là kiến trúc của một vi mạch FPGA
Trang 21Hình 2.5: Kiến trúc của FPGA.
Từ khi giới thiệu dòng Spartan đến giờ Xilinx đã hoàn thiện mảng cổng về mọi khía cạnh - giá cả, cổng, số các đầu vào ra cũng như hiệu năng và chi phí
Cơ bản thì có hai loại FPGA: Loại khả trình dựa trên SRAM và loại lập trình một lần (One Time Programmable) Hai loại FPGA này khác nhau về việc thực hiện các logic cell và cơ cấu sử dụng để tạo nên kết nối trong linh kiện Với FPGA dựa trên SRAM thì SRAM xác định các kết nối và các khối logic trong bảng tìm kiếm (Look
Up Table) Với FPGA lập trình chỉ một lần thì các liên kết là các cầu chì và các khối Logic là các cổng truyền thống
Loại ưu thế hơn cả là loại dựa trên SRAM vì nó có thể lập trình lại nhiều lần Thực tế thì một SRAM FPGA được nạp cấu hình lại mỗi khi được khởi động, bởi vì FPGA loại này thực chất là một chíp nhớ theo ý muốn Điều này giải thích tại sao cần có một số PROM nối tiếp hay hệ thống nhớ với mọi SRAM FPGA Chúng ta hãy xem cấu trúc của SRAM FPGA như ở hình 2.6
Hình 2.6: Cấu trúc SRAM FPGA.
Trang 22Trong các tế bào logic, một bảng tìm kiếm LUT xác định đầu ra dựa trên giá trị đầu vào Ở hình 2.6, có sáu sự kết hợp khác nhau của bốn đầu vào để xác định giá trị đầu ra Các bit trong SRAM cũng được dùng để tạo ra các kết nối.
Các OTP FPGA chỉ cho phép lập trình một lần Hình 2.7 là cấu trúc của OTP FPGA
Hình 2.7: Tế bào Logic OTP.
Trong OTP FPGA không cần SPROM hay các phương tiện khác để tải chương trình về FPGA Tuy nhiên mỗi khi muốn thay đổi thiết kế, ta phải thay chip khác Các tế bào logic OTP cũng tương tự như bộ PLD với các bộ cổng và các Flip-Flop chuyên dụng
2.2 GIỚI THIỆU VỀ GIẢI PHÁP CỦA XILINX
Giải pháp logic khả trình của Xilinx giúp tối thiểu rủi ro cho việc chế tạo thiết bị điện tử bằng cách rút ngắn thời gian cần thiết để phát triển sản phẩm và đưa ra thị trường Ta có thể thiết kế và kiểm tra mạch điện trong các vi mạch logic khả trình của Xilinx nhanh hơn so với việc lựa chọn các phương pháp thiết kế truyền thống như là mảng cổng logic cố định và lập trình mặt nạ Hơn nữa, bởi vì các vi mạch của Xilinx là các vi mạch chuẩn nên nó chỉ cần được lập trình, ta không mất thời gian chờ đợi để có được nguyên mẫu hoặc không phải trả tiền cho chi phí nghiên cứu không thường xuyên
Các sản phẩm của Xilinx hướng tới nhiều mảng thị trường Trong đó có các lĩnh vực như xử lí dữ liệu, viễn thông, điều khiển công nghiệp, máy công cụ, điện tử gia dụng, tự động hóa, quốc phòng, và hàng không Hình 2.8 là các vi mạch Logic khả trình của Xilinx
Trang 23Hình 2.8: Các vi mạch Logic khả trình của Xilinx.
2.2.1 CPLD Xilinx
Hiện tại Xilinx chia các sản phẩm CPLD của mình ra làm hai loai: XC9500 và CoolRunner Hai loại này tập trung chủ yếu là hai dòng phổ biến nhất đó là XC9500XL và CoolRunner-II
- XC9500XL với tính năng tốc độ cao, chi phí thiết kế thấp
- CoolRunner-II thì tiêu thụ năng lượng cực thấp, dẫn đầu trong các thiết bị cầm tay Với dòng tiêu thụ ở trạng thái nghỉ dưới micro ampe và tối thiểu năng lượng tiêu thụ khi hoạt động CoolRunner-II đặc biệt phù hợp với các ứng dụng cầm tay chạy pin, hay những ứng dụng mà tiêu thụ nguồn là vấn đề cần phải quan tâm
Để lựa chọn được vi mạch tốt nhất cho các tiêu chuẩn thiết kế của mình, ta cần chú ý tới các chi tiết thiết kế và đặc điểm sản phẩm để có những thông tin về vi mạch mình dùng trong thiết kế như:
• Mật độ: Mỗi phần đều có một lượng cổng hay ước lượng mật độ logic mỗi
phần
• Số lượng thanh ghi: Đếm số thanh ghi cần cho bộ đếm, các máy trạng thái,
các thanh ghi và các bộ chốt Số lượng các macrocell cần thiết trong một vi mạch
• Số lượng chân vào/ra: Mạch thiết kế cần bao nhiêu lối vào và bao nhiêu lối
ra
• Tốc độ: Cần phải xác định tốc độ lớn nhất để lựa chọn vi mạch cho phù hợp
với thiết kế của mình
Trang 24• Đóng gói: Tác động của các điều kiện điện cơ, các kiểu đóng gói khác nhau
cho phù hợp với thiết kế của mình
• Công suất nhỏ: Thiết kế có yêu cầu công suất thấp nhất có thể không? Có
quan tâm đến vấn đề giảm nhiệt lượng cho thiết bị không?
Giới thiệu CPLD công suất nhỏ CoolRunner-II:
• Dòng CoolRunner-II của CPLD kết hợp giữa nguồn tiêu thụ rất thấp và tốc độ cao, nhiều cổng vào ra trên một vi mạch Dòng CoolRunner-II có từ 32 đến
512 Macrocell CoolRunnerII-CPLD là nét đặc biệt của công nghệ RealDigital cho phép các thiết bị gần như không tiêu thụ nguồn ở chế độ chờ Điều này khiến nó trở nên lý tưởng cho các mảng thị trường của các thiết bị điện tử cầm tay, chạy pin đang tăng trưởng nhanh như: Laptop PCs, điện thoại cầm tay, PDA, trò chơi điện tử,
• Dòng CoolRunner-II của CPLD tiêu thụ nguồn thấp Đây là một đặc điểm quan trọng cho các thiết bị có hiệu suất cao, nhạy cảm với nhiệt độ như là các chuyển mạch viễn thông, hệ thống hội nghị bằng hình ảnh, các bộ mô phỏng, các bộ kiểm tra đầu cuối Hình 2.9 minh họa các loại CPLD và xu hướng ứng dụng của CPLD
Hình 2.9: Các hướng ứng dụng với CPLD.
• Công nghệ CMOS được dùng trong CoolRunner-II CPLD phát ra nhiệt lượng rất nhỏ, cho phép sử dụng những bộ đóng gói nhỏ trong suốt quá trình hoạt động ở tốc độ cao Các đóng gói như VQ100, TQ144 và FT256 Loại FT256 đặc biệt phù hợp với các sản phẩm cầm tay mỏng với yêu cầu mật độ logic cao
• Bảng 2.1 chỉ ra các đặc điểm nổi trội thông qua dòng CoolRunner-II
Trang 25Bảng 2.1: Dòng CoolRunner-II.
2.2.2 FPGA Xilinx
Xilinx cũng chia sản phẩm FPGA của mình ra làm hai loại là: Spartan FPGA và Virtex FPGA Các dòng sản phẩm FPGA như: Spartan-3/3E FPGAs, Virtex-4/5 FPGAs
Họ Spartan-3/3E FPGAs
Họ Spartan FPGA là ý tưởng dùng cho các ứng dụng với số lượng lớn, giá thành thấp, chúng được đưa vào các thiết bị đích nhằm thay thế các mảng cổng logic cố
định và các sản phẩm chuyên dụng (chẳng hạn như các chip giao tiếp bus) Với họ
Spartan-3 FPGA (1.2V), nó không chỉ có giá thành thấp mà còn được tích hợp thêm một số tính chất mới về cấu trúc Spartan-3 FPGA đã tạo ra sự thay thế các chip ASIC và các vi mạch chuyên dụng khác Ví dụ một chip Spartan-3 FPGA trong hệ thống đa phương tiện truyền thông trong xe hơi có thể tập hợp được rất nhiều chức năng của hệ thống, bao gồm các lõi IP nhúng, giao tiếp hệ thống khách hàng, DSP và các đơn vị logic khác Hình 2.10 dưới đây minh họa một hệ thống Multimedia trên
xe hơi
Trang 26Hình 2.10: Hệ thống Multimedia trên xe hơi.
Khối RAM - có các Block
18K
Cho phép thực hiện các bộ đệm gói lớn, bộ đệm FIFOs, các bộ đệm đường truyền
Distributed RAM Cho phép thực hiện các bộ đệm
FIFOs nhỏ hơn, các bộ đồng xử lý DSP
Chế độ thanh ghi dịch Ý tưởng thanh ghi dịch 16 bits
dành cho các ứng dụng tốc độ cao, hoặc lưu trữ dữ liệu trong DSP và các ứng dụng mã hóa, xử lý đường ống nhanh
Các khối nhân 18×18 Dùng cho việc xử lý DSP tốc độ
cao, việc sử dụng các bộ nhân kết hợp với kết cấu bên trong cho phép thực hiện DSP song song, siêu nhanh
Trang 27Bộ quản lý đồng hồ số Loại trừ sự giữ chậm đồng hồ
mức board và on-chip, nhân chia tức thì, có thể giảm được tốc độ đồng hồ phù hợp ở mức board, giảm số bộ đồng hồ trên bo mạch
Có thể điều chỉnh pha đồng hồ đảm bảo độ chính xác cao
Có các tài nguyên định
tuyến toàn cục
Sự phân phối các clock và các tín hiệu khác cùng với nhiều hệ số phân chia đầu ra trên toàn vi mạch
Bảng 2.2: Tóm tắt đặc tính và công dụng của họ Spartan-3.
Bảng 2.3: Một số sản phẩm thuộc họ Spartan-3 FPGA.
Họ Virtex FPGA:
Dòng sản phẩm Virtex về cơ bản đã được định nghĩa lại tất cả các đơn vị logic lập trình bởi việc mở rộng các khả năng của FPGA truyền thống để có đặc tính mạnh hơn, nó được dùng cho các thiết kế hệ thống thực thi cao Các vi mạch mới nhất được đưa ra với họ sản phẩm Virtex-4, Virtex-5
• Virtex-4: Họ Virtex-4 gồm ba loại khác nhau đó là: Virtex-4 LX được tối ưu
hóa cho các hàm Logic hiệu năng cao; Virtex-4 SX được tối ưu hóa cho xử lý tín hiệu, Virtex-4 FX được tối ưu hóa cho các kết nối nối tiếp tốc độ cao và
xử lý nhúng Hình 2.11 tóm tắt các loại khác nhau thuộc họ Virtex-4
Trang 28Hình 2.11: Dòng Virtex-4.
• Virtex-5: Họ Virtex-5 thuộc thế hệ thứ 5 của dòng Virtex FPGAs Dòng
Virtex 5 được giới thiệu với các khách hàng là một sản phẩm có hiệu năng cao nhất, với kết nối mềm dẻo, năng lượng được tối ưu Dòng sản phẩm đầu tiên thuộc họ này là Virtex-5 LX Bảng 2.4 dưới đây trình bày các sản phẩm thuộc dòng sản phẩm Virtex-5 LX
Bảng 2.4: Dòng sản phẩm Virtex-5 LX.
Qua những sản phẩm kể ra ở trên, chúng ta có thể thấy rằng Xilinx là một trong những nhà cung cấp chip CPLD và FPGA hàng đầu trên thế giới Các sản phẩm của Xilinx đang được phân phối rộng khắp trên thế giới Các nhà thiết kế cần tính toán
Trang 29và lựa chọn sản phẩm nào phù hợp nhất với thiết kế của mình Nếu muốn có thêm các thông tin chi tiết hơn về các sản phẩm này, ta có thể vào trang chủ http://xilinx.com/ để tra cứu Tất cả các sản phẩm mới nhất của Xilinx sẽ luôn được cập nhật trên trang Web này.
Trang 30Chương 3NGÔN NGỮ VHDL
GIỚI THIỆU VỀ VHDL
VHDL là viết tắt của cụm từ Very High Speed Intergrated Circuit Hardware Description Language - ngôn ngữ mô tả phần cứng cho các mạch tích hợp tốc độ rất cao VHDL là ngôn ngữ mô tả phần cứng được phát triển dùng cho chương trình VHSIC (Very High Speed Intergrated 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ô tả phần cứng tiêu chuẩn và thống nhất cho phép phát triển 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ế Ngôn ngữ VHDL được ba công ty Intermetics, IBM và Texas Instruments bắt đầu nghiên cứu phát triển vào 7/1983 Phiên bản đầu tiên được công bố vào 8/1985 Sau đó VHDL được đề xuất để
tổ chức IEEE xem xét thành một tiêu chuẩn Năm 1987, đã đưa ra tiêu chuẩn về VHDL – tiêu chuẩn IEEE-1076-1987
VHDL được phát triển để giải quyết các khó khăn trong việc phát triển, thay đổi
và lập tài liệu cho các hệ thống số Như đã biết, một hệ thống số có rất nhiều tài liệu
mô tả Ðể có thể vận hành bảo trì sửa chữa một hệ thống ta cần tìm hiểu tài liệu đó
kỹ lưỡng Với một ngôn ngữ mô tả phần cứng thì việc xem xét các tài liệu mô tả trở nên dễ dàng hơn vì bộ tài liệu đó có thể được thực thi để mô phỏng hoạt động của hệ thống Như thế ta có thể xem xét toàn bộ các phần tử của hệ thống hoạt động trong một mô hình thống nhất
Trước khi VHDL ra đời, có nhiều ngôn ngữ mô tả phần cứng được sử dụng nhưng không có một tiêu chuẩn thống nhất Vì các ngôn ngữ mô tả phần cứng đó được các nhà cung cấp vi mạch phát triển, nên mang các đặc trưng gắn với các vi mạch của nhà cung cấp đó và thuộc sở hữu của nhà cung cấp
Trong khi đó, 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ế, bộ mô phỏng 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 vẫn sử dụng một ngôn ngữ duy nhất
VHDL có một số ưu điểm hơn hẳn các ngôn ngữ mô tả phần cứng khác 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 không thuộc sở hữu của bất
kỳ cá nhân hay tổ chức nào Do đó VHDL được hỗ trợ của nhiều nhà sản xuất
vi mạch cũng như nhiều nhà cung cấp công cụ thiết kế mô phỏng hệ thống Ðây là một ưu điểm nổi bật của VHDL, giúp VHDL trở nên ngày càng phổ biến
Trang 31• 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 như 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 có sẵn Như vậy VHDL có thể phục vụ tốt cho nhiều mục đích thiết kế khác nhau, từ việc thiết kế các phần
tử phổ biến đến việc thiết kế các IC ứng dụng đặc biệt (Application Specified IC)
• Ðộ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 tùy thuộc vào công nghệ chế tạo phần cứng nào được sử dụng (dùng CMOS, nMOS, hay GaAs) Ðây cũng
là một ưu điểm quan trọng của VHDL nó cho phép người thiết kế không cần quan tâm đến công nghệ phần cứng khi thiết kế hệ thống, như thế khi có một 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ế
• 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ố (hộp đen) 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ả ở mức cao và các hệ con được mô tả chi tiết
• 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ô phỏng đáp ứng được tiêu chuẩn VHDL và 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 chuẩn VHDL Hơn nữa, 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; trong khi các hệ con đó được thiết kế độc lập
• 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ể
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ế VHDL cũng cho phép dùng lại các phần đã có sẵn
3.1 CÁC CẤU TRÚC CƠ BẢN CỦA NGÔN NGỮ VHDL
Các thành phần chính xây dựng trong ngôn ngữ VHDL được chia ra thành năm nhóm cơ bản như sau:
- Entity
- Architecture
- Package
- Configuration
Trang 32- Library
Entity: Trong một hệ thống số, thông thường được thiết kế theo một sự xếp chồng
các Modul, mà mỗi Modul này tương ứng với một thực thể thiết kế (được gọi là Entity) trong VHDL Mỗi một Entity bao gồm hai phần:
- Khai báo thực thể ( Entity)
- Thân kiến trúc (Architecture Bodies)
Một khai báo Entity được dùng để mô tả giao tiếp bên ngoài của một phần tử (component), nó bao gồm các khai báo các cổng đầu vào, các cổng đầu ra của phần
tử đó Phần thân của kiến trúc được dùng để mô tả sự thực hiện bên trong của thực thể đó
Packages: Các đóng gói chỉ ra thông tin dùng chung, mà các thông tin này được sử
dụng bởi một vài Entity nào đó
Configuration: Định cấu hình, nó cho phép gắn kết các thể hiện của phần tử cần
dùng nào đó của một thiết kế nào đó có dạng một cấu trúc và đưa các thể hiện này vào trong cặp Entity và Architecture
Nó cho phép người thiết kế có thể thử nghiệm để thay đổi các sự thực thi khác nhau trong một thiết kế Mỗi một thiết kế dạng VHDL bao gồm một vài đơn vị thư viện, mà một trong các thư viện này được dịch sẵn và cất trong một thư viện thiết kế
3.1.1 Khai báo Entity
Như trên đã đề cập, phần khai báo Entity chỉ đưa ra một cái nhìn phía bên ngoài của một phần tử mà không cung cấp thông tin về sự thực hiện của phần tử đó như thế nào Cú pháp khai báo của một Entity như sau:
• [] : Dấu ngoặc vuông chỉ ra các tham số có thể lựa chọn
• | : Dấu gạch đứng hiển thị một sự lựa chọn trong số các lựa chọn khác
• {} : Khai báo một hoặc nhiều các đối tượng, mà các đối tượng này có thể được định nghĩa bởi người dùng
a Khai báo Generic: Dùng để khai báo các hằng mà chúng có thể được dùng để
điều khiển cấu trúc và sự hoạt động của Entity Cú pháp của khai báo này như sau:
generic ( constant_name : type [:=init_value]
{;constant_name: type[:=init_value]});
Trang 33• Ở đây tên hằng constant_name chỉ ra tên của một hằng dạng generic (hằng dùng chung).
• Kiểu (Type) được dùng để chỉ ra kiểu dữ liệu của hằng
• Init_value : chỉ ra giá trị khởi tạo cho hằng
b Khai báo cổng (Port): Được dùng để khai báo các cổng vào, ra của Entity Cú
pháp của khai báo này như sau:
Port ( port_name : [mode] type [:= init_value]
{; port_name:[mode] type [:=init_value]});
• Port_name được dùng để chỉ ra tên của một cổng, mode chỉ ra hướng vào ra của tín hiệu tại cổng đó Type chỉ ra kiểu dữ liệu của một cổng và init_value chỉ ra giá trị khởi tạo cho cổng đó
Chú ý ! Với VHDL không phân biệt chữ hoa và chữ thường, chẳng hạn như: xyz =
xYz = XYZ
• Có bốn mode được sử dụng trong khai báo cổng:
- In: Chỉ có thể được đọc, nó chỉ được dùng cho các tín hiệu đầu vào (chỉ được phép nằm bên phải phép gán)
- Out: Chỉ được dùng để gán giá trị, nó chỉ được dùng cho các cổng đầu ra (nó chỉ được nằm bên trái của phép gán)
- Inout: Có thể được dùng để đọc và gán giá trị Nó có thể có nhiều hơn một hướng điều khiển (có thể nằm ở bên trái hoặc bên phải phép gán)
- Buffer: Có thể được dùng để đọc và gán giá trị (có thể nằm ở bên trái hoặc bên phải phép gán) Inout là một cổng hai hướng, còn Buffer là một cổng không có hướng
c Entity_declarative_item: Được dùng để khai báo các hằng, kiểu dữ liệu, hoặc tín
hiệu mà nó có thể được sử dụng trong khi thực hiện của một Entity
Trang 34C <= A ; ( Câu lệnh đúng: A được gán cho C )
A <= B ; ( Câu lệnh sai: A là một đầu vào )
E <= D + 1; ( Câu lệnh đúng: D ở mode inout vì vậy nó
có thể được gán và đọc )
D <= C + 1; ( Câu lệnh sai : C là cổng đầu ra nên không
thể đọc được cho đầu vào )
Entity FULL_ADDER is
port ( A, B, CIN : in BIT;
SUM, COUT : out BIT );
End FULL_ADDER ;
Chúng ta có thể điều khiển cấu trúc cũng như thời gian của một Entity bởi việc
sử dụng các hằng generic Ví dụ sau sẽ chỉ ra việc điều khiển này, trong ví dụ này hằng N được dùng để chỉ ra số bít của một bộ cộng Trong quá trình mô phỏng hoặc quá trình tổng hợp, giá trị thực tế cho mỗi hằng dùng chung generic có thể bị thay đổi
entity ADDER is
generic (N : INTEGER := 4);
M : TIME := 10ns);
port ( A, B : in BIT_VECTOR (N -1 downto 0 );
CIN :in BIT;
Trang 35SUM : out BIT_VECTOR (N-1 downto 0);
COUT : out BIT );
end ADDER;
Giao diện mô tả bộ cộng này như sau:
Hình 3.2: Thực thể FULL_ADDER 4 bit
3.1.2 Các kiểu kiến trúc (Achitecture)
Một kiến trúc đưa ra kết cấu bên trong của một Entity Một Entity có thể có nhiều hơn một kiến trúc, nó chỉ ra quan hệ giữa các đầu vào và đầu ra của một Entity mà quan hệ này được diễn tả theo các thuật ngữ sau:
- Kiểu hành vi hoạt động ( Behavioral )
- Kiểu hoạt động của các luồng dữ liệu ( Dataflow )
- Kiểu cấu trúc ( Structure )
Một kiến trúc xác định chức năng của một Entity Nó bao gồm các phần: Khai báo các các tín hiệu, hằng, khai báo các kiểu, các phần tử, tiếp theo là các phát biểu (lệnh) đồng thời
Khai báo một kiến trúc sử dụng cú pháp sau:
architecture architecture_name of entity_name is
{ architecture_declarative_part }
Begin
{concurrent_statement} (lệnh đồng thời) end [architecture_name ];
3.1.2.1 Kiến trúc theo kiểu hành vi hoạt động (Behavioral)
Một kiến trúc kiểu hành vi hoạt động chỉ ra các hoạt động mà một hệ thống riêng biệt nào đó phải thực hiện trong một chương trình, nó giống như việc diễn tả các quá trình hoạt động, nhưng không cung cấp chi tiết mà thiết kế được thực thi như thế nào Thành phần chủ yếu của việc diễn tả theo kiểu hành vi trong VHDL là process Dưới đây là ví dụ chỉ ra kiểu diễn tả theo kiểu hành vi của một bộ cộng với tên là FULL_ADDER
Trang 36architecture BEHAVIOURAL of FULL_ADDER is
(A='0' and B='0' and CIN='1') or
(A='0' and B='1' and CIN='0') or
(A='1' and B='0' and CIN='0') then
SUM <= '1';
COUT <= '0' ; elsif
(A='0' and B='1' and CIN='1') or (A='1' and B='0' and CIN='1') or
(A='1' and B='1' and CIN='0') then
3.1.2.2 Kiến trúc theo kiểu hoạt động của các luồng dữ liệu (Dataflow)
Một kiến trúc kiểu luồng dữ liệu chỉ ra một hệ thống dưới dạng mô tả đồng thời của các luồng điều khiển và dịch chuyển của dữ liệu Nó sử dụng theo mẫu thông tin hoặc mẫu hoạt động của luồng dữ liệu đó, hoặc mẫu thời gian của các chức năng logic tổ hợp Chẳng hạn như các bộ cộng, bộ so sánh, bộ giải mã, và các cổng logic nguyên thủy
Ví dụ:
architecture DATAFLOW of FULL_ADDER is
signal S : BIT;
begin
Trang 37S <= A xor B ;
SUM <= S xor CIN after 10 ns;
COUT <= (A and B ) or (S and CIN) after 5ns;
end DATAFLOW;
3.1.2.2 Kiến trúc theo kiểu cấu trúc (Structure)
Một kiến trúc kiểu cấu trúc chỉ ra sự thực thi cấu trúc theo dạng sử dụng các khai báo phần tử và các thể hiện của phần tử đó Ví dụ dưới đây chỉ ra sự diễn tả cấu trúc của một bộ cộng FULL_ADDER như trên đã giới thiệu
Hai kiểu phần tử được sử dụng trong ví dụ này là HALF_ADDER và OR_GATE
architecture STRUCTURE of FULL_ADDER is
HA1: HALF_ADDER port map (A,B,N1,N2);
HA2: HALF_ADDER port map (N2,CIN,N3,SUM);
OR1 : OR_GATE port map (N1, N3,COUT);
end STRUCTURE;
Ở ví dụ này Entity ở mức cao nhất sẽ chứa hai thể hiện của HALF_ADDER và một thể hiện của OR_GATE Thể hiện HALF_ADDER có thể bị ràng buộc với một Entity khác, mà Entity này bao gồm một cổng XOR và một cổng AND Giao tiếp của một bộ cộng HALF_ADDER có dạng như sau:
Hình 3.3: Giao tiếp bộ cộng HALF_ADDER.
Trang 38Bộ cộng này gồm có hai đầu vào L1 và L2, đầu ra là SUM và CARRY Kiểu BIT
là kiểu tiền định nghĩa của ngôn ngữ VHDL, nó có kiểu liệt kê dạng chữ ký tự như '0' và '1'
3.1.3.1 Phần khai báo Package
Một khai báo Package được dùng để cất giữ hàng loạt các khai báo dùng chung, chẳng hạn như các phần tử, các kiểu, các thủ tục, các hàm Các khai báo này có thể nhập vào các đơn vị thiết kế khác bởi việc sử dụng một mệnh đề use
Ví dụ:
package EXAMPLE_PACK is
type SUMMER is ( MAY, JUN, JUL, AUG, SEP);
component D_FLIP_FLOP
port (D, CK:in BIT;
Q, QBAR: out BIT)
Giả sử rằng đóng gói này đã được dịch và tạo thành một thư viện thiết kế và
được gọi là DESIGN _LIB Xem xét việc dùng mệnh đề use để sử dụng chúng dưới
đây:
library DESIGN_LIB;
use DESIGN_LIB.EXAMPLE_PACK.all
Entity RX is
Trang 39Mệnh đề library DESIGN_LIB cho phép thư viện thiết kế DESIGN_LIB được phép dùng trong phần mô tả này, điều đó có nghĩa là tên DESIGN_LIB có thể được
sử dụng Mệnh đề use tiếp theo sẽ lấy tất cả các khai báo có trong Package
EXAMPLE_PACK vào trong khai báo Entity của RX Có nghĩa là ta có thể chọn lựa các khai báo từ trong một các khai báo của một đóng gói vào trong một đơn vị thiết
architecture RX_STRUCTURE of RX is
Hai mệnh đề use ở ví dụ này nhằm tạo ra khai báo cho D_FLIP_FLOP và khai báo hằng cho PIN2PIN_DELAY được phép sử dụng trong thân kiến trúc
3.1.3.1 Phần khai báo thân Package
Sự khác biệt giữa khai báo Package và thân Package có cùng mục đích như khai báo của một Entity và phần thân kiến trúc Architecture của chúng Cú pháp khai báo của Package như sau:
Ví dụ:
package EX_PKG is
subtype INT8 is integer range 0 to 255;
constant zero : INT8:=0;
procedure Incrementer (variable Count : inout INT8);
end EX_PKG;
package body EX_PKG is
procedure Incrementer (variable Data : inout INT8) is
Trang 40để cung cấp một sự thay thế nhanh các thể hiện của các phần tử (Component) trong một thiết kế dạng cấu trúc Cú pháp khai báo của Configuration này như sau:
Configuration configuration_name of entity_name is
Với một Entity của bộ cộng FULL_ADDER như đã giới thiệu ở phần trên, ở ví
dụ này ta có thể sử dụng chúng trong phép định cấu hình như sau:
configuration FADD_CONFIG of FULL_ADDER is
sử dụng chúng trong ví dụ trên