thiet ke may fsm

15
Đại Học Quốc Gia TPHCM Trung tâm Nghiên cứu và Đào tạo Thiết kế Vi mạch ] Thiết kế vi mạch số Phân tích và mô tả thiết kế Thiết kế máy trạng thái (FSM... Phân tích và mô tả thiết kế Trong thiết kế số, Máy trạng thái (viết tắt là FSM) là một thành phần quan trọng và không thể thiếu đối với các thiết kế phức tạp. Lợi điểm của máy trạng thái là giúp người thiết kế dễ dàng kiểm soát quy trình hoạt động của một thiết kế. Để thực hiện tốt một máy trạng thái chúng ta phải hiểu được bản chất của nó. Với mong muốn giúp các bạn hiểu thêm về vấn đề này, mình xin trình bày một loạt bài nhỏ đi từ sách vở đến những phân tích riêng của mình. Máy trạng thái (FSM) là một mạch tuần tự: Bây giờ hãy xem FSM như một khối riêng biệt có ngõ vào và ngõ ra. Ngõ vào của FSM là gì? Xung nhịp (clock) đồng bộ Tín hiệu reset để khởi động FSM vào trạng thái ban đầu trước khi hoạt động

Upload: leduydaovt

Post on 30-Oct-2014

133 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: Thiet Ke May Fsm

Đại Học Quốc Gia TPHCM Trung tâm Nghiên cứu và Đào tạo Thiết kế Vi mạch

  ]

Thiết kế vi mạch số   Phân tích và mô tả thiết kế   Thiết kế máy trạng thái (FSM...

Phân tích và mô tả thiết kế

Trong thiết kế số, Máy trạng thái (viết tắt là FSM) là một thành phần quan trọng và không thể thiếu đối với các thiết kế phức tạp. Lợi điểm của máy trạng thái là giúp người thiết kế dễ dàng kiểm soát quy trình hoạt động của một thiết kế.

Để thực hiện tốt một máy trạng thái chúng ta phải hiểu được bản chất của nó. Với mong muốn giúp các bạn hiểu thêm về vấn đề này, mình xin trình bày một loạt bài nhỏ đi từ sách vở đến những phân tích riêng của mình.

Máy trạng thái (FSM) là một mạch tuần tự: Bây giờ hãy xem FSM như một khối riêng biệt có ngõ vào và ngõ ra.

 

Ngõ vào của FSM là gì?

Xung nhịp (clock) đồng bộ Tín hiệu reset để khởi động FSM vào trạng thái ban đầu trước khi hoạt động Các tín hiệu dùng để xác định việc chuyển trạng thái và các tín hiệu này có thể

tham gia xác định giá trị ngõ ra.

Ngõ ra của FSM là gì? Là một hoặc nhiều tín hiệu thay đổi giá trị dựa trên hoạt động của FSM. Ngõ ra FSM dùng để điều khiển một mạch số khác hay làm ngõ ra của một thiết kế; có thể được đồng bộ lại qua các Flip-Flop hoặc không là tùy vào mục đích thiết kế.

Cấu trúc FSM?

Page 2: Thiet Ke May Fsm

Cấu trúc cơ bản của một máy trạng thái gồm ba thành phần là Mạch tổ hợp xác định trạng thái kế tiếp (next state), Mạch tổ hợp xác định giá trị ngõ ra và một thanh ghi (register) lưu giữ trạng thái hiện tại (current state). Dù là Mealy hay Moore thì cấu trúc FSM cũng gồm 3 phần như vậy thôi (bạn nên lưu ý điều này vì nắm rõ điều này sẽ giúp bạn dễ dàng hiểu, thiết kế và viết code cho FSM sau này vì để viết code thực hiện cùng một FSM bạn có thể trình bày nhiều cách khi bạn đã thấm kỹ cái này).

Qua đây bạn đã thấy rõ tại sao FSM là một mạch tuần tự (mạch tuần tự = mạch tổ hợp + phần tử nhớ).

Về: Thiết kế máy trạng thái (FSM – Finite State Machine) – ...Đăng bởi phi_thien_dao lúc Chủ nhật, 04/03/2012 - 20:42.

Máy trạng thái Mealy: Với FSM Mealy, ngõ ra phụ thuộc vào trạng thái hiện tại và giá trị ngõ vào. Nghĩa là, ngõ ra FSM thay đổi khi trạng thái của FSM thay đổi hoặc giá trị ngõ vào thay đổi. Và các bạn thường thấy hình minh họa sau cho FSM Mealy

Page 3: Thiet Ke May Fsm

 

Thực chất mạch tổ hợp (combinational logic) ở đây là tổng hợp của Mạch tổ hợp xác định trạng thái kế tiếp và Mạch tổ hợp xác định giá trị ngõ ra như đã nói trong phần trên.

Còn thành phần bộ nhớ (memory elements) chính là cái thanh ghi lưu giữ trạng thái hiện tại.

Máy trạng thái Moore: Với FSM Moore, ngõ ra chỉ phụ thuộc vào trạng thái hiện tại. Nghĩa là, ngõ ra FSM chỉ thay đổi khi trạng thái của FSM thay đổi. Vì ngõ ra “chẳng liên quan” gì đến ngõ vào cả nên chúng ta thường thấy hình mình họa như sau:

Page 4: Thiet Ke May Fsm

 

Hai mạch combinational logic riêng biệt, một dành cho xác định trạng thái kế tiếp, một dành cho xác định giá trị ngõ ra.

Vậy một máy trạng thái chỉ có thể là thuần kiểu Moore hoặc Mealy? Không hẳn như vậy. Một máy trạng thái phức tạp có nhiều ngõ ra. Trong các ngõ ra đó, có ngõ ra chỉ phụ thuộc vào trạng thái hiện tại (Moore) nhưng cũng có ngõ ra vừa phụ thuộc trạng thái hiện tại và vừa phụ thuộc ngõ vào (Mealy). Đấy là tùy vào mục đích thiết kế của bạn. Máy trạng thái này tạm gọi là "kiểu hỗn hợp" được minh họa như sau

Qua phần 1 chúng ta đã chú ý các điểm sau:

Page 5: Thiet Ke May Fsm

Máy trạng thái là mạch tuần tự. Máy trạng thái gồm 3 thành phần. Có ba kiểu máy trạng thái là Kiểu Moore, Mealy và kết hợp cả hai.

Để minh họa việc thực hiện máy trạng thái chúng ta hãy thực hiện ví dụ sau đây:  Thiết kế bộ phát hiện chuỗi bit 1011 (có thể bạn đã gặp đề bài này ở đâu đó).

Như vậy ta phải thiết kế một máy trạng thái có các ngõ vào/ra như sau

 

Trong đó:

clock: là xung nhịp đồng bộ của FSM. reset_n: là tín hiệu reset FSM sau khi mới bật nguồn để FSM vào trạng thái khởi

động. Reset đồng bộ tích cực mức thấp. serial_input: ngõ vào của chuỗi bit dữ liệu. y: ngõ ra của bộ phát hiện (ngõ ra FSM). Trạng thái mặc định của y là “0” và y sẽ

bằng “1” nếu chuỗi 1011 xuất hiện.

Bây giờ ta bắt đầu với kiểu Moore

Đầu tiên chúng ta phải xác định chuỗi trạng thái cơ bản để có thể phát hiện được chuỗi bit 1011.

 

Trong đó:

Page 6: Thiet Ke May Fsm

IDLE là trạng thái khởi động khi tín hiệu reset_n tích cực (= 0) thì máy trạng thái sẽ về IDLE.

D1 là trạng thái đã phát hiện được bit 1. Nghĩa là tại IDLE, nếu serial_input bằng 1 thì sẽ nhảy qua trạng thái này.

D10 là trạng đã phát hiện được bit 0 sau khi đã phát hiện bit 1, tức là trạng thái đã nhận được chuỗi 10.

D101 là trạng thái đã phát hiện được bit 1 sau khi đã phát hiện được chuỗi 10. D1011 là trạng thái đã phát hiện được bit 1 sau khi đã phát hiện được chuỗi 101.

Đây chính là trạng thái phát hiện được đầy đủ chuỗi 1011. Chính trạng thái này ta sẽ cho giá trị ngõ ra y = 1.

Vì đây là kiểu moore, nên giá trị y nằm ngay trong từng trạng thái như sau

 

Sau đây ta bắt đầu xét điều kiện còn lại trong từng trạng thái:

1. Tại IDLE: Nếu serial_input không bằng 1 thì máy trạng thái sẽ nhảy đi đâu? Câu trả lời là sẽ vẫn giữ ở IDLE, dễ quá đúng không.

2. Tại D1: Nếu serial_input không bằng 0 thì máy trạng thái sẽ nhảy đi đâu? Câu trả lời là sẽ về lại IDLE thì là sai bét rồi. Chính xác thì FSM vẫn giữ ở D1. Nên nhớ rằng D1 là trạng thái đã phát hiện được bit 1. Nếu bạn ở D1 mà nhận phát hiện thêm một bit 1 nữa lúc này bạn có chuỗi 11, bạn nghĩ sẽ không thể tạo được chuỗi 1011 nên cho về IDLE là sai luôn. Vì bit 1 phía sau (thứ 2) có khả năng là bắt đầu của một chuỗi 1011 nên ở D1 nếu nhận được thêm một bit 1 thì vẫn ở D1 đúng như ý nghĩa “D1 là trạng thái đã phát hiện được bit 1”.

3. Tại D10: Tiếp tục với cấu hỏi “Nếu serial_input không bằng 1 thì máy trạng thái sẽ nhảy đi đâu?” Câu trả lời là về IDLE. Khi đã đến D1 và nhận thêm một bit 0 thì bạn vừa có chuỗi 100, không có khả năng tạo được 1011 thì chỉ có quay lại IDLE mà thôi.

4. Tại D101: Nếu nhận được một bit 0 thì FSM sẽ nhảy về D10. Tại sao? Nếu ở D101 bạn nhận thêm một bit 0 thì bạn có chuỗi 1010, đây dĩ nhiên không phải chuỗi mong muốn của bạn nhưng hãy để ý hai bit cuối của chuỗi này là 10, tức là có khả năng bạn sẽ nhận tiếp được 11 nữa để có 1011, như vậy FSM phải về D10 đúng như ý nghĩa của nó là “trạng thái đã nhận được chuỗi bit 10”

5. Tại D1011: Đây là trạng thái kết thúc và một chuỗi 1011 vừa được phát hiện. Vì đây là trạng thái kết thúc cho một quá trình phát hiện chuỗi 1011 nên về IDLE

Page 7: Thiet Ke May Fsm

nghỉ ngơi cho khỏe chờ chuỗi mới thôi, nếu bạn nghĩ vậy thì ôi xong. Ở đây ta phải trả lời hai câu hỏi:

Một: nếu “Nếu serial_input bằng 1 thì máy trạng thái sẽ nhảy đi đâu?” trả lời: về D1

Hai: nếu “Nếu serial_input bằng 0 thì máy trạng thái sẽ nhảy đi đâu?” trả lời: về D10

Cuối cùng ta có một máy trạng thái như sau:

 

Thường ta chỉ cần ghi điều kiện trên một nhánh và ngầm hiểu là “nếu không thỏa điều kiện nhánh này thì FSM sẽ nhảy theo nhánh còn lại” nên ta có:

Page 8: Thiet Ke May Fsm

Như vậy là ta đã thiết kế xong FSM kiểu moore dùng để phát hiện chuỗi bit 1011. Cuối cùng, bạn hãy bắt tay viết RTL code cho FSM này.

Sau đây chúng ta bắt đầu coding cho máy trạng thái trong ví dụ ở phần 2.

 

Có nhiều cách viết để thực hiện chức năng của FSM này. Sau đây xin đi từ cách cơ bản nhất. Như ở phần 1 chúng ta đã biết FSM có ba phần vì vậy ta cứ viết 3 đoạn code tương ứng với 3 phần là có ngay một FSM hoàn chỉnh (xem hình sau)

 

Ta sẽ bắt đầu từ trái qua phải nhé, tương ứng với 1->2->3 trên hình vẽ.

Page 9: Thiet Ke May Fsm
Page 10: Thiet Ke May Fsm

Qua những phần trước, chúng ta đã thực hiện "bộ phát hiện chuỗi 1011" với FSM kiểu Moore. Nếu ta thực hiện với kiểu Mealy thì sao, kết quả có điểm gì khác biệt?

Đây là FSM cho của "bộ phát hiện chuỗi 1011" theo kiểu Mealy

Page 11: Thiet Ke May Fsm

Với kiểu Mealy ta chỉ cần 4 trạng thái (kiểu moore cần 4 trạng thái như đã phân tích trước đây) và ngõ ra y lúc này sẽ tích cực khi FSM đang ở trạng thái D101 và phát hiện thấy bit 1 ở ngõ vào.

RTL code cho máy trạng thái này như sau:

Page 12: Thiet Ke May Fsm
Page 13: Thiet Ke May Fsm