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 1THIẾ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 3Lờ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 4T 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 6IV 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 7cụ 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 8T 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 9Chươ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 104 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 11Chươ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 12Thí 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 13Chươ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 14T 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 15Chươ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 16E 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 17C 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 18I* 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 19C 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 20H* 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 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 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 212-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 22H* 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 23Chươ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 25Chươ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 26Thí 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 27Chươ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 2822 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 29Chươ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 3024 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 31Chươ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 32T 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 3327 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 34Thí 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 35Chươ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 37Chươ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 39Chươ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 40xung 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 ■