日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

在FSM模型中使用两态数据类型

發布時間:2023/12/15 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 在FSM模型中使用两态数据类型 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在FSM模型中使用兩態數據類型

1、使用兩態類型和枚舉類型對FSM復位
在仿真剛開始時,四態數據類型的值是邏輯X。類似有限狀態機這樣的模型中,四態變量的X邏輯值可以用來表示模型還沒有復位,或復位邏輯的建模不正確。
仿真剛開始時,兩態數據類型的缺省值是0而不是X。因為復位操作通常是將大部分變量清0,所以這樣一來即使復位邏輯有缺陷,模型好像仍然是被復位了。
仿真開始時,枚舉類型使用枚舉類型的基類值作為缺省值。如果狀態變量用默認基類和標簽值定義并且復位操作也是將枚舉值置為表中的第一個值,那么就會出現和兩態變量類似的情況。默認基類是int,它是仿真時具有非初始值0。枚舉列表中第一個標簽的默認值是0,這與兩態基類的非初始值相同。這樣即使沒有插入復位,或復位邏輯有錯誤,設計好像仍然是復位了。

enum{WAITE,LOAD,STORE}State,Next; always@(posedge clock,negedge resetN)if(!resetN) State <= WAITE;else State <= Next;always@(State)case(State)WAITE:Next = LOAD;LOAD:Next = STORE;STORE:Next = WAITE;endcase

使用復位邏輯也不能解決這個狀態鎖定問題。因為復位會將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模型中使用两态数据类型的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。