2014-10-28 20 views
7

Dường như có một số tranh luận về cách viết mã các máy trạng thái hữu hạn (FSM) trong VHDL. Mọi người nói về FSM 1 quy trình, 2 quy trình hoặc 3 quy trình như thể mọi người đều biết chính xác ý nghĩa của nó và mỗi quy trình thực hiện. Tuy nhiên, tôi đã không thể tìm thấy một định nghĩa chính xác, và các ví dụ tồn tại dường như mâu thuẫn.Quy trình 1, 2 hoặc 3 có nghĩa là gì đối với FSM trong VHDL?

Đây là câu hỏi khách quan: Sự khác nhau về mặt mã cho từng kiểu FSM (1 quy trình, 2 quy trình, 3 quy trình) là gì? Tôi hiểu rằng có một thành phần của sở thích cá nhân, nhưng chắc chắn nó có thể trả lời câu hỏi một cách khách quan và liệt kê những ưu điểm của từng cách tiếp cận.

Cảm ơn,

+2

Tệp XST PDF từ Xilinx hiển thị các ví dụ về các quy trình FSM 1,2 và 3 (kỳ lạ chỉ đủ một trong hai biến thể của quy trình 2). Đó là một phần vấn đề Mealy-Moore và sở thích cá nhân phần lớn hoặc học tập rote. Những người có cúi đầu phân tích có thể chú ý đến các tác động của các yếu tố có trong danh sách độ nhạy. – user1155120

+0

@DavidKoontz Biến thể thứ 2 của FSM 2 quy trình là gì? Một quy trình cho sổ đăng ký tiểu bang và một quy trình khác cho mọi thứ khác? – rick

+0

Các XST pdf là một tài liệu tham khảo tốt đẹp, cảm ơn bạn. Bạn có thể tìm thấy @DavidKoontz –

Trả lời

1

Tôi cố gắng trả lời còn nếu thật khó bởi vì tất cả các mã người như thế nào anh thích và chức năng của tình trạng mà các phần cứng phải làm việc (tần số, con đường bên ngoài, ...).

Trong một máy nhà nước bạn có một số yếu tố:

  • đầu vào
  • đầu ra
  • hiện trạng
  • trạng thái tiếp theo

trạng thái kế tiếp phụ thuộc từ trạng thái hiện tại và đầu vào. Để không có vòng lặp kết hợp, bạn cần phải lấy mẫu trạng thái tiếp theo trong trường hợp tín hiệu đồng hồ để nó trở thành trạng thái hiện tại. Vì vậy, bạn cần một quá trình VHDL để tạo flip-flop cho nhà nước. Trong quá trình này, bạn có thể đặt tất cả logic mà bạn cần để tính toán trạng thái tiếp theo. Nếu kết quả đầu ra của bạn chỉ phụ thuộc vào trạng thái bạn không cần quá trình khác.

Tôi không thích đặt cùng một quy trình phối hợp logic khi logic không phải là rất dễ dàng (tôi thích như vậy, nhưng nó không bắt buộc!) Vì vậy, thông thường tôi chia FSM trong hai quá trình: đầu tiên rất dễ dàng quá trình lấy mẫu trạng thái tiếp theo để có trạng thái hiện tại, và một quá trình kết hợp mà tôi tính tất cả các đầu ra và trạng thái tiếp theo là hàm của các đầu vào và trạng thái hiện tại. Trong trường hợp tương tự, các đầu ra cần phải được lấy mẫu: ví dụ, khi có vấn đề về tần suất, bạn cần tách các đường dẫn bên trong ra khỏi các đường bên ngoài, hoặc khi các đầu ra có tải trọng lớn. Trong trường hợp này, bạn có thể thêm tất cả các flip-flops cần thiết trong quá trình đầu tiên, nơi bạn lấy mẫu trạng thái tiếp theo hoặc tạo một hoặc nhiều quy trình chuyên dụng. Nhưng bạn cũng có thể có nhiều biến thể như số lượng quá trình: Tôi đã làm việc trong một mã, trong đó mỗi tín hiệu được tính toán trong một quá trình chuyên dụng để máy trạng thái kết quả có quá trình 20/30.

Các vấn đề liên quan