Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.22 MB, 36 trang )
1. Các đặc điểm chính
- Đặc tính tổng quát:
của ngôn ngữ VHDL
VHDL có thể được sử dụng để lập tài liệu thiết kế, thiết kế mức độ cao,
mô phỏng tổng hợp và kiểm tra phần cứng, nó cho phép kiểm tra phần cứng từ
mức hệ thống tới mức cổng. Hỗ trợ tính đồng thời nghĩa là các hợp phần tử nhỏ
đến lớn hoạt động tại mọi thời điểm
- Hỗ trợ phân cấp thiết kế:
Khi thiết kế bằng VHDL người thiết kế có thể phân bài toán lớn thành những
bài toán nhỏ hơn sao cho có thể giải quyết và quản lí dễ dàng. Đây là đặc tính thiết yếu
của ngôn ngữ phần cứng đa cấp, thiết kế chứa một mô tả giao diện và các mẫu có thể
dựa vào thư viện để sau khi dịch bởi chương trình dịch. Với đặc điểm này người thiết
kế có thể có tạo ra những thư viện riêng có chứa các thành phần dàanh cho những thiết
kế sau này mà không phải thiết kế lại, điều này cho phép người thiết kế rút ngắn thời
gian thiết kế và quá trình thiết kế trở nên đơn giản hơn rất nhiều
- Các
lệnh tuần tự:
Khi người thiết kế phân chia hệ thống thành những hợp phần đồng thời hay
những phần con, tiếp đó người thiết kế có thể mô tả hoạt động chi tiết bên trong bằng
những cấu trúc ngôn ngữ lập trình như: case, if-then-else, loop,... các lệnh tuần tự
người thiết kế có thể mô tả hệ thống một cách dễ dàng và linh hoạt, ngoài ra còn giúp
cho người làm việc chung một nhóm có thể dễ dàng hiểu được ý tưởng thiết kế của
nhau để có sự phối hợp tốt hơn.
- Thiết
kế tương thích chung:
Để thiết kế tổng quát, ngôn ngữ VHDL cho phép người thiết kế đặt cấu
hình mô tả hợp phần có thông số chung trong thiết kế, mô tả tương thích chung
có thể thay đổi kích thích, đặc tính vật lý, định thời, đặc tính tải và mội trường
hoạt động của thiết kế.
- Khai kiểu và cách dùng:
Ngôn ngữ VHDL cho phép mô tả các biến số ở kiểu như: bit, Boolean,
iteger, floating point, kiểu liệt kê, kiểu dãy, bản ghi, ngoài ra còn hỗ trợ các kiểu
do người thiết kế định nghĩa. VHDL cũng cho phép người thiết kế định nghĩa
các loại toán tử cho riêng mình để phục vụ cho quá trình thiết kế linh hoạt hơn.
- Sử dụng các chương trình con:
Một đặc điểm đặc biệt của ngôn ngữ VHDL là cho phép đặc tả định thời ở
tất cả các cấp, nó cho phép người thiết kế đặt giá trị của tín hiệu với thời gian
chậm, định nghĩa tín hiệu đồng bộ, đặc tả độ rộng xung, các ràng buộc thời gian
khác…, người thiết kế có thể căn cứ vào những điểm này để định các giá trị tín
hiệu sao cho phù hợp với các thiết kế phần cứng.
- Đặc tả cấu trúc:
Ngôn ngữ VHDL có cấu trúc để đặc tả phân rã cấu trúc của phần cứng ở
tất cả các cấp.
2. Cấu trúc của một thiết kế dùng ngôn ngữ VHDL.
Trang | 4
Một thiết kế phần cứng dùng ngôn ngữ VHDL bao gồm 4 phần:
- Entity( thực thể )
Khai báo entity chỉ dùng để mô tả ngõ vào và ngõ ra của một thiết kế.
Mức cao nhất của bất kỳ một thiết kế VHDL là một khai báo entity đơn, khi
thiết kế trong VHDL tên của file lưu trữ phải trùng với tên theo sau từ khóa
entity
Ví dụ:
Entity dec2to4 is
Port ( w : instd_logic_vector(1 down to 0);
En : in std_logic;
Y : out std_logic_vector(0 to 3));
End dec2to4;
Trong khi khai báo entity mỗi tín hiệu có thể có 1 kiểu in, out, buffer và
có thể có 1 loại bit, bit_vector, kiểu tín hiệu sẽ quyết định tín hiệu đó được entity
đọc hay ghi, có 4 kiểu tín hiệu khác nhau.
In: Kiểu tín hiệu này mô tả dòng data đi vào entity và entity sẽ không ghi
tới những tín hiệu này. Kiểu In thì được sử dụng cho các ngõ vào clock, ngõ vào
điều khiển và các data chỉ có duy nhất 1 hướng là đưa tới các ngõ vào.
Out: Kiểu tín hiệu này mô tả dòng data đi ra khỏi entity, entity sẽ không
thể đọc các tín hiệu này, kiểu out chỉ được sử dụng khi tín hiệu không được sử
dụng bởi bất kì kiểu nào trong entity.
Buffer: Kiểu tín hiệu này mô tả dòng data đi ra khỏi entity, nhưng entity
có thể đọc những tín hiệu kiểu này ( cho phép đối với mục đích sử dụng muốn
đọc lại tín hiệu ngõ ra ở bên trong của cấu trúc). Tuy nhiên, tín hiệu sẽ không
điều khiển từ ngõ ra entity, vì vậy nó không thể được sử dụng cho các data ngõ
vào.
Inout: Kiểu tín hiệu này cho phép tín hiệu có thể có cả hai kiểu: vào và ra,
khi khai báo tín hiệu theo kiểu inout thì tín hiệu có thể được điều khiển từ ngõ ra
của entity. Kiểu tín hiệu này chỉ nên sử dụng khi thật cần thiết và khi sử dụng
kiểu tín hiệu này mã của chương trình trở nên khó hiểu cho người thiết kế.
Loại tín hiệu nào cũng phải được mô tả trong khai báo (“port”), tín hiệu sẽ
mô tả có giá trị mà tín hiệu đó có thể được ấn định, ngoài ra có thể mô tả 1
vector những tín hiệu có cùng loại.
a. Architecture
Chức năng kiến trúc trong một thiết kế là liên hệ giữa các tín hiệu ngõ vào
và các tín hiệu ngõ ra theo nhũng gì mà người thiết kế đã ấn định trong phần
thân kiến trúc, người thiết kế có thể viết theo nhiều kiến trúc khác nhau trong
một thực thể, nhưng chỉ một trong số đó có khả năng xuất hiện trong mã VHDL
của người thiết kế. Cấu trúc của một chương trình có dạng như sau:
Trang | 5
Architecture behavioral of component_ name is
…Các tín hiệu nội được liệt kê.
…Các thành phần được liệt kê.
Begin
…
…Các thành phần để trình bày các phát biểu của kiến trúc.
…
End component_ name;
Có 3 kiểu phát biểu cho kiến trúc, người thiết kế có thể kết hợp nhiều kiểu
trong thiết kế của mình, tuy nhiên người thiết kế nên phân biệt sự khác nhau ở
mỗi kiểu, bởi vì đôi khi không thể đổi chỗ giữa hai kiểu khác nhau.
Phần tới thực thể, đối với các thiết kế có cấu trúc, configuration thể hiện
là những phần được liệt kê cho kiểu đó, đối với những configuration ban đầu thì
có thể ấn định tới rất nhiều kiến trúc trong 1 thực thể. Khi 1 thực thể và đi cùng
với nó là một kiến trúc được biên dịch và trong 1 thư viện thì nó sẽ trở thành
một thành phần có thể được liên kết.
Nếu người thiết kế muốn sử dụng một hợp phần trong 1 kiến trúc để có
những tên port khác nhau từ những hợp phần mô tả trong đó, một hợp mới sẽ có
những port được liên kết tới những tín hiệu riêng với chức năng này, thư viện
của những hợp phần có thể được kết hợp và liên kết dễ dàng.
- Định cấu hình
Định cấu hình sẽ cho phép người thiết kế tiện lợi hơn trong thiết kế của
mình, người thiết kế có thể mô phỏng các thiết kế của mình ở thành phần con,
như vậy sẽ dễ dàng kiểm tra thiết kế hơn chương trình lớn.
Ví dụ: ta có 3 thân kiến trúc lần lượt gọi là FA_BEH, FA_STR và
FA_Mixed tương ứng với một thực thể entity FULL_ADDER. Một kiến trúc bất
kì có thể được chọn để mô phỏng bằng cách đặt tả cấu hình thích hợp.
Tương tự như trường hợp trên có thể mô tả bằng cách kết nối một thành
phần với một tập thực thể bất kỳ. Khai báo thành phần bất kì có thể gồm có tên
thành phần và tên, kiểu số lượng cổng và các thông số chung..của thực thể này.
Ví dụ: một khai báo hợp như sau:
Component and2
Port(a,b: in bit;
Z: out bit);
Và các thực thể mà thành phần này có thể bị là:
Entity and_generic is
Port( n: out bit;
L,m: in bit);
End and_generic;
Entity and_hs is
Port( n: out bit;
L,m: in bit);
Trang | 6
End and_hs;
Tên thành phần, tên thực thể, cũng như tên cổng và thứ tự của chúng là
khác nhau. Trong trường hợp này người thiết kế có thể dùng thực thể and_hs cho
thành phần and2 và trong trường hợp khác là thực thể là and_generic. Lợi thế là
ở chỗ khi các thành phần được sử dụng trong thiết kế cho các cổng và thành
phần của chúng có thể sử dụng tên tùy ý và sau đó có thể được liên kết tới các
thực thể trước khi mô phỏng. Vì vậy một cấu trúc được dùng để nối từng cặp
như sau:
- package
Mục đích chính của package là gói gọn những thành phần riêng lẻ để có
thể dùng chung cho những thiết kế khác nhau. Một package là một vùng lưu trữ
chung để giữa các data dùng chung trong một số các thực thể. Mô tả data bên
trong một package cho phép data được tham khảo bởi một thực thể khác vì vậy
data có thể được dùng chung.
Một package bao gồm 2 thành phần: phần dùng để mô tả và phần thân của
package, phần mô tả dùng để định nghĩa giao diện cho package, phần thân dùng
để ấn định các hoạt động cụ thể của package.
- Khai báo khối
Một khối khai báo bao gồm một tập hợp những khai báo chung, các khai
báo này có thể được dùng chung cho nhiều thiết kế. Khai báo khối tạo ra giao
diện cho khối đó, nó định nghĩa các đối tượng có thể được dùng cho các thiết kế
khác, khi khối đã được khai báo thì người thiết kế có thể truy xuất tới khối tại
bất kì những thiết kế nào của mình mà cần phải sử dụng tới các thiết kế có trước
trong khối. Cú pháp khai báo được xác định là:
Package package-name is
Các khai báo khối có thể chứa các khai báo sau:
- Subprogram delaration
- Type, subtype delaration
- constant, deferred constant delaration
- signal delaration creates a global signal
- file delaration
- alias delaration
- attribute delaration, a user_ define attribute
- Attribute specification
- use clause
Tất cả các đối tượng được khai báo trong khối thì có thể được truy xuất
bởi bất kì 1 thiết kế nào đó chỉ cần sử dụng mệnh đề use và khai báo thư viện,
giao diện cuả một khối bao gồm bất kì một chương trình con hoặc các hằng số
được khai báo trong khối đó, các chương trình con hoặc các hằng số đó cần phải
được đáp ứng tới thân của chúng, nghĩa là chúng cần có những hoạt động cụ thể
đã được mô tả trước khi đưa vào trong khối. Khi đưa vào trong khối cần phải
Trang | 7
tuân thủ thưa tự các thành phần trong thực thể mà nó được mô tả. VHDL sẽ
không hiểu được khi biên dịch một chương trình mà khai báo khối các thứ tự với
những gì mà nó mô tả trước đó.
II. GIỚI THIỆU VỀ PHẦN MỀM QUARTUS II
Quartus II là công cụ phần mềm phát triển của hãng Altera, cung cấp môi
trường thiết kế toàn diện cho các thiết kế SOPC (hệ thống trên 1 chip khả trình system on a programmable chip).
Đây là phần mềm đóng gói tích hợp đầy đủ phục vụ cho thiết kế logic với
các linh kiện logic khả trình PLD của Altera, gồm các dòng APEX, Cyclone,
FLEX, MAX, Stratix... Quartus cung cấp các khả năng thiết kế logic sau:
- Môi trường thiết kế gồm các bản vẽ, sơ đồ khối, công cụ soạn thảo các
ngôn ngữ: AHDL, VHDL, và Verilog HDL.
- Thiết kế LogicLock.
- Là công cụ mạnh để tổng hợp logic.
- Khả năng mô phỏng chức năng và thời gian.
- Phân tích thời gian.
- Phân tích logic nhúng với công cụ phân tích SignalTap@ II.
- Cho phép xuất, tạo và kết nối các file nguồn để tạo ra các file chương
trình.
- Tự động định vị lỗi.
- Khả năng lập trình và nhận diện linh kiện.
- Phần mềm Quartus II sử dụng bộ tích hợp NativeLink@ với các công cụ
thiết kế cung cấp việc truyền thông tin liền mạch giữa Quartus với các công cụ
thiết kế phần cứng EDA khác.
Quartus II cũng có thể đọc các file mạch (netlist) EDIF chuẩn, VHDL và
Verilog HDL cũng như tạo ra các file netlist này.
Quartus II có môi trường thiết kế đồ họa giúp nhà thiết kế dễ dàng viết
mã, biên dịch, soát lỗi, mô phỏng...
Với Quartus có thể kết hợp nhiều kiểu file trong 1 dự án thiết kế phân cấp.
Có thể dùng bộ công cụ tạo sơ đồ khối (Quartus Block Editor) để tạo ra sơ đồ
khối mô tả thiết kế ở mức cao, sau đó dùng các sơ đồ khối khác để tạo ra thành
phần thiết kế mức thấp.
Trang | 8
Quartus II cho phép làm việc với nhiều file ở cùng thời điểm, soạn thảo
file thiết kế trong khi vẫn có
thể biên dịch hay chạy mô
phỏng các dự án khác. Công
cụ biên dịch Quartus II nằm ở
trung tâm hệ thống, cung cấp
quy trình thiết kế mạnh cho
phép tùy biến để đạt được thiết
kế tối ưu trong dự án. Công cụ
định vị lỗi tự động và các bản
tin cảnh báo khiến việc phát
hiện và sửa lỗi trở nên đơn giản
hơn.
Sau khi cài Quartus II,
giao diện như hình vẽ:
Hình . Giao diện Quatus II
Trang | 9
CHƯƠNG II. CÁC THÀNH PHẦN CƠ BẢN
I. CỔNG LOGIC
Cổng logic hay logic gate là cấu trúc mạch điện (sơ đồ khối hình ) được
lắp ráp từ các linh kiện điện tử để thực hiện chức năng của các hàm logic cơ
bản y= f(xn,xn-1,….x1,x0). Trong đó các tín hiệu vào xn-1,xn-2,…x1, x0 của hàm. Tín
hiệu ra y của mạch tương ứng với hàm logic y. Với các cổng cơ bản thường giá
trị n≤ 4.
Hình . Mô hình cổng logic cơ bản
Giá trị của các tín hiệu vào và ra chỉ có hai mức là mức thấp (Low - L)
và mức cao (High - H) tương ứng với với hai giá trị 0 và 1 của các biến logic
và hàm logic.
Ví dụ: Một cổng NOT loại CMOS (hình 1.4) tương ứng hàm NOT
hai biến Q = not A.
Hình . Mạc điện cổng NOT
Trên sơ đồ dễ nhận thấy rằng, chỉ khi A có mức tích cực cao thì
transitor trên đóng còn transitor dưới mở, Q có mức tích cực thấp, khi A có mức
tích cực thấp thì transitor trên mở và dưới đóng nên Q có mức tích cực cao, như
vậy mạch điện với sơ đồ trên thực hiện vai trò của cổng NOT.
Các mạch logic đều được biểu diễn bằng các hệ hàm logic và do đó có thể
phát biểu là: Mọi mạch logic đều có thể xây dựng từ các cổng logic cơ bản.
Đối với các cổng logic cơ bản đó thì có hai tham số thời gian cơ bản:
Trang | 10
Hình . Tham số thời gian của cổng NOT
Thời gian trễ lan truyền Tpd (Propagation delay) là thời gian tối thiểu kể
từ thời điểm bắt đầu xảy ra sự thay đổi từ đầu vào X cho tới khi sự thay đổi
này tạo ra ra thay đổi xác định tại đầu ra Y, hay nói một cách khác cho tới khi
đầu ra Y ổn định giá trị.
Tcd (Contamination delay) là khoảng thời gian kể từ thời điểm xuất hiện
sự thay đổi của đầu vào X cho tới khi đầu ra Y bắt đầu xảy ra sự mất ổn định.
Sau giai đoạn mất ổn định hay còn gọi là giai đoạn chuyển tiếp tín hiệu tại đầu
ra sẽ thiết lập trạng thái xác định vững bền. Như vậy Tpd > Tcd và khi nhắc đến
độ trễ của cổng thì là chỉ tới giá trị Tpd
II. PHẦN TỬ NHỚ
1. D-Latch và D flip- flop
Latch và Flip-Flop là các phần tử nhớ quan trọng trong thiết kế VLSI,
sơ đồ cấu tạo chi tiết và mô tả đã được trình bày kỹ trong phần Kỹ thuật số. Ở
phần này chỉ nhắc lại những tính chất cơ bản nhất của các Flip-Flop và bổ xung
thêm các tham số thời gian thực của các phần tử này.
Bảng
D-Latch là phần tử nhớ làm việc theo mức xung, cụ thể khi tín hiệu
Clock bằng 1 thì giá trị Q đầu ra bằng giá trị đầu vào, khi tín hiệu Clock = 0 thì
giá trị đầu ra không đổi. Nói một cách khác D-latch làm việc như một
cửa đóng mở giữa tín hiệu Q và D tương ứng với mức điện áp của xung Clock.
Trang | 11