Tải bản đầy đủ (.docx) (37 trang)

Sử dụng VHDL thiết kế bộ đếm tiền chẵn từ 00 – 98 hoặc Đếm lẻ từ 01 – 99 hiển thị trên LED 7 thanh có tín hiệu SELECT, RESET, START, STOP.

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.23 MB, 37 trang )

MỤC LỤC

MỤC LỤC HÌNH ẢNH

MỤC LỤC BẢNG

Trang | 1


LỜI NÓI ĐẦU
Hiện nay trên thị trường có rất nhiều loại ngôn ngữ cho vi mạch lập trình
được như Visual Basic, Assembly, C++, … cho các vi điều khiển họ PIC, 89XX,
GAL. Ngoài ra, VHDL là ngôn ngữ mô tả phần cứng rất mạnh hỗ trợ cho các vi
mạch được tích hợp theo công nghệ CPLDs, FPGAs người thiết kế có thể vận
dụng nó vào thiết kế cụ thể như thiết kế mạch số , xử lý các phương trình lọc số,
lập trình giao tiếp giữa máy tính kit..Đồng thời kết hợp với các phần mềm mô
phỏng như Quartus hay Xilinx người dùng có thể đưa ra được các mẫu thiết kế
cho một vi điều khiển hoàn chỉnh một cách đơn giản tiết kiệm nhiều thời gian
cũng như công sức bởi ngôn ngữ VHDL có cấu trúc tương đối gần gũi với người
sử dụng.
Với yêu cầu thiết kế bộ đếm chẵn từ 0-98 hoặc đếm lẻ từ 1-99 hiển thị
LED 7 thanh có tín hiệu SELEC, Stop, Start, Reset, chúng tôi đã tiến hành xây
dựng một quy trình thiết kế cơ bản và thực hiện khoa học từng bước để việc
thiết kế được hiệu quả và kết quả đang tin cậy, đồng thời bài báo cáo đã đem lại
nhiều kiến thức khoa học cơ bản về thiết kế vi mạch cũng như kiến thức chuyên
nghành và có ý nghĩa thực tiễn cho tương lai sau này.

Trang | 2


CHƯƠNG I. GIỚI THIỆU CHUNG


I. TỔNG

QUAN VỀ NGÔN NGỮ VHDL
“Very High Speed Integrated Circuit” là ngôn ngữ chuẩn trong công
nghiệp, được sử dụng để mô tả phần cứng từ mức trừu tượng tới mức tối cụ thể.
VHDL nhanh chóng trở thành một ngôn ngữ được sử dụng rộng rãi trên thế giới
cho những thiết kế có độ phức tạp trung bình. Các thiết kế sử dụng ngôn ngữ
VHDL được hỗ trợ bởi máy tính, FPGA, các tiêu chuẩn trên VHDL được hỗ trợ
bởi công cụ của nó, các công cụ này bao gồm: mô phỏng, tổng hợp, định đường
đi…
VHDL là một nhánh của chương trình “Very High Speed Integrated
Circuit”(VHSIC), được phát triển bởi Department of Defense vào đầu thập niên
80. Mục tiêu của chương trình VHSIC là tạo ra những mạch điện được tích hợp
thông dụng mới. Những người tham gia chương trình muốn đẩy mạnh hơn nữa
việc giới hạn công nghệ trong giai đoạn thiết kế và sản xuất ra các vi mạch tích
hợp.
Chương trình đã đạt được những thành công đáng ngạc nhiên, nhưng
trong quá trình phát triển những mạch điện có độ phức tạp lớn, người thiết kế
căn cứ vào những công cụ đã được sử dụng để tạo ra những thiết kế lớn thì
không có đầy đủ, các công cụ hỗ trợ cho người thiết kế hầu hết ở mức cổng. Tạo
ra một thiết kế sử dụng hàng trăm, hàng nghìn cổng mà sử dụng dạng mức cổng
thì thật sự là một nhiệm vụ cực kỳ khó khăn. Chính vì thế một phương pháp mô
tả mới được ra đời đó là VHDL. Ban đầu VHDL được thiết kế như một ngôn
ngữ dùng chung để cung cấp các tài liệu và mô phỏng. Sau đó VHDL đã bao
gồm các công cụ tổng hợp để tả thiết kế ở mức thanh ghi.
Vào 1981, ngôn ngữ mô tả phần cứng đã được đề nghị và được gọi là
VHSIC Hardware Description Language mà ngày nay chúng ta gọi là VHDL.
Mục đích của ngôn ngữ mới này bao gồm 2 phần: Đầu tiên người thiết kế muốn
có một ngôn ngữ giúp họ có thể vận dụng để mô tả các mạch điện phức tạp, kế
tiếp tiếp họ muốn ngôn ngữ đó trở thành một chuẩn để tất cả mọi người làm việc

trong một môi trường VHSIC có thể phân phối các thiết kế của họ tới những
người khác trong một định dạng chuẩn. Từ những chương trình con có thể sắp
xếp để tạo thành một chương trình chính với một định dạng chuẩn duy nhất.
Năm 1986 VHDL đã đưa ra một chuẩn gọi là IEEE, chuẩn này đã qua một
số lần thay đổi sửa chữa và công nhận là chuẩn IEEE 1076 vào tháng 12 năm
1987.

Trang | 3


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


D-flip-flop là phần tử nhớ làm việc theo sườn xung, có hai dạng sườn là
sườn lên (rising edge) khi xung thay đổi từ 0->1 và sườn xuống (falling edge)
khi xung thay đổi từ 1->0. Khi không có yêu cầu gì đặc biệt thì Flip-flop làm
việc với sườn xung lên thường được sử dụng. Khác với D-latch giá trị đầu ra của
FlipFlop chỉ thay vào thời điểm sườn xung . Với cách làm việc như vậy giá trị
đầu ra sẽ không thay đổi trong suốt thời gian một chu kỳ xung nhịp dù cho tín
hiệu đầu vào thay đổi. D Flip-flop rất hay được dùng trong mạch có nhớ vì vậy
đôi khi nói đến phần tử nhớ thường ngầm hiểu là D Flip-flop.

Hình . Đồ thị thời gian của D flip-flop và D Latch

Đối với D-flip-flop và D-latch nhớ thì có hai tham số thời gian hết
sức quan trọng là Tsetup, và Thold. Đây là tham số thời gian đối với dữ liệu
đầu vào cổng Din để đảm bảo việc truyền dữ liệu sang cổng ra Qout là chính
xác, cụ thể đối với Flip-flop.
Tsetup: là khoảng thời gian cần thiết cần giữ ổn định đầu vào trước sườn
tích cực của xung nhịp Clock
Thold: Là khoảng thời gian tối thiểu cần giữ ổn định dữ liệu đầu vào sau
sườn tích cực của xung nhịp Clock.

Hình . Tham số thời gian của D flip flop

Trang | 12


2. Các flip-flop khác

- RS Flip-flop:

Bảng

RS Flip-flop có đầu vào là hai tín hiệu Reset và Set. Set =1 thì tín hiệu
đầu ra nhận giá trị 1 không phụ giá trị hiện tại Q, Reset =1 thì đầu ra Q = 0
không phụ thuộc giá trị hiện tại Q. Đối với RS-flipflop không đồng bộ thì giá
trị Q thay đổi phụ thuộc R/S ngay tức thì, còn đối với RS flip-flop đồng bộ thì
tín hiệu Q chỉ thay đổi tại thời điểm sườn xung Clock.
Trạng thái khi R= 1, S= 1 là trạng thái cấm vì khi đó đầu ra nhận giá trị
không xác định, thực chất sẽ xảy ra sự thay quá trình “chạy đua” hay tự dao
động giá trị Q từ 0 đến 1 và ngƣợc lại với chu kỳ bằng độ trễ chuyển mạch
của flip-flop.
- JK-flip-flop

Bảng

Theo bảng chân lý JK-flip flip hoạt động khá linh hoạt thực hiện chức
năng giống như D-flip flop hoặc RS flip-flop, trạng thái khí J=0, K=1 là
Reset, J=1, K=0 là Set. Tuy không có đầu vào dữ liệu D nhưng để JK flip-flop
làm việc như một D-flip flip thì tín hiệu D nối với J còn K cho nhận giá trị đối
của J.
Trang | 13


Trang | 14


- T- flip-flop


Bảng

Khi T bằng 1 thì giá trị Qnext bằng đảo của giá trị trước Qprev khi T = 0
thì giá trị đầu ra không thay đổi
III. LED 7 THANH
Trong các thiết bị, để báo trạng thái hoạt động của thiết bị đó cho người
sử dụng với thông số chỉ là các dãy số đơn thuần, thường người ta sử dụng "led
7 đoạn". Led 7 đoạn được sử dụng khi các dãy số không đòi hỏi quá phức tạp,
chỉ cần hiện thị số là đủ, chẳng hạn led 7 đoạn được dùng để hiển thị nhiệt độ
phòng, trong các đồng hồ treo tường bằng điện tử, hiển thị số lượng sản phẩm
được kiểm tra sau một công đoạn nào đó...
Led 7 đoạn có cấu tạo bao gồm 7 led đơn có dạng thanh xếp theo
hình và có thêm một led đơn hình tròn nhỏ thể hiện dấu chấm tròn ở góc dưới,
bên phải của led 7 đoạn.
8 led đơn trên led 7 đoạn có Anode(cực +) hoặc Cathode(cực -) được
nối chung với nhau vào một điểm, được đưa chân ra ngoài để kết nối với mạch
điện. 8 cực còn lại trên mỗi led đơn được đưa thành 8 chân riêng, cũng được đưa
ra ngoài để kết nối với mạch điện. Nếu led 7 đoạn có Anode(cực +) chung, đầu
chung này được nối với +Vcc, các chân còn lại dùng để điều khiển trạng thái
sáng tắt của các led đơn, led chỉ sáng khi tín hiệu đặt vào các chân này ở mức 0.
Nếu led 7 đoạn có Cathode(cực -) chung, đầu chung này được nối xuống
Ground (hay Mass), các chân còn lại dùng để điều khiển trạng thái sáng tắt của
các led đơn, led chỉ sáng khi tín hiệu đặt vào các chân này ở mức 1.

Trang | 15


Anode(cực dương+) chung

Cathode(cực -) chung


Hình . Hình ảnh Anode và Cathode chung

Vì led 7 đoạn chứa bên trong nó các led đơn, do đó khi kết nối cần đảm
bảo dòng qua mỗi led đơn trong khoảng 10mA-20mA để bảo vệ led. Nếu kết nối
với nguồn 5V có thể hạn dòng bằng điện trở 330Ω trước các chân nhận tín hiệu
điều khiển.
Sơ đồ vị trí các led được trình bày như hình dưới:
Các điện trở 330Ω là các điện trở bên ngoài
được kết nối để giới hạn dòng điện qua led nếu led 7
đoạn được nối với nguồn 5V.
Chân nhận tín hiệu a điều khiển led a sáng tắt,
ngõ vào b để điều khiển led b. Tương tự với các chân
và các led còn lại.
Ngõ nhận tín hiệu điều khiển của led 7 đoạn có
8 đường, vì vậy có thể dùng 1 Port nào đó của Vi điều
khiển để điều khiển led 7 đoạn. Như vậy led 7 đoạn
nhận một dữ liệu 8 bit từ Vi điều khiển để điều khiển hoạt động sáng tắt của
từng led đơn trong nó, dữ liệu được xuất ra điều khiển led 7 đoạn thường được
gọi là "mã hiển thị led 7 đoạn". Có hai kiểu mã hiển thị led 7 đoạn: mã dành cho
led 7 đoạn có Anode(cực +) chung và mã dành cho led 7 đoạn có Cathode(cực -)
chung. Chẳng hạn, để hiện thị số 1 cần làm cho các led ở vị trí b và c sáng, nếu
sử dụng led 7 đoạn có Anode chung thì phải đặt vào hai chân b và c điện áp là
0V(mức 0) các chân còn lại được đặt điện áp là 5V(mức 1), nếu sử dụng led 7
đoạn có Cathode chung thì điện áp(hay mức logic) hoàn toàn ngược lại, tức là
phải đặt vào chân b và c điện áp là 5V(mức 1).
Bảng mã hiển thị led 7 đoạn:

Trang | 16



• Phần

cứng được kết nối với 1 Port bất kì của Vi điều khiển, để thuận tiện cho việc
xử lí về sau phần cứng nên được kết nối như sau: Px.0 nối với chân a, Px.1 nối
với chân b, lần lượt theo thứ tự cho đến Px.7 nối với chân h.
• Dữ liệu xuất có dạng nhị phân như sau : hgfedcba

Bảng . Bảng mã hiển thị led 7 đoạn dành cho led 7 đoạn có Anode chung

Trang | 17


CHƯƠNG III. THIẾT KẾ BỘ ĐẾM CHẴN TỪ 0-98 HOẶC ĐẾM LẺ TỪ
1-99 HIỂN THỊ LED 7 THANH CÓ TÍN HIỆU RESET, START, STOP, SELEC
I. PHƯƠNG ÁN THIẾT KẾ
1. Các phương án thiết kế

Có hai phương pháp cơ bản được sử dụng để mô tả vi mạch số là mô tả
bằng sơ đồ logic (schematic) và mô tả bằng ngôn ngữ mô tả phần cứng
HDL (Hardware Description Language).
Mô tả bằng sơ đồ: vi mạch được mô tả trực quan bằng cách ghép nối các
phần tử logic khác nhau một cách trực tiếp giống nhau ví dụ ở hình vẽ dưới
đây.
Thông thường các phần tử không đơn thuần là các đối tượng đồ họa mà
còn có các đặc tính vật lý gồm chức năng logic, thông số tải vào ra, thời
gian trễ… Những thông tin này được lưu trữ trong thư viện logic thiết kế. Mạch
vẽ ra có thể được mô phỏng để kiểm tra chức năng và phát hiện và sửa lỗi một
cách trực tiếp.


Hình . Mô tả mạch số bằng sơ đồ

Ưu điểm của phương pháp này là cho ra sơ đồ các khối logic rõ ràng
thuận tiện cho việc phân tích mạch, tuy vậy phương pháp này chỉ được sử dụng
để thiết kế những mạch cỡ nhỏ, độ phức tạp không cao. Đối với những mạch cỡ
lớn hàng trăm ngàn cổng logic thì việc mô tả đồ họa là gần như không thể và
nếu có thể cũng tốn rất nhiều thời gian, chưa kể những khó khăn trong công
việc kiểm tra lỗi trên mạch sau đó.
Trang | 18


Mô tả bằng HDL: HDL cho phép mô tả vi mạch bằng các cú pháp tương
tự như cú pháp của ngôn ngữ lập trình. Có ba ngôn ngữ mô tả phần cứng phổ
biến hiện nay.
2. Phân tích và lựa chọn phương pháp
2.1. Lựa

chọn phương pháp:

Trong bài báo cáo chúng tôi sử dụng phương pháp thiết kế vi mạch mô tả
VHDL qua đó tiết kiệm thời gian ,đơn giản hóa việc thiết kế và là mục tiêu của
học trình này.
2.2. Hướng thiết kế:
Bộ đếm chẵn từ 0-98 hoặc lẻ từ 1-99 sẽ có tương đương là 46 trạng thái
kế tiếp nhau cần phải thực hiện đếm và hiển thị ,do đó nếu như thực hiện thiết kế
vi mạch bằng phương pháp sử dụng máy trạng thái sẽ phức tạp và cồng kềnh do
đó chúng tôi đã lựa chọn phương pháp dùng các bộ MUX để thực hiện đếm 2
biến hàng đơn vị và hàng chục qua đó thiết kế thuật toán đơn giản hơn rất nhiều
đồng thời tiết kiệm không gian và kích thước bộ đếm.
II. THIẾT KẾ KHỐI LOGIC

1. Các bước thiết kế bộ đếm
B1: Vẽ đồ hình trạng thái của bộ đếm:
Căn cứ vào yêu cầu của bộ đếm cần thiết kế như Kđ và một số yêu cầu
khác để xây dựng đồ hình mô tả hoạt động của bộ đếm.
B2: Xác định số FF của bộ đếm:
Mã hóa các trạng thái trong của bộ đếm theo mã đã cho. Trước tiên ta
phải xác định được n là số FF cần thiết kế để mã hóa cho Kđ trạng thái trong của
bộ đếm. Sau đó mã hóa các trạng thái trong của bộ đếm theo mã đã cho.
B3: Xác định các hàm kích và hàm ra của các FF
B4: Sơ đồ mạch thực hiện
Từ các phương trình đầu vào kích các FF và phương trình hàm ra, đưa ra
sơ đồ mạch thức hiện.

Trang | 19


2. Thiết kế khối logic cho bộ đếm mod 10 hiển thi 1 LED 7 thanh
a. Đồ hình trạng thái

Hình . Đồ hình trạng thái

b. Xác định số FF

- Vì số đếm hệ thập phân có Kđ = 10 nên ta phải sử dụng ít nhất 4FF vì
4FF mã hóa được 16 trạng thái.
- Sáu trạng thái thừa sẽ dùng cổng NAND để khóa và không đếm hết số
trạng thái.
- Chọn 4 JKFF
c. Lập bảng bảng mã hóa và bảng kích.
S D C B A D’ C’ B’ A’ JD KD JC KC JB KB JA KA

0 0 0 0 0 0

0

0

1

0 X 0 X 0 X 1 X

1 0 0 0 1 0

0

1

0

0 X 0 X 1 X X 1

2 0 0 1 0 0

0

1

1

0 X 0 X X 0 1 X


3 0 0 1 1 0

1

0

0

0 X 1 X X 1 X 1

4 0 1 0 0 0

1

0

1

0 X X 0 0 X 1 X

5 0 1 0 1 0

1

1

0

0 X X 0 1 X X 1


6 0 1 1 0 0

1

1

1

0 X X 0 X 0 1 X

7 0 1 1 1 1

0

0

0

1 X X 1 X 1 X 1

8 1 0 0 0 1

0

0

1

X 0


0 X 0 X 1 X

9 1 0 0 1 0

0

0

0

X 1

0 X 0 X X 1

Bảng

+ Tối thiểu các hàm kích - sử dụng bìa Cacno.
-Từ bảng kích nhận thấy:

JA = KA = 1(Vì tất cả các giá trị đều =1&X).
Trang | 20


Trang | 21


Ở bộ đếm không đồng bộ, sự thay đổi của FF này lại dẫn đến sự thay đổi
trạng thái của FF khác...,nên thường chỉ lấy xung đếm (Xđ) đưa vào Ck đầu tiên
FF-A còn các FF sau được điều khiển bởi các FF trước.
Từ các hàm J, K ở trên ta có phương trình Ck cho từng FF như sau:

CKA = Xđ
CKB = A
CKC = B
CKD = A

Trang | 22


d. Sơ đồ mạch thực hiện đếm và dạng sóng trên các đầu ra của FF.

- Sơ đồ nguyên lý bộ đếm 4bit:

Hình . Sơ đồ nguyên lý bộ ddeemss 4 bit

- Sơ đồ thực hiện đếm mod 10:

Hình . Sơ đồ thực hiện đếm mod 10

- Đồ hình dạng xung đếm :

Hình . Đồ hình dạng xung đếm

Trang | 23


III. CHƯƠNG TRÌNH LẬP TRÌNH VHDL
library IEEE;
use IEEE.STD_LOGIC_1164.all;
use IEEE.NUMERIC_STD.all;
entity thanhchu is

port(
stp : in STD_LOGIC;
stt : in STD_LOGIC;
rst : in STD_LOGIC;
sel : in STD_LOGIC;
clk : in STD_LOGIC;
seg1 : out STD_LOGIC_VECTOR(7
downto 0);
seg2 : out STD_LOGIC_VECTOR(7
downto 0)
);
end thanhchu;
architecture thanhchu of thanhchu is
begin
process(rst,clk,sel,stt,stp)
variable temp1:integer range 0 to 10;
variable temp2:integer range 0 to 10;
begin
if (rst='1') then
temp1:=0;
temp2:=0;
elsif (rising_edge(clk)) then
if (stt='1') then
if (stp='0') then
if (sel='1') then
if (temp1=0) then temp1:= 1
else temp1:=temp1+2;
end if;
if (temp1=1) then
if (temp2=9) then temp2:=0;

else temp2:=temp2+1;
end if;
end if;
end if;
end if;
if (sel='0') then
if (temp1=10) then temp1:=0;
if (temp2=9) then temp2:=0;
else temp2:=temp2+1;
end if;

-- Khai báo thư viện—

--Khai báo thực thể---Khai báo chân đầu vào—
--Chân stop kiểu logic 0/1—
--Chân start kiểu logic 0/1—
--Chân reset kiểu logic 0/1—
--Chân selec kiểu logic 0/1—
--Chân clock kiểu logic 0/1—
--biến hàng đơn vị---biến hàng chục—

--khai báo kiến trúc thực thể thanhchu—
-- Bắt đầu chương trình—
--Thông báo quá trình chạy với các chân đã
khai báo—
--khai báo biến temp1 số nguyên từ 0-10---khai báo biến temp2 số nguyên từ 0-10---Nếu biến rst=1 thì—
--Còn không clk ở mức cao thì—
--Nếu stt=1 thì—
--Xét nếu stp=0 thì—
--Xét nếu sel=1 thì –

--Xét nếu temp1=0 thì gán temp1=1—
--Còn không thì tem1 tăng thêm 2 đơn vị--- Xét nếu temp1=1 thì—
--Xét nếu temp2=9 thì gán temp2=0 –
-- Còn không thì temp2 tăng lên 1 đơn vị--

-- Xét nếu sel=0 thì
--Xét nếu temp1=10 thì gán team1=0—
--Xét nếu temp2=9 thì gán temp2=0—
--Còn không thì temp2 tăng lên 1 đơn vị---Còn không thì temp1 tăng lên 2 đơn vị-Trang | 24


else temp1:=temp1+2;
end if;
end if;
else temp1:=temp1;
temp2:=temp2;
end if;
end if;
case temp1 is
when 0 => seg1<= x"C0";
when 1 => seg1<= x"F9";
when 2 => seg1<= x"A4";
when 3 => seg1<= x"B0";
when 4 => seg1<= x"99";
when 5 => seg1<= x"92";
when 6 => seg1<= x"82";
when 7 => seg1<= x"F8";
when 8 => seg1<= x"80";
when 9 => seg1<= x"90";
when others =>NULL;

end case;
case temp2 is
when 0 => seg2<= x"C0";
when 1 => seg2<= x"F9";
when 2 => seg2<= x"A4";
when 3 => seg2<= x"B0";
when 4 => seg2<= x"99";
when 5 => seg2<= x"92";
when 6 => seg2<= x"82";
when 7 => seg2<= x"F8";
when 8 => seg2<= x"80";
when 9 => seg2<= x"90";
when others =>NULL;
end case;
end process;
end thanhchu;

--Khi stp #0 thì gán temp1=temp1vaf
temp2=temp2—
--biến hàng đơn vị và hàng chục để hiện thị ra
LED---khai báo giá trị thập lục phân cho các trường
hợp xảy ra ở

--Nếu trường hợp khác thì không làm gì –
--Kết thúc các trường hợp xảy ra—
--Kết thúc quá trình thực hiện—
--Kết thúc thực thể thanhchu--

IV. THIẾT KẾ MẠCH.


1. Các file thiết kế.
Nhấn New, chọn tab Device Design Files, chọn Verilog HDL (hay
VHDL hay AHDL). Với cách này, mạch điện được mô tả bởi các đoạn mã thể
hiện các đầu vào đầu ra của các khối mạch cũng như cách xử sự của chúng.
Trong luận án này, lấy ví dụ về thiết kế mạch đếm 4 bit dùng Verilog HDL file.
Tạo file mới.
Từ giao diện của Altera Quartus chọn File/New Project Wizard. Hiện:
Trang | 25


×