2.10 今天繼續回顧基礎.
案例一:序列檢測
案例二:狀態機
狀態機描述時關鍵是要描述清楚幾個狀態機的要素,即如何進行
狀態的轉移,每個狀態的輸出是什麼,狀態轉移的條件。具體描述時
方法各種各樣,最常見的有三種描述方式:
1. 一段式:整個狀態機寫到乙個 always 模組裡面,在該模組中
即描述狀態轉移,又描述狀態的輸入和輸出。
2. 兩段式:用兩個 always 模組來描述狀態機,其中乙個 always
模組採用同步時序描述狀態轉移,另乙個模組採用組合邏輯判
斷狀態轉移條件,描述狀態轉移規律以及輸出。
3. 三段式:在兩個 always 模組描述的方法基礎上,使用三個
always 模組,乙個 always 模組採用同步時序描述狀態轉移,
乙個 always 模組採用組合邏輯判斷狀態轉移條件,描述狀態
轉移規律,另乙個 always 模組描述狀態輸出(可以用組合邏
輯電路輸出,也可以用時序邏輯電路輸出)。
一般而言,推薦的 fsm(有限自動狀態機)描述方法是後兩種。
這是因為: fsm 和其他的設計一樣,最好使用同步時序方式設計,以
提高設計的穩定性,消除毛刺。狀態機實現後,一般來說,狀態轉移
部分是同步時序電路而狀態的轉移條件的判斷是組合邏輯。
第二種描述方法同第一種描述方法相比,將同步時序和組合邏輯
分別放到不同的 always 模組中實現,這樣做的好處不僅僅是便於閱
讀、理解、維護,更重要的是利於綜合器優化**,利於使用者新增合
適的時序約束條件,利於布局佈線器實現設計。在第二種方式的描述
中,描述當前狀態的輸出用組合邏輯實現,組合邏輯很容易產生毛刺,
造成設計的不穩定。
第三種描述方式與第二種相比,關鍵在於根據狀態轉移規律,在
上一狀態根據輸入條件判斷當前狀態的輸出,從而在不插入額外時鐘
節拍的前提下,實現了暫存器輸出
按鍵的抖動的處理:
1按鍵抖動帶來的危害
鍵抖動會引起一次按鍵被誤讀多次。為確保 cpu 對鍵的一次閉
合僅作一次處理,必須去除鍵抖動。在鍵閉合穩定時讀取鍵的狀
態,並且必須判別到鍵釋放穩定後再作處理。
2. 抖動的一些引數
抖動時間的長短由按鍵的機械特性決定,一般為 5ms~10ms。
這是乙個很重要的時間引數,在很多場合都要用到。 按鍵穩定閉
合時間的長短則是由操作人員的按鍵動作決定的,一般為零點幾
秒至數秒。
3. 解決辦法
一是延時重取樣;二是持續取樣。 從理論上來說,延時(如10ms)重取樣的準確率肯定低於持續取樣。 筆者採用持續取樣
verilog hdl 語言中存在兩種賦值語言:
● 非阻塞型賦值語句
● 阻塞型賦值語句
1. 非阻塞型語句
以賦值操作符「 <=」來標識的賦值操作稱為「 非阻塞型過程賦值
(nonblocking assignment)」。 非阻塞型過程賦值語句的特點是:
(1) 在 begin-end 序列語句塊中,一條非阻塞過程語句的執行不會阻塞下一條
語句的執行,也就是說在本條非阻塞型過程賦值語句對應的賦值操作執行
完之前,下一條語句也可以開始執行。
(2) **過程在遇到非阻塞型過程賦值語句後首先計算其右端賦值表示式的
值,然後等到**時間步結束時再將該計算結果賦值變數。也就是說,這
種情況下的賦值操作是在同一**時刻上的其他普通操作結束後才得到
執行的。
如以下語句的程式 1:
initial
begin
a<=b;//語句 s1
b<=a; //語句 s2
end上述語句中包含了兩條非阻塞型過程賦值語句 s1 和 s2,當**程序遇到
initial 過程塊後(0 時刻),語句 s1 首先開始執行,賦值表示式「b」的值得到
計算(但是對被賦值變數 a 的賦值操作要等到當前時間步結束才執行),同時由
於 s1 是一條非阻塞型賦值語句,所以 s1 的執行不會阻塞 s2 的執行;由於 s2
也隨即開始執行,其對應的賦值表示式「a」的值得到計算,由於這時 s1 對 a
的賦值操作還沒有執行,所以此時計算得到的賦值表示式取值是 a 的初值。由於
s2 也是一條非阻塞型賦值語句,它對應的為變數 b 進行賦值操作也要等到當前
時間步結束時才會得到執行;所以在當前時間步結束時, s1、 s2 兩條語句對應的賦值操作同時執行,分別將計算得到的 a 和 b 初值賦給變數 b 和 a,這樣就交
換了 a 與 b 的取值。
2. 阻塞型語句
以賦值操作符「=」來標識的賦值操作稱為「阻塞型過程賦值( blocking
assignment)」。非阻塞型過程賦值語句的特點是:
(1) 序列塊(begin-end)中的各條阻塞型過程賦值語句將以它們在順序塊後排
列次序依次得到執行。
(2)阻塞型過程賦值語句的執行過程是:首先計算右端賦值表示式的值,然後
立即將計算結果賦值給「=」左端的被賦值變數。
阻塞型過程賦值語句的這兩個特點表明:**程序在遇到阻塞型過程賦值
語句時將計算表示式的值並立即將其結果賦給等式左邊的被賦值變數;在序列語
句塊中,下一條語句的執行會被本條阻塞型過程賦值語句所阻塞,只有在當前這
條阻塞型過程賦值語句所對應的賦值操作執行完後下一條語句才能開始執行。
例如語句程式 2:
initial
begin
a=0;//語句 s1
a=1;//語句 s2
end在這段語句中包含兩條阻塞型過程賦值語句 s1 和 s2,它們都是在**零時
刻得到執行的,其對應的賦值操作也都是在 0 時刻進行的。但由於它們是阻塞型
賦值語句,所以在執行 s1 語句是 s2 被阻塞而不能得到執行;只有在 s1 執行完,
a 被賦值 0 之後, s2 才能開始執行。而 s2 的執行將使 a 被重新賦值 1,所以上
面這個過程塊執行後變數 a 的值終取值為 1.
關係運算子:
所有的關係運算子都有著相同的優先級別。關係運算子的優先級別低於
算數運算子的優先級別。
上班第二天
本想坐晚一班車的,誰知道這晚一班的也只是晚了 五 六分鐘,不高興再在站台上等,也只好小跑到車門上去了,果然,八點十分就到了。白天那個困啊 今天的工作內容和昨天一樣,做到後來我實在覺得測的差不多了,想幹些其他的,但這初來乍到的,也不好幹其他的呀,況且領導辦公室就在我旁邊。今天的工作總結有兩點 1 別把...
第二天實習
今天我早早到了銀行,開始給大家抹桌子,算是向愛妃學習吧。之後向wqy學習做表的方法,他很耐心。今天一天也就是做了這麼乙個表,但是還向dh學習了另外一些業務的處理,收穫不小。中午吃了雞腿 肉串和芸豆,好開心啊。我越來越喜歡自己的實習了。今天好多自己班上的同學來面試實習生,希望她們都能上!今天我沒有去同...
實習第二天
又是早起擠地鐵的一天 今天symphony說給我換了個導師,richard。於是我開始自己看,但是我並不清楚背景,不知道整個資料夾是幹什麼目的的,也不知道哪些檔案是需要看的。然後在richard的講解下,我慢慢明白了,終於知道我是幹啥的了,就是完善優化他們寫的自動化測試程式,首先是要看懂他們寫的。按...