在FSM模型中使用两态数据类型
在FSM模型中使用兩態數據類型
1、使用兩態類型和枚舉類型對FSM復位
在仿真剛開始時,四態數據類型的值是邏輯X。類似有限狀態機這樣的模型中,四態變量的X邏輯值可以用來表示模型還沒有復位,或復位邏輯的建模不正確。
仿真剛開始時,兩態數據類型的缺省值是0而不是X。因為復位操作通常是將大部分變量清0,所以這樣一來即使復位邏輯有缺陷,模型好像仍然是被復位了。
仿真開始時,枚舉類型使用枚舉類型的基類值作為缺省值。如果狀態變量用默認基類和標簽值定義并且復位操作也是將枚舉值置為表中的第一個值,那么就會出現和兩態變量類似的情況。默認基類是int,它是仿真時具有非初始值0。枚舉列表中第一個標簽的默認值是0,這與兩態基類的非初始值相同。這樣即使沒有插入復位,或復位邏輯有錯誤,設計好像仍然是復位了。
使用復位邏輯也不能解決這個狀態鎖定問題。因為復位會將State置為WAITE值,這仍然與開始仿真時的值一樣。因此變量State還是沒有變化,次態譯碼邏輯還是不能觸發,Next仍然會保持起始值WAITE.
這種在仿真開始時出現的狀態鎖定問題可以通過兩種方法解決。
第一種方法是用四態基類如logic顯示聲明枚舉變量。然后仿真開始時State和Next會具有非初始值X。這清楚地表明了這些變量已經被復位了。它也準確反映了硬件特性,即觸發器加電后處于一種中間狀態。在RTL仿真中,當應用復位時,State變量將從X轉變為它的復位值WAITE。這一轉變將觸發對Next譯碼以及將Next置為合適值LOAD的邏輯。
第二種解決使用默認基類和標簽值的枚舉類型時產生的FSM鎖定問題的方法是用SystemVerilog是always_comb過程塊代替always@(State)。即使其相關敏感表的變量沒有變化,在仿真零時刻,always_comb過程塊也會自動執行一次。通過在零時刻執行一次。通過在零時刻執行譯碼邏輯,初始State值將被譯碼,然后變量Next隨之相應改變。
總結
以上是生活随笔為你收集整理的在FSM模型中使用两态数据类型的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 房屋贷款还完后还需要办什么手续
- 下一篇: 微信转账退回对方会收到提示吗?