24小時聯系電話:18217114652、13661815404
中文
行業資訊
有限狀態機的初始狀態與內存辯論
狀態機有幾種編碼,最流行的是二進制,格雷和一鍵編碼。對于人類而言,選擇使用哪種編碼是一項艱巨的任務。這就是為什么最好讓編譯器為您選擇此項。
設計中的FSM
現在,您可以使用上述技術來設計Mealy和Moore狀態機,一旦掌握了這些技巧,就很有趣,也很有趣。
但是,除了學校的項目外,您真的 需要多久使用一種狀態機,該狀態機具有我們剛剛設計的那種任意行為?幾乎總是!乍一看可能并不明顯,但是您可以采用自頂向下的方法將系統描述為一系列狀態。此序列可以繪制為狀態圖,也可以記錄為狀態表。獲得該表示后,您就可以自由編寫HDL代碼。
注意,在我們的示例中,您可能會或可能不會最終使用諸如y之類的輸出變量,這很好,因為許多狀態機僅指示系統的行為,并且這種行為可以在專用狀態下編寫。
初始狀態如何?
自傳統邏輯集成電路(例如74LSXX TTL和40XX CMOS芯片)問世以來,設置初始狀態一直是一個棘手的挑戰。那時,您依靠 觸發器的“預設” 和“清除”輸入,這些輸入與某些上電復位信號相關聯,因此在上電時始終會設置所需的初始狀態。
現在,對于FPGA,是否應在系統中使用復位輸入信號來充當此類上電復位信號一直存在爭議。帶有重置輸入的我們的Verilog示例如下所示:
module MyFSM(
input
clk,
input
reset,
input
x,
output
y);
reg [1:0] state;
assign y =
state[1]&state[0]&x;
always @ (negedge
clk)
if
(reset)
state
<= 2’b00; // ...or the initial state you want.
else
case (state)
2'b00:
state <= x?2'b01:2'b00;
2'b01:
state <= x?2'b10:2'b00;
2'b10:
state <= x?2'b11:2'b00;
2'b11:
state <= 2'b00;
endcase
endmodule
之所以引起爭議,是因為以下事實:大多數(但不是全部)FPGA將其配置存儲器實現為易失性的靜態RAM(更好地稱為SRAM),并且使用外部非易失性存儲設備以強大的功率將配置復制到FPGA中-在啟動過程中。此啟動過程通常使Verilog初始 塊可合成!
這意味著,當您具有某種語言的初始化方法時,可能不需要復位輸入信號即可初始化變量。使用原始的Verilog示例,只需要一行代碼:
initial state <= 2’b00; //
...或您想要的初始狀態。
但是,并非所有的FPGA都將其內部配置存儲器實現為SRAM。一些FPGA(如Lattice
MachXO2系列)具有內部非易失性配置存儲器,因此無需啟動任何東西,從而使初始 塊不可用于合成,僅對初始化測試平臺模塊有效。
通常,初始塊無法合成的主要原因是Verilog用于許多目標技術,包括ASIC(沒有啟動序列)。無論如何,您應該始終考慮遵循FPGA制造商的建議。是否使用復位輸入,或者如果您決定偏離,至少找到一個很好的理由。
軟處理器中的FSM
您可能知道,所有CPU的控制邏輯在某處都有一個狀態機。狀態可能具有描述性名稱,例如“獲取”,“解碼”,“執行”和“回寫”,或者可以簡單地將其視為執行周期,例如周期1,周期2等。關鍵是,CPU內核是Verilog中FSM令人驚訝的易于實現的應用程序。
如果您希望使用本文中介紹的技術在Verilog中實現軟處理器的實現。
首先,用Verilog編寫FSM似乎令人生畏,但是如果讓綜合工具通過將代碼作為案例語句輸入來幫助您,則可以輕松啟動并運行應用程序。