Tải bản đầy đủ (.pdf) (297 trang)

Thiết kế mạch số với VHDL và verilog tập 2 tống văn on

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 (24.93 MB, 297 trang )

THƯ VIỆN
ĐẠI HỌC N H A TRANG

M
621.38
T 455 o
T.2

THIẾT KÊ' MẠCH sơ
'n

Quyển sách trình bày việc thiết kế mạch số
bao gồm mạch tổ hợp, mạch tuần tự và máy
trạng thái hữu hạn bằng cách sử dụng 2 ngôn ngữ
mô tả phần cứng: VHDL và Verilog. Hầu hết các
thí dụ đều được viết bằng cả hai ngôn ngữ trên
và cho ta cùng mạch logic tổng hợp được.
tttù tty (< Ịtt etã, ¿ ế » v ó i
THU VIEN DAI HOC NHA TRANG

tế ítt <ưệ* củ a cmỹ t& i
Xin vui lịng:




TẬP

Khơng xé sách
Khơng gạch, viết, vẽ lên sách


ɧi!.= ,

NHÀ XUẤT BẢN LAO ĐỘNG XÃ HỘI


M
2QQỊH

Tống Văn On (Chủ biên)

THIẾT K Í MẠCH s ố
VỚI

NHÀ XUẤT BẢN LAO ĐỘNG XÃ HỘI




Lời mở đầu

LỜI MỞ ĐẦU

Quyển sách này sử dụng hai ngồn ngữ mô tả 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 .IEEE (Institute of Electrical and Electronic
Engineers) chấp thuận. Các phiên bản ngôn ngữ đặc thù sử dụng trong quyển sách này là IEEE 1076
’93 cho VHDL và IEEE 1364 cho Verilog.
Tất cả mơ hình (model) đều đã được kiểm tra bằng cách sử dụng các công cụ mô phỏng và tổng hợp
do VeriBest Incorporated phát triển. Bất kỳ nơi nào có sự hiện diện của mạch logic tổng hợp được
(synthesized logic circuit), những mạch này đều đã được tối ưu hóa về diện tích trừ các trường hợp khác
sẽ được chỉ ra cụ thể.

Quyển sách này bao gồm 12 chương và được chia thành 2 tập.
Tập 1: Từ chương 1 đến chương 7.
Chương 1. Mở đầu. Chương 1 định nghĩa các linh kiện ASIC và FPGA, giới thiệu chỉ tiêu lựa chọn
linh kiện trong một ứng dụng cho trước. Ngôn ngữ mô tả phần cứng HDL và khái niệm về công cụ thiết
kế tự động cũng được giới thiệu.
Chương 2. Ràng buộc tổng hợp. Chương 2 trình bày ảnh hưởng của các ràng buộc khác nhau lên
mạch tổng hợp được cửa một thiết kế cụ thể. Một kịch bản ràng buộc thiết kế điển hình cũng được mơ
tả chi tiết.
Chương 3. Ngun tắc cơ bản của ngơn ngữ. Chương 3 trình bày những ngun tắc cơ bản của
hai ngôn ngữ mô tả phần cứng: VHDL và Verilog. Cấu trúc chương trình được trình bày bằng cách trước
tiên định nghĩa các đơn vị thiết kế và cách thức liên kết chúng với nhau, kế đến mô tả các thành phần
trong một đơn vị thiết kế. Các phép gán cũng được định nghĩa cùng với những biểu thức bên trong
chúng. Các toán tử và toán hạng hình thành biểu thức được mơ tả chi tiết.
Chương 4. Thiết k ế và mơ hình. Chương 4 cung cấp danh sách các khuyến cáo, vấn đề và kỹ
thuật cần khảo sát khi ta thiết kế ASIC và FPGA.
Chương 5. Cấu trúc th iết kế. Chương 5 trình bày việc cấu trúc chương trình HDL và cấu trúc của
phần cứng suy ra được khi ta mơ hình thiết kê ở mức truyền thanh ghi (RTL). Các cấu trúc chương trình
được nhóm lại và được thảo luận riêng biệt.
'
Chương 6. Mơ hình mạch logic tổ hợp. Chương 6 trình bày mơ hình các mạch logic tổ hợp thơng
dụng: mạch ghép kênh, mạch mã hóa, mạch mã hóa ưu tiên, mạch giải mã, mạch so sánh và ALU. Trong
đa số trường hợp, nhiều phương pháp mơ hình khác nhau cho cùng một mạch được trình bày.
Chương 7. Mơ hình mạch logic tuần tự. Chương 7 trình bày cách thức mơ hình mạch chốt,
flipflop, thanh ghi dịch hồi tiếp tuyến tính, mạch đếm và chia tần số.
Tập 2: Từ chương 8 đêh'chương 12.
Chương 8. Máy trạng thái hữu hạn. Chương 8 trình bày chi tiết các khía cạnh khác nhau của
việc mơ hình máy trạng thái. 13 thí dụ về máy trạng thái được trình bày giúp người đọc có thêm nhiều
kỹ năng thực tế trong việc thiết kế và mơ hình máy trạng thái hữu hạn.
Chương 9. Mơ hình tổ hợp và tuần tự. Chương 9 trình bày việc mơ hình mạch dịch bit, mạch
cộng, mạch trừ, mạch nhân và mạch chia dựa trên việc thực hiện mạch tổ hợp và mạch tuần tự.

Chương 10. Mạch đệm 3-trạng thái. Chương 10 bao gồm nhiều thí dụ khác nhau về cách thức
suy ra mạch đệm 3-trạng thái.
Chương 11. Viết công cụ kiểm tra. Chương 11 mô tả cấu trúc của công cụ kiểm tra mô phỏng và
các vấn đề liên quan.
Chương 12. Mô hình thực tế. Chương 12 trình bày 5 thí dụ mơ hình tương đối lớn bao gồm: tầng
đường ống 3-trạng thái, đồng hồ báo thức, mạch phân xử bus, mạch ước số chung lớn nhất và mạch phát
hiện lỗi & sửa sai.


s r

T h iế t k ế m ạch sô' với V H D L& V erilog

n

Nội dung quyển sách này được biên soạn từ các tài liệu sau:
1. Quyển “HDL’chip design” của Douglas Smith, 1998.
2. Quyển “VeriBest FPGA Synthesis HDL Reference Manual” của Veri-Best Incorporated, 1998.
3. Tài liệu “IEEE Standard Hardware Description Language Based on the Verilog Hardware
Description Language” , 1995 và 2000.
4. Tài liệu “IEEE Standard VHDL Language Reference Manual”, 2000.
Đối tượng của quyển sách này là các sinh viên thuộc các chuyên ngành điện, điện tử, viễn thông,
công nghệ thông tin của các trường dại học và cao đẳng. Người đọc cần có kiến thức cơ bản về kỹ thuật
số, mạch logic và biết qua một trong những ngơn ngữ lập trìn h như Pascal, c, v.v...
" Rất mong quyển sách này mang lại nhiều tiện lợi cho người đọc trong nghiên cứu và học tập. Chúc
các bạn thành công và mong nhận được những ý kiến đóng góp, phê bình cho những sai sót cịn tồn tại.
TP HỒ Chí Minh, tháng 1 năm 2007
MK . PUB

www.minhkhai.com.vn


THƯ NGỎ
K ính thư a quỷ B ạn đọc g ầ n xa!
Trước hết, Ban xuất bản xin bày tỏ lòng biết ơn và niềm vinh hạnh được đông đảo Bạn đọc nhiệt tình
ủng hộ tủ sách MK.PUB.
Trong thời gian qua chúng tôi rấ t vui và cảm ơn các Bạn đã gửi e-mail đóng góp nhiều ý kiến quý báu
cho tủ sách.
Mục tiêu và phương châm phục vụ của chúng tơi là:


Lao động khoa học nghiêm túc.



Chất lượng và ngày càng chất lượng hơn.



Tất cả vì Bạn đọc.

M ột lần nữa, Ban x u â t bản MK.PUB xin kính mời quý Bạn đọc tiếp tục tham g ia cùng chúng tôi
đ ể năng cao ch ấ t lượng sách. Cụ thể:
Trong quá trìn h sử dụng sách, nếu quý Bạn phát hiện thấy bất kỳ sai sót nào (dù nhỏ) xin đánh dấu,
ghi chú nhận xét ý kiến của Bạn ra bên cạnh rồi gửỉ cuốn sách này cho chúng tôi theo địa chỉ:
N hà sách M inh Khai
249 Nguyễn Thị Minh Khai, Q.I, Tp. Hồ Chí Minh.
E-mail: mk.book@minhkhcũ.com.vn hoặc
Chúng tơi xin hồn lại cước phí bưu điện và gửi trả lại Bạn cuốn sách cùng tên. Ngoài ra chúng tơi cịn
gửi tặng Bạn một cuốn sách khác trong tủ sách MK.‘PUB. Bạn có thể chọn cuốn sách này theo danh mục
thích hợp sẽ gửi tới Bạn.

VỚỊ mục đích ngày càng nâng cao chất lượng tủ sáẹh MK.PUB, chúng tôi rấ t mong nhận được sự hợp tác
nhiệt tình của quý Bạn đọc gần xa.
'MK.PUB cùng Bạn đọc đồng hành” để nâng cao chất lượng sách.
Một lần nữa chúng tôi xin chân thành cảm ơn.
MK.PUB


Mục lục

ỊỊJ ỊjRẠj®

MỤC LỤC

8

LỜI MỞ ĐẦU

I

MỤC LỤC

III

MÁY TRẠNG THÁI HỮU HẠN

1

8.1 MỞ ĐẦU

1


8.2 MÁY TRẠNG THÁI

1

8.3 GIẢN ĐỒ TRẠNG THÁI VÀ BẢNG TRẠNG THÁI

2

8.4 THIẾT KẾ FSM VÀ CÁC VẤN ĐỂ MƠ HÌNH

3

8.4.1 Cách viết HDL
8.4.2 Reset và hành vi khơng an tồn
8.4.3 Mã hóa trạng thái

5
5
6

8.4.4 Ngõ ra loại Mealy và Moore

7

8.4.5 Mạch logic trạng thái kế và ngõ ra tuần tự

7

8.4.6 Các máy trạng thái tương tác


7

Các thí dụ về máy trạng thái
9

MƠ HÌNH TỔ HỢP v à TUAN T ự
9.1 MẠCH DỊCH BIT

131
131

9.1.1 Mạch dịch bit tổ hợp

131

9.1.2 Mạch dịch bit đồng bộ - Thanh ghi dịch bit

138

9.2 MẠCH CỘNG VÀ MẠCH TRỬ

141

9.2.1 Mạch cộng/trừ tổ hợp

141

9.2.2 Mạch cộng/trừ tuần tự


142

9.3 MẠCH NHÂN VÀ MẠCH CHIA

161

9.3.1 So sánh tổ hợp và tuần tự

162

9.3.2 Giải thuật nhân và chia

163

Các thí dụ về mạch nhân và mạch chia
10 MẠCH ĐỆM 3-TRẠNG THÁI
10.1 MƠ HÌNH MẠCH ĐỆM 3-TRẠNG THÁI

189
189

Các thí dụ
10.2 THUẬT NGỮ

199


T h iế t k ế m ạch sô với V H D L& V erilog

IV


11 VIẾT CÔNG CỰ KIỂM TRA

201

11.1 MỞ ĐẦU

201

11.2 CẤU HÌNH

202

11.3 CẤU HÌNH VÀ MƠ PHỎNG ĐẶC BIỆT - TASK VÀ FUNCTION HỆ THỐNG

203

11.4 MƠ HÌNH PHẦN CỨNG ĐANG KIỂM TRA

203

11.5 TẠO RA VECTOR (TÁC NHÂN KÍCH THÍCH VÀ THAM CHIẾU)

203

11.5.1 Vector được tạo ra “on-the-fly”

204

11.5.2 Vector lưu trong dải


225

11.5.3 Đọc tập tin vector kiểm tra hệ thống

230

12 M Ơ IỈÌN H T H ự C T Ế

235

12.1 TẦNG ĐƯỜNG ỐNG 3-TRẠNG THÁI

235

12.2 ĐỒNG HỒ BÁO THỨC

239

12.3 MẠCH PHÂN XỬ BUS

245

12.4 MẠCH ƯỚC SỐ CHUNG LỚN NHAT

257

12.5 PHÁT HIỆN LỖI VÀ SỬA SAI

27 1



Chương 8: Mơ h ìn h m áy trạ n g th á i hữu h ạ n

1

g jj



8
M ơ HÌNH MÁY TRẠNG THÁI HỮU HẠN

8.1 MỞ ĐẦU
Những người thiết kế mạch sô" lúc nào cũng đối mặt với nhu cầu thiết kế các mạch thực hiện chuỗi
thao tác cụ thể, thí dụ như bộ điều khiển được sử dụng để diều khiển hoạt động của các mạch khác. Máy
trạng thái hữu hạn FSM (finite State machine) đã chứng tỏ là phương tiện rất hữu hiệu để mơ hình các
mạch tuần tự. Bằng cách mơ hình FSM trong ngơn ngữ mô tả phần cứng để sử dụng cùng với các cơng
cụ tổng hợp, người thiết kế có thể tập trung vào việc mơ hình chuỗi thao tác mong muốn mà không cần
quan tâm quá mức đến việc thực hiện mach; đây là nhiệm vụ của công cụ tổng hợp. Các FSM là phần
quan trọng trong thiết kế phần cứng và do vậy trong việc mơ hình HDL phần cứng.
Người thiết k ế cần xem xét các khía cạnh khác nhau của FSM trước khi viết một mơ hình. Việc viết
tốt một mơ hình là rấ t cần thiết để mạch hoạt động đúng chức năng và thỏa các yêu cầu theo nghĩa tối
ưu nhất. Một mơ hình viết khơng tốt sẽ không thỏa các tiêu chuẩn trên. Với lý do này, ta cần nghiên
cứu đầy đủ các FSM và làm quen với những vấh đề mơ hình HDL khác nhau.
8.2 MÁY TRẠNG THÁI
Một FSM là một mạch được thiết kế đặc biệt để đi qua một biểu đồ trạng thái cụ thể theo kiểu tuần
tự đã xác định trước và phù hợp với cấu trúc được trình bày ở hình 8.1.

Hình 8.1: Cấu trúc đơn giản của một máy trạng thái.

Inputs: các ngõ vào.
Next State logic (com binational): m ạch logic (tổ hợp) trạ n g th á i kế.
Current State register (sequential): thanh ghi (tuần tự) trạng thái hiện tại.

Output logic (combinational): mạch logic (tổ hợp) ngố ra.
Outputs: các ngõ ra.
Clock: xung clock.
Một trạng thái được biểu diễn bởi giá trị nhị phân lưu trong thanh ghi trạng thái hiện tại. Cấu trúc
của FSM bao gồm ba phần và có thể hoặc khơng được phản ánh trong cấu trúc của chương trình HDL
mà ta sử dụng để mơ hình FSM.
1.

Thanh ghi trạng thái hiện tại. Thanh ghi này có n-flipflop được sử dụng để lưu giữ trạng thái
hiện tại 'của FSM. Giá trị của thanh ghi biểu diễn giai đoạn (trạng thái) hiện tại trong chuỗi
thao tác cụ thể đang được thực hiện.


T h iế t k ế m ạch số với V H D L & V erilog

H * 2
_______

2.

3.

Khi hoạt động, thanh ghi trạng thái hiện tạ i được nhịp bởi xung clock từ một nguồn xung
clock độc lập.
Mạch k)gic trạng thái kế. Mạch logic tổ hợp này được sử dụng để tạo ra trạn g th ái k ế trong
chuỗi thao tác. Ngõ ra trạng thái kế là hàm t.heo các ngõ vào và trạn g thái hiện tạ i của máy

trạng thái.
Mạch logic ngõ ra. Mạch logic tổ hợp này được sử dụng để tạo ra các tín hiệu ngõ ra được cần
đến. Ngõ ra là hàm của ngõ ra thanh ghi trạng th ái và có th ể của các ngõ vào máy trạn g thái.

8.3 GIẢN ĐỒ t r ạ n g t h á i v à b ả n g t r ạ n g t h á i
Giản đồ trạng thái là biểu diễn bằng đồ thị hoạt động tuần tự của máy trạn g thái và thường được hỗ
trợ như là đầu vào trực tiếp đối với các công cụ tổng hợp thương m ại mà từ đó mạch tổng họp được và
mơ hình mơ phỏng HDL dược tạo ra. Sử dụng giản đồ trạn g th ái hoặc phương pháp nhập HDL thường
là một lựa chọn đơì với người thiết kế, miễn là các công cụ sắn sàng. Đôi khi một công ty sẽ công bô'
một hệ phương pháp th iế t k ế cụ thể, trong trường hợp này việc lựa chọn đã được thực hiện.
Hình 8.2 trìn h bày hai biểu diễn giản đồ trạng thái của cùng một máy trạn g thái có 5 trạn g thái;
bảng trạng thái tương đương được chỉ ra ở bảng 8.1. Sau đây là phần mô tả hai giản đồ trạn g th ái ở
hình 8.2.
Nomenclature

Transitional A H o ld /Y Me
State
Y_Mo

Y_Me.

M ealy type output
Y_Me shown only
when active

Y._Mo
inputs shown only
when needed to
clarify branch '
conditions. Dot(.)

is the boolean

Moore type output
Y_Mo diow n only
when active

-AND.

Y_Mo
State associated names

Transition from ST3 to .
STO when A and Hold
not active. E xplicitly defined
to avoid am biguity

Hình 8.2: Hai giản đồ trạng thái tương đương.

Nomenclature: danh phắp.
Transitional A_Hold/Y_Me: chuyển tiếp A Hold/Y_Me
State Y_Mo: trạng thái Y_Mo.
X - don’t care condition: X - điều kiện tùy định
Value of inputs A and Hold: giá trị của các ngõ vào A và Hold.
Value of Mealy type output Y_Me: giá trị của ngõ ra Y_Me loại Mealy.


Chương 8: Mơ h ìn h m áy trạ n g th á i hữu h ạ n

Value of Moore type output Y_Mo: giá trị của ngõ ra Y_Mo loại Moore.
Separator between inputs and Mealy type outputs: dấu phân cách giữa các ngõ vào và ngõ ra lọại Mealy.

Binary value on three state register flipflops: giá trị nhị phân trên ba ílipílop của thanh ghi trạng thái.
Mealy type output Y_Me shown only when active: ngõ ra loại Mealy Y_Me chỉ được trình bày khi tích cực.
Moore type output Y_Mo shown only when active: ngõ ra loại Moore Y_Mo chỉ được trình bày khi tích cực.
Inputs shown only when needed to clarify branch conditions. Dot (.) is the Boolean AND: các ngõ vào chỉ dược trình
bày khi cần làm rõ các điều kiện rẽ nhánh. Dấu (.) là AND logic.
State associated names: các tên kết hợp với trạng thái.
Transition from ST3 to STO when A and Hold not active. Explicitly defined to avoid ambiguity: chuyển trạng thái
từ ST3 đến STO khi A và Hold khơng tích cực. Được dinh nghĩa rõ ràng để tránh nhập nhằng.

Vòng tròn biểu thị trạng thái và đường có mũi tên biểu thị sự chuyển trạng thái giữa các trạng thái
xảy ra sau mỗi chu kỳ xung clock. Tín hiệu xung clock được hiểu ngầm và khơng được trình bày trên
giản đồ trạng thái cũng như trong bảng trạng thái.
Trạng thái k ế

Ngõ ra

Ngõ vào

Trạng thái hiện tại

A

Hold

Mã nhị phân

Tên

Mã nhị phân


Tên

Y_Me

Y_Mo

0

X

000

(ST0)

000

(ST0)

1

0

1

X

000

(ST0)


001

(ST1)

0

0

0

X

001

(ST1)

000

(ST0)

0

1

1

X

001


(ST1)

010

(ST2)

1

1

X

X

010

(ST2)

011

(ST3)

0

0

X

1


011

(ST3)

011

(ST3).

1

1

0

0

011

(ST3)

000

(STO)

1

1

1


0

011

(ST3)

100

(ST4)

0

1

X

X

100

(ST4)

000

(STO)

0

1


X: điều kiện tùy định.
Bảng 8.1: Bảng trạng thái của các giản dồ trạng thái ở hình 8.2.

SỐ nhị phân biểu thị giá trị trên các flipflop của thanh ghi trạng thái (giản đồ trạng thái thứ nhất)
‘hoặc tên trạng thái kết hợp (giản đồ trạng thái thứ hai) được chứa bên trong vòng tròn. Các điều kiện
tín hiệu ngõ vào điều khiển chuyển trạng thái được chỉ ra bên cạnh đường tương ứng và trước dấu /. Dấu
/ được sử dụng để phân cách các tín hiệu ngõ vào và ngõ ra. Hai ngõ vào A và Hold được trình bày trước
dấu /. Giá trị được trình bày sau dấu / nếu có sẽ chỉ rõ giá trị tín hiệu ngõ ra là hàm theo cả hai: ngõ
vào và thanh ghi trạng thái hiện tại.
Các ngõ ra này được gọi là ngõ ra loại Mealy, sẽ được mô tá sau. Giá trị của các tín hiệu ngõ ra chỉ
là hàm của thanh ghi trạng thái hiện tại, được trình bày bên cạnh vịng trịn biểu thị trạng thái tương
ứng. Các ngõ ra này được gọi là ngõ ra loại Moore, sẽ được mô tả sau. Khác biệt chính trong giản đồ
trạng thái thứ hai là các tín hiệu ngõ vào và ngõ ra chỉ được trình bày khi chúng tích cực, ngược lại
chúng vắng m ặt để giúp hiểu rõ chức năng và tránh gây rối loạn giản đồ. Thí dụ 8.S trình bày các mơ
hình HDL của giản đồ trạng thái cụ thể này.
8.4 THIẾT KẾ FSM VÀ CÁC VAN ĐỀ m ô h ì n h
Các vấn đề thiết kế và mơ hình máy trạng thái được khảo sát là:
1. Cách viết HDL.
2. Reset và hành vi khơng an tồn.
3. Mã hóa trạng thái.
4. Các ngõ ra loại Mealy và Moore.
5. Mạch logic trạng thái kế hoặc mạch logic ngõ ra tuần tự.


T h iế t k ế m ạch sô' với V H D L & V erilog

4

6. Các máy trạng thái tương tác.
Cấu trúe của một máy trạng thái có thể có một trong ba dạng (hình 8.3), bao gồm khối tổ hợp “mạch

logic trạng thái kế”, khối tuần tự “thanh ghi trạng thái hiện tạ i” và khối tổ hợp tùy chọn “mạch logic
ngõ ra”. Mạch logic ngõ ra không được cần đến nếu các ngõ ra chỉ xuất phát trực tiếp từ những ílipílop
của thanh ghi trạng thái. Trạng thái hiện tại được lưu giữ trong các ílipílop; mạch chốt sẽ gây ra dao
động trạng th ái khi trong suốt.
Các khối mạch logic trạng thái k ế và mạch logic ngõ ra có th ể chứa thêm mạch logic tuần tự, được
suy ra từ bên trong thân của mơ hình nhưng khơng được xem là một phần của máy trạn g thái. Máy
trạng thái chỉ có thể ở trong một trạng th ái tạ i một thời điểm cho trước và mỗi chuyển trạn g thái tích
cực của xung clock sệ làm cho. máy trạng thái chuyển từ trạng th ái hiện tại đến trạng th á i k ế như đã
được định nghĩa bởi mạch logic trạng thái kế.

M ealy

Outputs

Moore

Outputs

Moore

Mealy
O utputs

Moore
O utputs

Hình 8.3: Các cấu trúc Mealy, Moore và ngõ ra kết hợp với Mealy/Moore.
Inputs: các ngõ vào.
Next state logic (combinational): mạch logic (tể hợp) trạng thái kế.
Current State register (sequential): thailh 'ghi (tuầrí tự) trạng thái hiện tại.

Output logic (combinational): mach logic (tổ hợp) ngõ ra.
Mealy (Moore) Outputs: các ngõ ra loại Mealy (Moore).
Clock: xung clock.
Synchronous reset: reset đồng bộ.
Asynchronous reset: reset không đồng bộ.
Một máy trạng thái với n-flipflop trạng thái sẽ có 2n số nhị phân và có thể được sử dụng để biểu
diễn các trạng thái. Thông thường, không phải tất cả 2n số nhị phân được cần đến, các số không sử


Chương 8: Mơ h ìn h m áy trạ n g th á i hữu h ạn

dụng sẽ được thiêt kế để không xảy ra trong thời gian hoạt động bình thường. Thí dụ, máy trạng thái có
5 trạng thái yêu cầu tối thiểu 3 flipflop, trong trường hợp này ta có 3 trạng thái khơng được sử dụng.
8.4.1 Cách v iết HDL
Có nhiều phương pháp khác nhau để mơ hình cùng một máy trạng thái, nói cách khác, một thay đổi
nhỏ của chương trình có thể làm cho mơ hình hoạt động khác với mong đợi. Người thiết kế cần có kiến
thức về các kiểu mơ hình khác nhau được hỗ trợ bởi công cụ tổng hợp đang sử dụng và cần xem xét việc
mơ hình máy trạng thái độc lập với công cụ; điều này áp dựng cho việc mơ hình bất kỳ loại mạch nào.
Chương trình HDL có thể được cấu trúc thành ba phần riêng biệt, biểu thị ba khơi của máy trạng thái
như ở hình 8.3. Ngồi ra, những tổ hợp các khơi khác nhau cũng có thể được kết hợp trong mộ hình.
Nói cách khác, cách viết chương trình có thể độc lập với máv trạng thái đang thiết kế.
Mạch logic trạng thái kế được mơ hình tót nhất bằng cách sử dụng phát biểu case dù rằng mạch
logic trạng thái kế VHDL có thể được mơ hình bằng cách sử dụng phép gán tín hiệu có lựa chọn, có
nghĩa là FSM khơng thể được mơ hình trong một process. Mệnh đề others (VHDL) và mệnh đề
default (Verilog) được sử dụng trong phát biểu case nhằm tránh phải định nghĩa tường minh tấ t cả 2n
giá trị nhung một số’không thuộc máy trạng thái.
Các thí dụ 8.1 và 8.2 trình bày các kiểu mơ hình xấu và tốt của các FSM 3 và 4-trạng thái theo thứ
tự. Các mơ hình trong thí dụ 8.2 minh họa cách thức mà ba khơi của một ìiiáy trạng thái có thể được
kết hợp hoặc được tách biệt trong một mơ hình và cách thức đảm bảo tính linh động giừa các cơng cụ
tổng hợp. Thí dụ 8.3 trình bày máy trạng thái được mơ hình với các ngõ vào hoặc trạng thái hiện tại ở

dạng chỉ dẫn rẽ nhánh sơ cấp.
8.4.2 R eset và hành vi không an tồn
Phụ thuộc vào ứng dụng, tín hiệu reset có thể khơng sẵn sàng, ta có thể có reset đồng bộ, không
dồng bộ hoặc cả hai. Để đảm bảo tránh được hành vi khơng an tồn, ta cần thực hiện một trong hai
điều sau đây, tùy thuộc vào loại reset:
Sử dụng reset không đồng bộ, Điều này đảm bảo máv trạng thái luôn luôn được khởi động từ
một trạng thái hợp lệ biết trước, trước khi chuyển trạng thái xung clock đầu tiên tích cực và
hoạt động bình thường bắt đầu. Điều này cũng có lợi điểm là khồng cần giải mã các giá trị
trạng thái hiện tại không sử dụng và do vậy làm giảm tối thiểu mạch logic trạng thái kế.
Khơng có reset hoặc reset đồng bộ. Khơng có reset khơng đồng bộ, ta khơng có cách nào để biết
trước giá trị ban đầu các flipflop của thanh ghi trạng thái khi được thực hiện trong một IC và
đang được cấp điện. Máy trạng thái có thể đang được cấp điện và trở nên bị kẹt trong trạng
thái khơng sử dụng.
• Do vậy, tấ t cả 2n giá trị nhị phân phải được giải mã trong mạch logic trạng thái kế, chúng tạo
thành một phần của máy trạng thái hoặc khơng. Một cách tổng qt, chỉ có một tổn phí diện
tích nhỏ trong mạch logic trạng thái kế và được bù đắp cục bộ bằng cách sử dụng các flipflop
nhỏ hơn, khơng có ngõ vào reset khơng đồng bộ.
Lấy thí dụ, một máy trạng thái 10-trạng thái được mơ hình bằng cách sử dụng mã hóa Johnson.
Thanh ghi trạng thái chứa 5 flipflop và có (2Ỗ- 10) trạng thái khơng sử dụng. Kết quả tối ưu diện tích
của mạch logic trạng thái kế là 11% lớn hơn nếu reset đồng bộ được sử dụng thay cho reset không đồng
bộ. Điều này được bù đắp bằng các flipflop reset không đồng bộ của thanh ghi trạng thái, hơi lớn hơn so
với các flipflop reset đồng bộ. Kết quả chung là diện tích tăng 3% khi reset khơng đồng bộ được đổi
thành reset đồng bộ.
Trong VHDL, reset không đồng bộ chỉ có thể dược mơ hình bằng cách sử dụng phát biểu if trong
khi đó, reset đồng bộ có thể được mơ hình bằng cách sử dụng phát biểu w ait hoặc if. Điểm bất lợi của
việc sử dụng phát biểu w ait là toàn bộ process đều đồng bộ nên các phát biểu if khác không thể được
s'ử dụng để mơ hình mạch logic tổ hợp.
Trong Verilog, chỉ có phát biểu if được sử dụng và nếu không đồng bộ, phải được bao gồm trong
danh sách sự kiện của phát biểu alw ays cùng với mệnh đề posedge hoặc negedge.





T h iế t k ế m ạch sơ với VHDL & V erilog

6

Thí dụ 8.4 trình bày may trạng thái có mạch logic hiện tại và mạch logic trạn g thái k ế kết hợp được
mơ hình cùng với reset khơng đồng bộ, reset đồng bộ và khơng có reset. Thí dụ này cũng trìn h bày ảnh
hưởng tơl thiểu của chính mình trên mạch logic trạng thái k ế kéo theo.
Nếu mạch logic hiện tại và mạch logic trạng thái k ế được mơ hình riêng biệt, reset không đồng bộ
phải được bao gồm trong mạch logic trạng thái hiện tại tuần tự, trong khi reset đồng bộ có th ể được bao
gồm cùng với mạch logic hiện tại hoặc mạch logic trạng thái kế. Rõ ràng là bằng cách luôn bao gồm
reset trong mạch logic trạng thái hiện tại, ta dễ dàng thay đổi từ reset không đồng bộ th àn h reset đồng
bộ và ngược lại nếu cần. Có nhiều thí dụ về những reset, như vậy trong chương này.
8.4.3 Mã hóa trạng thái
Phương pháp mà ta gán số nhị phân cho các trạng thái được gọi là phương pháp mã hóa trạng thái.
Các dạng mã hóa trạng thái khác nhau được sử dụng phổ biến là:
Tuần tự.
Gray.
Johnson.
Một bit 1 (one-hot).
Định nghĩa bởi người sử dụng.
Định nghĩa bởi phần mềm tổng hợp.
Các dạng này được trình bày ở bảng 8.2 cho 16 trạng th ái và kèm theo phần mơ tả.
Số

Tuần tự

Gray


Johnson

Một bit 1

0

0000

0000

00000000

0000000000000001

1

0001

0001

00000001

0000000000000010

2

0010

0011


00000011

00000000000001.00

3

0011

0010

00000111

0000000000001000

4

0100

0110

00001111

0000000000010000

5 ,

0101

OUI


00011111

0000000000100000

6

0110

0101

00111111

000000000ÌQOOOOO

7

0111

0100

01111111

0000000010000000

8

1000

1100


11111111

0000000100000000



1001

1101

11111110

0000001000000000

10

1010

1111

11111100

0000010000000000

11

1011 .

1110


11111000

0000100000000000

12

1100

1010

11110000

0001000000000000

13

1101

1011

11100000

0010000000000000

14

1110 ■ 1001

11000000


0100000000000000

15

1111

10000000

1000000000000000

1000

Bảng 8.2; Các dạng mã hóa chuẩn của máy trạng thái.
Thí dụ 8.6 trình bày máy trạng th ái của mạch điều khiển trò chơi bài Blackjack sử dụng tấ t cả
dạng mã hóa trạng thái, bao gồm cả dạng được định nghĩa bởi phần mềm tổng hợp. Thí dụ này cũng
trinh bay ảnh hưởng của việc mã hóa trên mạch tổng hợp được của mơ hình cụ th ể này.
D ạng mã hóa trạng thái
Tn tự. Mơi trạng thái dơn thuần được gán số nhị phân tàng dần.
Gray và Johnson. Mỗi trạng thái trong cả hai dạng mã hóa Gray và Johnson đều được gán số n h ị
phân liên tiêp, trong đó chỉ có một bit thay dổi từ một số đến số k ế tiếp. Lý do chủ yếu của việc sử dụng


Chương 8: Mơ h ìn h m áy trạ n g th á i hữu h ạ n

7

mã này là nhằm làm giảm khả năng lỗi do chuyển trạng thái gây ra bởi các ngõ vào không đồng bộ
thay đổi trong những thời gian thiết lập của flipflop. Tất cả 2n sơ nhị phân đều có thể được sử dụng
trong mã hóa trạng thái theo mã Gray. Tuy nhiên, do biểu đồ các bit 1 và bit 0 trong mã hóa trạng thái

Johnson, nhiều flipflop hơn được cần đến và ln ln có những số nhị phân khơng sử dụng. Điều này
có nghra là reset khơng đồng bộ được ưa chuộng hơn, ngược lại mạch logic trạng thái k ế phải giải mã
tấ t cả 2n sô" nhị phân và dẫn đến mạch lớn hơn. Thí dụ 8.5 trình bày máy trạng thái của mạch điều
khiển vị trí sử dụng cả hai mã hóa trạng thái Gray và Johnson.
Một bit 1. Trong mã hóa trạng thái một bit 1, mỗi trạng thái được gán cho một ílipíìop nên n trạng
thái sẽ cần n flipflop và chỉ có một flipflop ở trạng thái đúng tại một thời điểm bất kỳ. s ố ílipílop gia
tăng thường dẫn đến mạch lớn hơn.
Định nghĩa bởi người sử dụng. Mỗi trạng thái được gán một mã nhị phân phù hợp với một yêu cầu
cụ thể.
Định nghĩa bởi phần mềm. tổng hợp. Các dạng này được chọn bởi cơng cụ tổng hợp để tối thiểu hóa
mạch logic trạng thái kế. Rõ ràng là các phép gán thực tế phụ thuộc vào thiết kế. Điều cần thiết là
tham khảo sổ tay phần mềm tổng hợp thích hợp để tìm cách nhận được điều này. Cơng cụ tổng hợp
được cung cấp bởi VeriBest Incorporated cho phép điểm nhập bảng của các thơng sơ' FSM, từ đó sẽ chọn
mã hóa tối ưư nhằm tối thiểu hóa mạch logic trạng thái kế sử dụng một trong nhiều giải thuật khác
nhau. Cơng cụ tổng hợp này .cũng cung cấp mơ hình HDL cho các mục đích mơ phỏng.
8.4.4 Ngõ ra loặi Mealy và Moore
Các cấu trúc của máy trạng thái Mealy, Moore và kết hợp cả hai đã được trình bày ở hình 8.3. Máy
trạng thái Mealy có các ngõ ra là hàm theo trạng thái hiện tại và các ngõ vào. Máy trạng thái Moore có
các ngõ ra là hàm chỉ theo trạng thái hiện tại và do vậy bao gồm những ngõ ra trực tiếp từ thanh ghi
trạng thái. Nếu các' ngõ ra chỉ xuất phát trực tiếp từ thanh ghi trạng thái, ta khơng có mạch logic ngõ
ra. Máy trạng thái kết hợp Mealy/Moore có cả hai loại ngõ ra trên. Sự lựa chọn giữa việc mơ hình các
ngõ ra Mealy hoặc Moore rõ ràng phụ thuộc vào thiết kế.
Hình 8.7 trình bày cùng một máy trạng thái được mơ hình có ngõ ra loại Mealy hoặc Moore, trong
khi thí dụ 8.8 trình bày các mơ hình của giản đồ trạng thái thí dụ ở hình 8.2, máy trạng thái này có
một ngõ ra Mealy và một ngõ ra Moore.
8.4.5 Mạch logic trạng thái k ế và ngõ ra tuần tự
Cả hai mạch logic trậng thái kế và ngõ ra trong máy trạng thái đều chỉ bao gồm mạch logic tổ hợp.
Tuy nhiên, phụ thuộc vào ứng dụng, ta có thể sẽ cần mơ hình thêm mạch logic tuần tự ở một trong hai
khối này và mạch logic này có thể được nhúng trong chương trình của mơ hình máy trạng thái. Lưu ý
rằng, bằng cách khơng định nghĩa các tín hiệu trạng thái kế hoặc ngõ ra trong tấ t cả các nhánh của

phát biểu case của máy trạng thái, ta dễ dàng vơ tình mơ hình những mạch chốt không mong muốn.
Mạch logic trạng thái k ế tuần tự. Mạch logic trạng thái k ế tuần tự điều khiển việc rẽ nhánh trạng
thái từ các tín hiệu đã thiết lập trước đó. Những tín hiệu như vậy có thể được thiết lập khi máy trạng
thái đã ở trong trạng thái khác, được chuyển ngang qua một chuỗi trạng thái cụ thể hoặc do giá trị tích
lũy vào đó sinh ra từ việc lặp vịng xung quanh các chuỗi trạng thái liên tục. Những tín hiệu điều khiển
trạng thái k ế này cũng có thể cung cấp các ngõ ra của máy trạng thái. Thí dụ 8.8 trình bày một mơ
hình như vậy, bao gồm một flipflop. điều khiển trong mạch logic trạng thái kế.
Mạch logic ngõ ra tuần tự. Mạch logic ngõ ra tuần tự biểu lộ sự kiện một trạng thái hoặc chuỗi
trạng thái nào đó đã xảy ra. Thí dụ 8.9 trình bày một ứng dụng điển hình của mạch này, trong đó một
t.hanh chứa (accumulator) được tăng mỗi lần máy trạng thái đi qua một trạng thái đặc biệt.
8.4.6 Các m áy trạn g thái tương tác
Nếu trạng thái hiện hành hoặc các tín hiệu ngõ ra của một máy trạng thái được sử dụng để chi phối
hoạt động của máy trạng thái khác, chúng được gọi là tương tác. Tương tác giữa các máy trạng thái có
th ể là một chiều hoặc hai chiều.
Một chiều. Gác máy trạng thái có thể được cấu trúc theo cách có thứ bậc, trong trường hợp này
người ta thường phán chia những cấu trúc đường điều khiển lớn, phức tạp thành nhiều mảng nhỏ dễ


T h iế t k ế m ạch sô' với V H D L & V erilog

quản lý hơn. Hình 8.4 trình bày cấu trúc của hai máy trạng thái trong đó FSM1 có điều khiển một chiều
trên FSM2 nghĩa là trạng thái k ế cửa FSM2 phụ thuộc vào các ngõ vào và trạn g thái hiện tại của chính
FSM2 cộng thêm trạng thái của FSM1. Thí dụ 8.10 trình bày ba cấu hình máy trạng th ái khác nhau của
một mơ hình đường điều khiển (control path), được sử dụng để điều khiển cùng một đường dữ liệu
(datapath). Mạch điều khiển này được mơ hình theo ba cách riêng biệt:
1. FSM chủ điều khiển ba FSM cơn có thứ bậc.
2. Ba FSM với điều khiển nôi tiếp từ một FSM này đên FSM k ế tiếp.
3. Sử dụng một FSM.
Hai chiều. Các máy trạng thái có điều khiển hai chiều trên mỗi máy trạng thái khác thường dùng
cho việc mơ hình những mạch có u cầu cơ chế bắt tay (handshaking mechanism). H ình 8.5 trìn h bày

cấu trúc của ba máy trạng thái tương tác, trong đó mỗi máy trạng thái có điều khiển hai chiều trên hai
máy khác Thí dụ 8.11 trình bày hai máy trạng thái tương tác hai chiều; mỗi máy có 4 trạn g thái biểu
diễn vị trí góc của hai phần quay (rotor) cơ khí phối hợp nhau.

Hình 8.4: Cấu trúc hai máy trạng thái tương tác một chiều.
Inputs: các ngõ vào.
Next state logic (combinational): mạch logic (tổ hợp) trạng thái kế.
Current State register (sequential): thanh ghi (tuần tự) trạng thái hiện tại.

Output logic (combinational): mạch logic (tổ hợp) ngõ ra.
Mealy (Moore) outputs: các ngõ ra loại Mealy (Moore).
Clock: xung clock.
Synchronous reset: reset đồng bộ.
Asynchronous reset: reset không đồng bộ.
For Mealy outputs: cho các ngõ ra Mealy.
For Moore outputs: cho các ngõ rà Moore.
T h í d ụ 8.1. C ác m ô h ìn h dược v iế t k h ô n g tố t v à tố t c ủ a m ộ t FSM 3 -trạ n g th á i
Các mơ hình khơng tốt và tốt của một FSM 3-trạng thái được mơ hình theo những giản đồ trang
thái ở hình 8.6.
Hai mơ hình VHDL sử dụng một biến trạng thái duy n h ất có kiểu liệt kê, nghĩa lồ công cụ tổng hợp
sẽ tự động gán sô'nhị phân tuần tự cho các trạng thái.
Hai mô hình Verilog sử dụng một trong ba giá trị p a r a m e te r cho các trạn g th ái và do vậy. số của
trạng thái được định nghĩa trong chính mơ hình.


Chương 8: Mơ h ìn h m áy trạ n g th á i hữu h ạ n

9




For Mealy outputs

Hình 8.5: Cấu trúc ba máy trạng thái tương tác hai chiều.
Combined next State logic for all three FSMs: mạch logic trạng thái kế kết hợp cho cả ba FSM.
Current State logic for FSM1/FSM2/FSM3: mạch logic trạng thái hiện tại cho FSM1/FSM2/FSM3.
Clock: xung clock.
Inputs: các ngõ vào.
Outputs: các ngõ ra.
Output logic for FSM1/FSM2/FSM3: Mạch logic ngõ ra cho FSM1/FSM2/FSM3.
For Mealy outputs: cho các ngõ ra Mealy.

Mơ hình khơng tốt
Mơ hình thứ nhất FSM1_BAỊ) là sai, với các lý do được liệt kê dưới đây. Lưu ý rằng, trong thí dụ cụ
thể này kiểu của trạng thái và khai báo kiểu là cục bộ đối với khối process của VHDL và alw ays của
Verilog.
1.

Máy trạng thái có ba trạng thái sẽ yêu cầu hại flipflop, nhưng hai flipflop này có bốn giá trị
nhị phân có thể có nên sẽ có một trạng thái khơng sử dụng. Khơng có reset và khơng có giá
trị trạng thái kế được xác định cho trạng thái khơng sử dụng này. Điều này có nghĩa là máy
trạng thái thực tế có thể được thực hiện và có khả năng trở nên kẹt trong trạng thái không
sử dụng khí đang cấp điện.

2.

Mạch logic trạng thái hiện tại, trạng thái kế và ngõ ra đều được định nghĩa trong cùng khối
process của VHDL hoặc alw ays của Verilog. Do process của VHDL chứa phát biểu w ait,
các phép gán ngõ ra Read và Write sẽ suy ra hai flipflop phụ. Tương tự, do khối alw ays của



E l®

T h iế t k ế m ạch sơ' với V H D L & V erilog

10

Verilog được kích cạnh dương của xung clock, nên các phép gán ngõ ra Read và W rite cũng sẽ
suy ra một ílipílop phụ.
3.

Định nghĩa biến của State trong phiên bản VHDL có giá trị ban đầu là ST_Read. Điều này
tốt khi mô phỏng nhưng bị bỏ qua bởi các công cụ tổng hợp. Các biến và tín hiệu khơng nên
được khởi động theo cách này nếu mơ hình dự định được tổng hợp; điều này không biểu diễn
trạng thái ban đầu của phần cứng vật lý.
Các phép gán thủ tục trong Verilog chỉ được khởi động thông qua khối in itia l, không được hỗ
trợ bởi công cụ tổng hợp và do vậy, vấn đề này sẽ khơng xảy ra.

Thí dụ 8.1: FSM1 được mơ hình khơng đúng (FSM1JBAD) - VHDL
lib ra ry IEEE;
u se IEEE.STD_Logic_1164.all;
e n tity FSMÌ_BAD is
p o r t ( Clock:
in std_logic;
SlowRAM:
in std_logic;
Read, Write: o u t std_logic);
e n d e n tity FSM1_BAD;
a r c h ite c tu re RTL o f FSM1_BAD is
b e g in

SEQ_AND_COMB: p ro c e ss
ty p e StateType is (ST_Read, ST W rite, ST_Delay);
v a ria b le State: StateType := STJRead;
—Trạng thái là một biến, nhưng biến lại
“ không lưư giữ giá trị của biến trên các
—đơn vị thời gian mô phỏng.
b e g in
w a it u n til rising_edge(Clock);
c ase State is
w h e n ST_Read =>
Read <= ‘1’;
W rite <= ‘O’;
State := ST_Write;
w h e n STJWrite =>
Read <= ‘O’;
Write <= T ;
if (SlowRAM = ‘1’) th e n
State := ST_Delay;
e lse
State := ST_Read;
e n d if;
w h e n ST_ Delay =>
Read <= ‘O’;
Write <= ‘O’;
State := ST Jtead;
e n d case;
" Khơng có mệnh đề o th e rs . Không ảnh hưởng mạch tổng hợp dược nhưng
-- không tuân theo LRM.
e n d p ro c e ss SEQ_AND_COMB;
e n d a rc h ite c tu re RTL;



Chương 8: Mơ h ìn h m áy trạ n g th á i hữu h ạ n

11

Thí dụ 8.1: FSM1 được mơ hình khơng đứng (FSM1_BAD) - Verilog
m odule FSMl_BAD(Clock, SlowRAM, Read, Write);
in p u t Clock, SlowRAM;
o u tp u t Read, Write;
re g Read, Write;
alw ays ©(posedge Clock)
begin: SEQ_AND_COMB
p a ra m e te r ST_Read = 0, STJWrite = 1, ST_ Delay = 2;
in te g e r State;
case (State)
STJRead :
b eg in
Read = 1;
Write = 0;
State = ST_Write;
end
STJWrite :
b eg in
Read = 0;
Write = 1;
if (SlowRAM == 1)
State = ST_Delay;
else
State = STJRead;

en d
ST_ Delay :
b eg in
Read = 0;
Write = 0;
State = ST_Read;
end
en d case
// Do khơng có d e fa u lt nên khơng có giá trị mới cho Read và Write,
// hai flipflop ngõ ra phụ cũng sẽ có mạch logic hồi tiếp xung quanh chúng,
end
endm odule

Mơ h ìn h tấ t
Mơ hình thứ hai FSMl_GOOD cho ta phiên bản đúng. Mạch logic trạng thái hiện tại tuần tự được
tách biệt khỏi mạch logic tổ hợp trạng thái kế và ngõ ra kết hợp với nhâu. Phiên bản VHDL vẫn sử
dụng phát biểu w a it mặc dù theo qui luật chung, sử dụng phát biểu if sẽ tốt hơn. Phát biểu ư của
VHDL có thể mơ hình mọi nhu cầu mạch logic đồng bộ và khơng đồng bộ, có thêm lợi điểm là cho phép
mạch logic tuần tự và mạch logic tổ hợp được trộn lẫn trong cùng một process.
Thí dụ 8.1: FSM1 được mơ hình đúng (FSMl_GOOD) - VHDL
library IEEE;
use IEEE.STD_Logic_1164.all;
entity FSMl_GOOD is_______________________ ________


I* 12

T h iế t k ế m ạch số với VHDL & V erilog

Thi dụ 8.1: FSM1 được mỏ hình đúng (FSMl_GOOD) - VHDL (tiếp theo)________________

port ( Clock, Reset: in stdjogic;
SlowRAM:
in stdjogic;
Read, Write: out std_logic);
en d en tity FSMl_GOOD;
arch itecture RTL o f FSMl_GOOD is
type StateType is (ST_Read, ST_Write, ST_Delay);
signal CurrentState, NextState: StateType;
b egin
•*
3

SEQ: p rocess -- Khơng có danh sách độ nhạy do p ro cess chứa một w ait,
b egin
w ait u n til rising_edge(Clock);
if (Reset = ‘1’) th en
CurrentState <= STJRead;e sle
CurrentState <= NextState;
en d if;
en d p rocess SEQ;
f

*•'- ÁCOMB: p rocess (CurrentState)
begin
case CurrentState is
w h en ST_Read =>
Read <= ‘1’;
W rite < = ‘0’;
N extState <= ST_Write;
w h en ST_Write =>

Read < = ‘O’;
W rite <= ‘1’;
_
if (SlowRAM = ‘1’) th en
NextState <= ST_Delay;
e lse
N extstate <= STJRead;
end if;
w h en ST_ Delay =>
Read <= ‘O’;
W rite <= ‘O’;
. NextState <= STJRead;
— Không cần w hen others; cả ba điều kiện của kiểu StateType dều có nhánh
- case dược định nghĩa rõ ràng,
end case;
end p rocess CỎMB;
end architecture RTL; _____________ ■
_________________ .______________________

Thí dụ 8.1: FSMl được mô hlnh đứng (FSMl.GOOD) - Verilog
m odule FSMl_GOOD(Clock, Reset, SlowRAM, Read, Write);
Input Clock, Reset, SlowRAM;
output Read, Write;
reg Read, Write;
'



„ 011■pn.l,.l,ll|.,nl■


Ị.'-

t o w 4 & , £ ,, J ,


Chương 8: Mơ h ìn h m áy trạ n g th á i hữu h ạ n

13

___ego

Thí dụ 8.1: FSM1 được mơ hình đúng (FSMl_GOOD) - Verilog (tiếp theo)

param eter
reg

[1:0] ST_Read = 0, ST_Write = 1, ST_ Delay = 2;
[1:0] Currentstate, Nextstate;

alw ays @(posedge Clock)
begin: SEQ
if (Reset)
CurrentState = ST_Read;
esle
C urrentstate = NextStáte;
eiụl
alw ays ©(CurrentState)
begin: COMB
case (CurrentState)
ST_Read :

begin
Read = 1;
Write = 0;
NextState = ST_Write;
end
ST_Write :
begin
Read = 0;
Write = 1;
if (SlowRAM)
N extstate = ST_Delay;
else
NextState = ST_Read;
end
ST_ Delay :
begin
Read =0;
Write = 0;
NextState = ST_Read; .
end
default :
begin
Read = 0; -- Được cần đến để tránh cho các ngõ ra không
Write = 0; - bị chốt riêng biệt.
NextState = ST_Read; - Được cần đến để tránh cho
- mạch logic trạng thái kế không bị chốt.
end
endcase
end
e n d m o d u l e _________________________________ :_____ _____________________________ ;_________

Hình 8.7 là mạch tổng hợp được của thí dụ 8.1.
Thí dụ 8.2. Một mơ hình khơng tốt và bốn mơ hình tốt của FSM
Thí dụ này trình bày một mơ hình khơng tốt và bốn mơ hình tốt của FSM có giản đồ trạng thái d
hình 8.8. FSM này có 4 trạng thái và sử dụng reset khơng đồng bộ. Cũng như trong th í dụ trước, mơ
hình trong VHDL sử dụng kiểu dữ liệu liệt kê cho biến trạng thái, trong khi dó mơ hình trong Verilog


T h iế t Kế m ạch số vứi V HDL & V erilog

* 14
____

H

sử dụng các giá trị param eter. Mơ hình thứ nhất FSM2_BAD là sai, với những lý do tương tự với mơ
hình khơng tốt ở thí dụ 8.1, nghĩa là các flipflop được tổng hợp trong mạch logic ngõ ra.

Lần này, các ngõ ra trong mơ'hình VHDL được gán dựa vào phát biểu “if rising edge(Clock)”.
Các mơ hình tốt (FSM2_GOODl đến FSM2_GOOD4) cho thấy những tổ hợp khác nhau, trong đó
mạch logic trạng thái hiện tại (CS), trạng thái kế (NS) và ngõ ra (OL) có thể được kết hợp hoặc tách
biệt bên trong một mô hình. Thiết kế được mơ hình như sau:
FSM2_GOODl

cs, NS và OL tách biệt.

FSM2_GOOD2

Kết hợp c s , NS. OL tách biệt.

FSM2_GOOD3


Kết hợp NS, OL.

FSM2_GOOD4

cs tách biệt.
Kết hợp cả ba cs, NS và OL (chỉ với VHDL).

Trong đó: CS: current State, NS: next state, OL: output logic.
Thí dụ 8.2: FSM2 được m ơ hình sai (FSM2_BAD) - VHDL
library IEEE;
use IE.STD_Logic_1164.all;
en tity FSM2_BAD is
p ort ( Clock, Reset: in
std_logic; _
Control:
in
stdjogic;
Y:
output integer range 1 to 4);
- range CÓ 4 giá trị, nhưng bắt đầu từ 1 (không phải 0).
—Phần mềm tổng hợp bắt đầu từ 0 nên 3 flipflop được suy ra.
end en tity FSM1_BAD;
architecture RTL o f FSM1 _BAD is
begin
ALL_IN_1: p rocess
type StateType is (STO, STl, ST2, ST3);
variable STATE: StateType := STO;
begin
if (Reset = ‘1’) th en

Y<=1;
STATE := STX);
e lsif rising_edge(Clock) th en
case (STATE) is

____________

-

—Các ngõ ra Y dưới đây được gán dựa trên clock’event đồng bộ
" ưên ba mạch chốt phụ được suy ra.
w hen STO => Y <= 1STATE := STl;
w hen STl => Y <= 2-


Chương 8: Mơ h ìn h m áy trạ n g th á i hữu h ạ n

Thí dụ 8.2: FSM2 được mơ hình sai (FSM2_BẠD) - VHDL (tiếp theo)

if (Control = ‘1’) th e n
STATE := ST2;
else
STATE := ST3;
e n d if;
w h en ST2 => Y <= 3;
STATE := ST3;
w h e n ST3 => Y < - 4;
STATE := STO; e n d case;
e n d if;
e n d p ro c e ss ALL_IN_1;

e n d a rc h ite c tu re RTL;____________________________________

Thí dụ 8.2: FSM2 được mơ hình sai (FSM2_BAD) - Verilog

m o d u le FSM2_BAD{Clock, Reset, Control, Y);
in p u t Clock, Reset, Control;
o u tp u t [2:0] Y; // Cho phép tầm từ 1 đến 4
re g [2:0] Y;
alw ays @(posedge Clock o r posedge Reset)
begin: ALL_IN_1
p a ra m e te r [1:0] STO = 0, ST1 = 1, ST2 = 2, ST3 = 3;
in te g e r [1:0] STATE;
if (Reset)

b eg in
Y = 1;
STATE = ST0;
en d

else
case (STATE)
// Các ngõ ra Y được gán dựa vào khối alw ays đồng bộ nên
// ba mạch chốt được suy ra.

'

ST0:

b e g in Y = 1;
STATE = ST1;

end

ST1:

b e g in Y = 2;
if (Control)
STATE = ST2;
else
STATE = ST3;
end

ST2:

b e g in Y = 3;
STATE = ST3;
end

ST3: b e g in Y = 4;
__________ STATE = ST0;_________ ________________________


T h iế t k ế m ạch sô' với V H D L & V erilog

* 16
________

H

Thí dụ 8.2: FSM2 được mơ hình sa i (FSM2_BAD) - V erilog (tiếp theo)


end
endcase
end
endm odule

Thí dụ 8.2: FSM2_GOOD1 - VHDL

library IEEE;
use IEEE.STD_Logic_1164.all;
en tity FSM2_GOODl is
port ( Clock, Reset: in std logic;
Control:
in std_logic; •
Ỵ:
ou t integer range 0 to 4);
- 0 đến 4 ngụ ý 3 bit, 1 đến 4 cũng ngụ ý 3 bit từ phần mềm tổng hợp,
- nghĩa là 0 đến 4 được suy ra.
end en tity FSM2_G00D1;
architecture RTL o f FSM2_GOỌDl is
typ e StateType is (STO, ST1, ST2, ST3);
sig n a l-CurrentState, Nextstate: StateType;
begin
-- Mạch logic trạng thái kế.
COMB: p rocess (Control, CurrentState)
begin
case CurrentState is
w hen STO =>
NextState <= ST1;
w h en ST1 =>
if (CONTROL = T ) th en

NextState <= ST2;
e lse
NextState <= ST3;
en d if;
w hen ST2 =>
NextStáte <= ST3;
w h en ST3 =>
NextState <= STO;
w hen oth ers => —Được yêu cầu để tuân theo LRM.
NextState <= STO; - Được yêu cầu để tránh suy ra mạch chốt,
end case;
end process. COMB;
“ Mạch logic trạng thái hiện tại.
SEQ: process (Clock, Reset)
begin
if (Rễset = ‘1’) th en
“ Ktomg thể sử dụng phát biểu w a it do reset là khơng đồng bộ.
Currentstate <= STO;
_______ elsif»rising_edge(Clock) th en
•*


Chương 8: Mơ h ìn h m áy trạ n g th á i hữu h ạ n

17

Thí dụ 8.2: FSM2_GOODl - VHDL (tiếp theo)

CurrentState <= NextState;
end if;

end process SEQ;
- Mạch logic ngõ ra. Y là ngõ ra loại Moore 3-bit.
w ith CurrentState seỉsect
Y <= 1 w hen STO,
2 w hen ST1,
3 w hen ST2,
4 w hen ST3,
1 w hen others;
Được yêu cầu để chỉ tuân theo LRM,
- không ảnh hưởng mạch tổng hợp được.
end architecture RTL;_________________


______

Thí dụ 8.2: FSM2_GOODl - Verilog______________________________________________

module FSM2_GOODl (Clock, Reset, Control, Y);
input Clock, Reset, Control;
output [2:0] Y;
reg [2:0] Y;
param eter [1:0] STO = 0, ST1 = 1, ST2 = 2, ST3 = 3;
reg [1:0] CurrentState, NextState
// Mạch logic trạng thái kế.
alw ays @(Control or Currentstate)
// Mệnh đề default không được yêu cầu để tránh suy ra mạch chốt,
// do giá trị mặc định của NextState được định nghĩa ngay trước phát biểu case,
begin: COMB
NextState = ST0;
case (CurrentState)

ST0: begin
NextState = ST1;
end
ST1: begin
if (Control)
NextState = ST2;
else
NextState = ST3;
end
ST2: begin
N extstate = ST3;
end
ST3: begin
NextState = ST0;
end
endcase
end
// Mạch logic trạng thái hiện tại.______________________ ____________ ______

gg*


¡Ml* Ig

T h iế t k ế m ạch sô' với V H D L & V erilog

Thí dụ 8.2: FSM2_GOODĩ - V erilog (tiếp theo)_____________________________

alw ays @(posedge Clock or p osed ge Reset)
begin: SEQ

if (Reset)
Currentstate = STO;
else
Currentstate = NextState;
end
// Mạch logic ngõ ra. Y là ngõ ra loại Moore 3-bit.
alw ays ©(CurrentState)
begin: OUTJLOGIC
case (CurrentState)
STO: Y = 1;
ST1: Y = 2,
ST2: Y = 3;
ST3: Y = 4;
default: Y = 1;
// Mệnh đề d efa u lt được yêu cầu để tránh suy ra mạch chốt,
endcase
en d
endm odule

Thí dụ 8.2: FSM2_GOOD2 - VHDL

library IEEE;
use IEEE.STD_Logic_1164.all;
en tity FSM2_GOOD2 is
port ( Clock, Reset: in std_logic;
Control:
in std_logic;
Y:
ou t integer range 0 to 4);
end en tity FSM2_GOOD2;

architecture RTL o f FSM2_GOOD2 is
type StateType is (STO, ST1, ST2, ST3);
signal STATE: StateType;
begin
- Mạch logic trạng thái kế và trạng thái hiện tại.
NEXT_CURR: p rocess (Clock, Reset)
begin
if (Reset = ‘1’) th en
STATE <= STO;
e lsif rising_edge(Clock) th en
case (STATE) is
w hen STO =>
STATE <=ST1;
w h en ST1 =>
if (Control = ‘1’) th en
STATE <= ST2;
__;____________
else'


Chương 8: Mơ h ìn h m áy trạ n g th á i hữu h ạ n

-

Thí dụ 8.2: FSM2.GOOD2 - VHDL (tiếp theo)

STATE <= ST3;
end if;
w hen ST2 =>
STATE <= ST3;

w hen ST3 =>
STATE <= STO;
w hen others =>
null;
end case;
end if;
end process NEXT_CURR;
- Mạch logic ngõ ra.
- Phép gán tín hiệu đồng thời có lựa chọn được sử dụng thay cho process.
w ith STATE selsect
Y <= 1 w hen STO,
2 w hen ST1,
3 w hen ST2,
4 w hen ST3,
1 w hen others; - Ngõ ra Y loại Moore 3-bit.
end architecture RTL;______________________________________________

Thí dụ 8.2: FSM2_GOOD2 - Verilog

m odule FSM2_GOOD2 (Clock, Reset, Control, Y);
input Clock, Reset, Control;
output [2:0] Y;
reg [2:0] Y;
param eter [1:0] STO = 0, ST1 = 1, ST2 = 2, ST3 = 3;
reg [1:0] STATE;
// Mạch logic trạng thái kế và trạng thái hiện tại.
alw ays ©(posedge Clock or posedge Reset)
begin: NEXT_CURR
if (Reset)
STATE = ST0;

e lse
case (STATE)
ST0: STATE = ST1;
ST1: if (Control)
STATE = ST2;
else
STATE = ST3;
ST2: STATE = ST3;
ST3: STATE = ST0;
// default không được yêu cầu để tuân theo LRM và không cần ở đây, do
// các phép gán ở trong phát biểu always kích cạnh, dù th ế nào cũng suy ra
// các flipflop.
endcase
________________ _________________________ __

19

IM]®


×