1. Trang chủ
  2. » Luận Văn - Báo Cáo

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

297 126 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 297
Dung lượng 24,93 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

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 t

Trang 1

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

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.

THU VIEN DAI HOC NHA TRANG

Trang 3

Lời mở đầu I®

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 th iế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 N guyên tắc cơ bản của ngôn ngữ Chương 3 trình bày những nguyên 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 th iế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

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 th iế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

Trang 4

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

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 M anual”, 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 PUBmk.pub@minhkhai.com.vnwww.minhkhai.com.vn

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, B an x u â t bản MK.PUB xin kín h mời quý B ạn đọc tiế p tục th a m g ia cù n g chúng tôi

đ ể năng cao c h ấ 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 K hai

249 Nguyễn Thị M inh Khai, Q.I, Tp Hồ Chí Minh.

E-mail: mk.book@minhkhcũ.com.vn hoặc mk.pub@minhkhai.com.vn

Chúng tôi xin hoà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 àn h cảm ơn

MK.PUB

Trang 6

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

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

Trang 7

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ìn h 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ạn g 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

Trang 8

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

_

Khi hoạt động, th an h ghi trạn g th ái hiện tạ i được nhịp bởi xung clock từ một nguồn xung clock độc lập

2 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ạ n g 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ạn g thái

3 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 th an h ghi trạn g 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ạn g 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ìn h 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 th iế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ạn g 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ạn g th ái tương đương được chỉ ra ở bảng 8.1 Sau đây là phần mô tả h ai giản đồ trạ n g th á i ở hình 8.2

Nomenclature

Transitional A H o ld /Y Me State Y_Mo

Y_Me.

Y._Mo

inputs shown only when needed to clarify branch ' conditions D ot(.)

is the boolean

-AND.

M ealy type output Y_Me shown only when active

Moore type output Y_Mo diow n only when active

Y_Mo STO when A and Hold Transition from ST3 to

not active E xplicitly defined

to avoid am biguity State associated names

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.

Trang 9

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ạn g 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ìn h bày trên giản đồ trạng thái cũng như trong bảng trạng thái

Ngõ vào Trạng thái hiện tại Trạng thái k ế Ngõ ra

A Hold Mã nhị phân Tên Mã nhị phân Tên Y_Me Y_Mo

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ìn h 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 th an h 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ạn g 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ạn g 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ìn h bày các mô hình HDL của giản đồ trạng thái cụ thể này

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ự

Trang 10

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

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ự “th an h ghi trạn g 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ạ n g 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ạn g th ái chuyển từ trạn g th á i hiện tạ i đến trạn g th á i k ế như đã được định nghĩa bởi mạch logic trạn g th ái kế

M e alyOutputs

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ử

Trang 11

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

dụng sẽ được th iêt k ế để không xảy ra trong thời gian hoạt động bình thường Thí dụ, máy trạn g 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 th iế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 Ngoà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 th iế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ìn h 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ìn h 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 toà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án h được hành vi không an toà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 quát, 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.

Trang 12

Thí dụ 8.4 trìn h 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ạn g th ái k ế kéo theo

Nếu mạch logic hiện tại và mạch logic trạn g 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ạn g 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

Các dạng này được trìn h bày ở bảng 8.2 cho 16 trạn g th á i và kèm theo phần mô tả

Số Tuần tự Gray Johnson Một bit 1

Thí dụ 8.6 trìn h bày máy trạn g 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 trin h 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

Tuân 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

Trang 13

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ạn g thái Johnson, nhiều flipflop hơn được cần đến và luôn luôn 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 th iế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 M ealy 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ìn h 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ìn h 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ìn h 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ạn g 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ìn h 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ạn g 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ễ

Trang 14

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ạn g 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ìn h bày ba cấu hình máy trạn g 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ìn h 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ạn g thái có điều khiển hai chiều trên mỗi máy trạn g th ái khác thường dùng

cho việc mô hình những mạch có yê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ạ n g th ái tương tác, trong đó mỗi máy trạn g thái có điều khiển hai chiều trê n hai máy khác Thí dụ 8.11 trìn h bày hai máy trạn g 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): th an h 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 đồ tran g thái ở hình 8.6

Hai mô hình VHDL sử dụng một biến trạn g 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 t e r cho các trạ n g th á i và do vậy số của trạn g thái được định nghĩa trong chính mô h ìn h

Trang 15

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

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

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

2.

Trang 16

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

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

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

Trang 17

C hươ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 o d u le FSMl_BAD(Clock, SlowRAM, Read, Write);

b e g inRead = 1;

Write = 0;

State = ST_Write;

e n dSTJWrite :

b e g inRead = 0;

Write = 1;

if (SlowRAM == 1)State = ST_Delay;

elseState = STJRead;

e n d ST_ Delay :

b e g inRead = 0;

Write = 0;

State = ST_Read;

e n d

en d ca se// 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,

Thí dụ 8.1: FSM1 được mô hình đúng (FSMl_GOOD) - VHDL

library IEEE;

use IEEE.STD_Logic_1164.all;

en tity FSMl_GOOD is _

Trang 18

I* 12 T h iế t k ế m ạ c h số với V H D L & V erilog

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

p ort ( Clock, Reset: in stdjogic;

SlowRAM: in stdjogic;

Read, Write: o u t std_logic);

e n d e n tity FSMl_GOOD;

a rch itectu re RTL o f FSMl_GOOD is

type StateType is (ST_Read, ST_Write, ST_Delay);

sig n a l CurrentState, NextState: StateType;

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;

Trang 19

C hương 8: Mô h ìn h m áy tr ạ n g th á i hữu h ạ n 13 m ® _ego

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

param eter [1:0] ST_Read = 0, ST_Write = 1, ST_ Delay = 2;

reg [1:0] C urrentstate, Nextstate;

alw ays @(posedge Clock)

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

Trang 20

H* 14

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_GOOD2 Kết hợp c s , NS OL tách biệt.

FSM2_GOOD3 Kết hợp NS, OL cs tách biệt.

FSM2_GOOD4 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

- range 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 e n tity FSM1_BAD;

arch itecture RTL o f FSM1 _BAD is

begin

-type StateType is (STO, ST l, ST2, ST3);

variable STATE: StateType := STO;

— 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 h en STO => Y <=

1-STATE := STl;

w h en STl => Y <=

Trang 21

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;

elseSTATE := ST3;

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;

if (Control)STATE = ST2;

elseSTATE = ST3;

e n dST2: b e g in Y = 3;

STATE = ST3;

e n dST3: b e g in Y = 4;

' STATE = ST0; _

Trang 22

H* 16

Thí dụ 8.2: FSM2 được m ô h ìn h s a i (FSM2_BAD) - V erilog (tiếp th eo)

arch itectu re RTL o f FSM2_GOỌDl is

typ e StateType is (STO, ST1, ST2, ST3);

sig n a l-CurrentState, Nextstate: StateType;

e lse NextState <= ST3;

w h en o th 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)

Trang 23

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

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ỉse ct

Đượ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

m odule 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 C urrentstate)

// 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,

N extstate = ST3;

end ST3: begin

NextState = ST0;

end endcase

end

// Mạch logic trạng thái hiện tại.

Trang 24

¡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 erilo g (tiếp theo) _

alw ays @(posedge Clock o r p o sed g e Reset)

// Mạch logic ngõ ra Y là ngõ ra loại Moore 3-bit.

alw ays ©(CurrentState)

begin: OUTJLOGIC

ca se (CurrentState)

STO: Y = 1;

ST1: Y = 2, ST2: Y = 3;

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 ro cess (Clock, Reset)

; else'

Trang 25

Chương 8: Mô h ìn h m áy tr ạ n g th á i hữu h ạ n - 19 IM ]®

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

- 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 arch itectu re 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ạn g thái k ế và trạng thái hiện tại

alw ays ©(posedge Clock or posedge Reset)

ST1: if (Control)

STATE = ST2;

e lse STATE = ST3;

Trang 26

Thí dụ 8.2: FSM2_GOOD2 - V erilog (tiếp th eo) _

// d e fa u lt được cần đến, cho dù mọi điều kiện đều được bao gồm

// Điều này là do c a se ở trong khối a lw a y s tổ hờp, trá n h được việc // suy ra mạch chốt,

Trang 27

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

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

end process COMB;

- Mạch logic trạng thái hiện tại

SEQ: process (Clock, Reset)

m odule FSM2_GOOD3 (Clock, Reset, Control, Y);

input Clock, Reset, Control;

Trang 28

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

Thí dụ 8.2: FSM2_GOOD3 - Verilog (tiếp theo)

Y = 2;

i f (Control) NextState = ST2;

e lse NextState = ST3;

end ST2: b eg in

Y = 3;

NextState = ST3;

en d ST3: b eg in

Y = 4;

NextState = STO;

en d default: b eg in

// Mạch logic trạng thái hiện tại.

alw ays @(posedge Clock or p o sed g e Reset)

end e n tity FSM2_GOOD4;

arch itectu re RTL o f FSM2_GOOD4 is

begin

- Mạch logic trạng thái hiện tại, trạng thái kế và ngõ ra

ALLJN.1:

p ro cess (Clock, Reset)

typ e StateType is (STO, ST1, ST2, ST3);

va ria b le State: StateType; _

Trang 29

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

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

- State có thể là biến do: 1) Có một giá trị trạng thái duy nhất được cập nhật

~ ở cạnh tăng của xung clock 2) State hoàn toàn được sử dụng bên trong một

else State := ST3;

Thí dụ 8.3 FSM có các giá trị ngõ vào hoặc trạng thái làm chỉ dẫn rẽ nhánh

Máy trang thái tương ứng với giản đồ trạng thái ở hình 8.10 được mô hình theo hai cách Giản đồ trạng thái biểu diễn mạch điều khiển tốc độ xe ô tô.

Accelerate, brake Accelerate Brake

Stop - default state when keys = 0

Hình 8.10: Giản đồ trạng thái của mạch điều khiển tốc độ xe ô tô

Trang 30

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

Những phiên bản mô hình thứ nhất sử dụng các ngõ vào Brake và Accelerate trong một chỉ dẫn rẽ nhánh if hai đường và kế đến, sử dụng phát biểu ca se trong cả hai nhánh để gán giá trị trạng thái mới Đối với máy trạng thái cụ thể này, các tốc độ tăng hay giảm có thể được nhận biết một cách rõ ràng bởi hai phát biểu case Những phiên bản mô hình thứ hai trình bày phương pháp phổ biến hơn sử dụng giá trị trạng thái làm chỉ dẫn rẽ nhánh sơ cấp.

Thí dụ 8.3: FSM có các ngõ vào và g iá trị trạn g th á i làm c h ỉ d ẫn rẽ n h á n h - VHDL

library IEEE;

u se IEEE.STD_Logic_1164.all, IEEE_Numeric_STD.all;

e n tity FSM_CAR_SPEED_CNTL_1 is

port ( Clock, Keys, Brake, Accelerate: in std_logic;

Speed: out unsigned(l dow nto 0));

= “00”;

= “01”;

= “10” ;

= “11” ;

FSM1: p ro cess (Clock, Keys)

variable speed_v: unsignedd dow nto 0);

w h en Stop => Speed_v := Slow;

w h en Slow => Speedjv := Medium;

w h en Medium => Speed_v := Fast;

w hen Medium => Speed_v := Slow;

w h en Fast => Speed_v := Medium;

speed_v := Stop;

Trang 31

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

Thí dụ 8.3: FSM có các ngõ vào và g iá trị trạng thái làm chỉ dẫn rẽ nhánh - Veriiog

m o d u le FSM_CAR_SPEED_CNTL_1

(Clock, Keys, Brake, Accelerate, Speed);

in p u t Clock, Keys, Brake, Accelerate;

o u tp u t [1:0] Speed;

re g [1:0] speed;

p a r a m e te r Stop = 2’b 00,

Slow = 2’b 01,Medium = 2’b 10,Fast = 2’b 11;

a lw ay s @(posedge Clock o r n eg ed g e keys)

Slow: Speed = Medium;

Medium: Speed = Fast;

Fast: Speed = Fast;

e n d c a se else if (Brake)

case (Speed)Stop: Speed = Stop;

Slow: Speed = Stop;

Medium: Speed = Slow;

Fast: Speed = Medium;

e n d c a seelse

Trang 32

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

Thí dụ 8.3: Giá trị trạn g th á i làm ch ỉ d ẫn rẽ n h á n h - VHDL (tỉêp theo)

e lse NextSpeed <= Stop;

e n d if;

w h en Slow =>

i f (Brake = ‘1’) th en NextSpeed <= Stop;

e ls if (Accelerate = ‘1’) th en NextSpeed <= Medium;

e lse NextSpeed <= Slow;

e n d if;

w h e n Medium =>

i f (Brake =s ‘1’) th en NextSpeed <= Slow;

e ls if (Accelerate = ‘1’) th en NextSpeed <= Fast;

e ls e NẹxtSpeed <= Medium;

e n d if;

w h e n Fast =>

i f (Brake = ‘1’) th en NextSpeed <= Medium;

e ls e NextSpeed <= Fast;

Trang 33

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

Thí dụ 8.3: Giá trị trạng thái làm chỉ dẫn rẽ nhánh - Verilog

m odule FSM_CAR_SPEED_CNTL_2

(Clock, Keys, Brake, Accelerate, Speed);

input Clock, Keys, Brake, Accelerate;

output [1:0] Speed;

reg [1:0] Speed, NewSpeed;

param eter Stop = 2’b 00,

Slow = 2’b 01,Medium = 2’b 10,Fast = 2’b 11;

alw ays @(Keys or Brake or Accelerate or Speed);

Trang 34

Thí dụ 8.4 Các cấ u hìn h r e s e t củ a FSM

Để giải thích các phương pháp khác nhau m à ở đó reset có th ể được mô h ìn h đối với m áy trạng thái

hữu hạn, chỉ có phát biểu p ro cess/a lw a y s được bao gồm Các phần của chương trìn h là của máy trạng

thái được sử dụng ở th í dụ 8.8 và giản đồ trạ n g th á i đã được chỉ ra ở hình 8.2 Hai phần đầu tiên của chương trình dành cho reset không dồng bộ và ba- phần sau cùng dành cho reset đồng bộ

FSM2: p ro cess (Clock, A, Hold)

va ria b le State: StateType;

Trang 35

Chương 8: Mô h ìn h m áy trạ n g th á i hữu h ạ n 29 ỊẶÃ]<a

Thí dụ 8.4: Hai cách thực hiện reset không đồng bộ - VHDL (tiếp theo)

Y_Me <= ‘0’;

e n d if;

e n d case;

e n d p ro c e ss FSM2;

Thí dụ 8.4: Hai cách thực hiện reset không đổng bộ - Verilog

alw ay s @(A o r Hold)

alw ay s @(posedge Clock o r po sed g e Reset)

b eg in : FSM1_SEQ // reset không đồng bộ

Trang 36

ỊMỊ® 30 T h iế t k ế m ạch số với V H D L & V erịlog

Thí dụ 8.4: H ai cách thực h iệ n r e se t kh ô n g đổng bộ - V erilog (tiếp th eo )

Y_M o = 0;

if(A ) Y_Me = 1;

else Y_Me = 0;

end endcase

- Reset được định nghĩa bằng hệ tổ hợp

i f (Reset = ‘0’) then NextState <= STổ;

e lse

Trang 37

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

Thí dụ 3.4: Ba cách thực h iện reset đồng bộ - VHDL (tiếp theo)

Y_Me <= ‘O’;

e n d if;

e n d case;

e n d p ro c e ss FSM5; _ _ _

Thí dụ 8.4: Ba cách thực hiện reset đổng bộ - Verilog

a lw ay s @(A o r Hold o r State)

Trang 38

ịHỊ® 32 T h iế t k ế m ạ c h số với V H D L & V erilog

e n d c a s e

Trang 39

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

Thí dụ 8.4: Ba cách thực h iện reset đồng bộ - Verilog (tiếp theo)

e n d

Thí dụ 8.5 FSM vị trí góc sử dụng mã hóa trạng thái Gray và Johnson

Giản đồ trạng thái cửa máy trạng thái thí dụ này được trình bày ở hình 8.11, có 8 trạng thái Các

trạng thái này dược mã hóa bằng cách sử dụng mã hóa trạng thái Gray hoặc Johnson và biểu diễn vị trí góc mong muôn của phần quay (rotor) với khoảng tăng 45° Các chuyển trạng thái xảy ra từ trạng thái biện tại đến trạng thái liền kề, biểu diễn độ dịch 45° của phần quay theo chiều kim đồng hồ hoặc ngược chiều kim đồng hồ

Hình 8.11: PSM vị trí góc

Do các lực bên ngoài có thể di chuyển phần quay từ vị trí mong muôn, ngõ vào PhysicalPosition có thể thay đổi và không đồng bộ với xung clock Với lý do này, mã hóa trạng thái Gray hoặc Johnson là hợp lý nếu ngõ vào không đồng bộ thay đổi trong thời gian thiết lập của các flipflop th an h ghi trạng thái, sự thay đổi này sẽ không gây ra trạng thái giả ổn định và do vậy, không có rủi ro trong việc chuyển trạng thái của máy trạng thái đến trạng thái không đúng Với các dạng mã hóa trạng thái khác,

có rủi ro nhỏ nhưng hữu hạn là sự di chuyển của phần quay 180° có thể được cần đến trong một chu kỳ

Trang 40

xung clock Mã hóa trạng th ái nhận được khác nhau trorig các mô h ình VHDL và Verilog, được mô tả riêng rẽ dưới đây Ta không có mạch logic ngõ ra, do giá trị trạ n g th ái cũng biểu diễn chính vị trí góc

Mô hình VHDL Có hai phương pháp để chỉ rõ mã hóa trạn g thái.

• 1 Sử dụng tín hiệu (signal) có kiểu liệt kê mà đối với tín hiệu này, một thuộc tín h cụ th ể của

phần mềm tổng hợp được áp dụng Đây là phương pháp thuận lợi để chỉ ra m ã hóa trạn g thái, nhưng do tên của thuộc tín h là cụ th ể đối với công cụ tổng hợp, tên này cần được thay đổi để phù hợp với các công cụ khác P a c k a g e thứ n h ấ t ENUM_STATE_ENCOĐE_TYPES định nghĩa hai loại mã hóa trạn g th ái kiểu liệt kê, một cho m ã hóa Gray và m ột cho mã hóa Johnson Thuộc tín h này được gọi là ẺNUM TYPE_ENCODING trong công cụ tổng hợp VeriBest, nhưng có th ể sẽ khác đối với các công cụ tổng hợp khác

2 Sử dụng hằng (constant) để biểu diễn các giá trị trạ n g th á i riêng biệt; những hằn g này được gán cho một tín hiệu (signal) biểu diễn trạ n g th á i cụ th ể và phù họp trực tiếp với công cụ tổng hợp khác Mô hình này trìn h bày hai p a c k a g e cho hai phương pháp m ã hóa E n tity -

a r c h ite c tu r e của máy trạ n g th ái là giống nhaủ đối với h ai phương pháp m ã hóa trạn g thái này, ngoại trừ m ệnh đề u s e tham chiếu p a c k a g e thích hợp P a c k a g e thứ h ai trìn h bày định nghĩa kiểu unsigned cho giá trị trạn g th á i Gray yà Johnson và các hằng trạ n g th á i riêng biệt Máy trạn g th á i được mô hin h bằng cách sử dụng một p r o c e s s tương tự như mô h ình sau cùng trong th í dụ 8.2 (FSM2_GOOD4) Ngõ vào PhysicalPosition và ngõ ra NewPosition sẽ có kiểu GRAY_POS_EncodeStates hoặc JỌHNSON_POS_EncodeStates phụ thuộc vào phương pháp

m ã hóa trạn g th ái và là thay đổi duy n h ấ t được cần đến

Thí dụ 8.5: Các định n g h ĩa m ã h óa trạ n g th á i ch o FSM v ị tr í góc - VHDL

-u se IEEË.STD_Logic_1164.all, lEEE_N-umerie_STD.all;

package CONTS_GRAY_STATE_ENCODE_TYPE is

co n sta n t Ang_0; unsigned(3 dow nto 0) := “0010”;

co n sta n t Ang_45: unsigned! 3 dow n to 0) := “0110”;

co n sta n t Ang_90: unsigned(3 d ow n to 0) ■:= “0111”;

con stan t Ang_135 unsigned(3 dow n to 0) := “0101”;

co n sta n t Ang_lSO unsigned(3 dow nto 0) := “0100”;

co n sta n t Ang_225 unsigned! 3 dow nto 0) := “1100”;

co n sta n t Ang_270 unsigned(3 dow nto O) := “1101”;

co n sta n t Ang_315 unsigned(3 dow nto 0) := “1111”;

en d pack age CONTS_GRAÝ_STATE_ENCODE_TYPE;

library IEEE;

u se IEEE.STD_Logic_1164.all, IEEE_Numeric_STD.all;

package CONTS_JOHN_STATE_ENCODE_TYPE is

constant Ang_0: unsigned(3 dow nto 0) := “0000”;

constant Ang_45: unsigned(3 dow nto 0) := “0001”;

con stant Ang_90: unsigned(3 dow nto 0) := “0011”;

con stan t Ang_135 unsigned(3 dow nto 0) := “0111”;

con stan t Ang_180 unsigned(3 dow nto 0) := “1111”; ■

con stan t Ang_225 unsigned(3 dow nto 0) := “1110”;

con stan t Ang_270 unsigned(3 dow nto 0) := “1100”;

constant Ang_315 unsigned(3 dow nto 0) := “1000”;

end package CONTS_JOHN _STATE_ENCODE_TYPE;

package ENUM_STATE_ENCODE_TYPES is

attribute E N U M _T Y PE _E N C O D IN G : str in g ;

type GRAY_POS_EncodeStates is ■

Ngày đăng: 17/02/2021, 09:32

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w