p0 Logisim
課下測試
1. 使能與復位
使能輸入:決定 是否在時鍾沿載入數據
- Suggested:由EN作為MUX的sel選擇,輸入D與原來狀態Q被選擇 TRUE則傳遞輸入值D FALSE則循環Q的原來狀態。
- 使用與門聯系EN與CLK,時鍾被門控。
當 CLK = 1 時,若EN發生改變,觸發器就會出現一個時鍾毛刺,在不正確的時間進行轉換。
復位輸入:決定 是否載入數據 及將輸出Q復位為0
!同步復位與異步復位
同步復位: 只在CLK上升沿進行復位
- 具體操作:將RESET符號擴展並取反再與輸入數據通過與門,作為觸發器的輸入端;
- 如果為同步復位,且想要實現控制復位至非0的狀態:
可以使用reset作為MUX的選擇信號,輸入D與原來狀態Q被選擇 TRUE則傳遞想要復位的狀態 FALSE則傳遞輸入D
// 該情況類似於使能輸入的思想
異步復位: 只要RESET = TRUE就可以進行復位,而與CLK無關;此時觸發器忽略輸入並將輸出Q復位為0
- 具體操作:將reset信號連接在clear端口
或許可以通過reset來選擇輸出,從而改變當前寄存器輸出值,但實際並不能停止載入數據
2. 時序電路
定義電路:電路的輸入、輸出端、功能規范和時序規范
- 同步時序電路需要滿足的條件:
- 每一個電路元件或是寄存器或是組合電路
- 至少有一個電路元件是寄存器
- 每個環路至少包含一個寄存器
寄存器包含系統的狀態,這些狀態僅僅在時鍾沿到達時發生改變,即狀態同步於時鍾信號
3. 電路模塊的設計流程
4. CRC校驗碼的理解
- CRC校驗碼即為n位原碼數據幀+k-1位校驗碼,k為除數位數
- 電路設計分為兩個部分,核心為模二除法模塊
- 模二除法模塊輸入為當前處理的高四位數值,非第一組時為上一組三位余數加下一個最高位,為保證后k-1位模二除法時需要在n位原碼數據幀后補充k-1位0;輸出為三位余數。
- 整合模塊主要為輸入輸出的調整,以及重點為運算次數=原碼數據幀位數。
5. 有限狀態機 —— Moore型和Mealy型
設計流程:狀態轉移、狀態存儲、輸出
以上三個模塊是對有限狀態機進行抽象后的三個主要方面。
其中,狀態轉移模塊和輸出模塊內是純組合邏輯,不涉及時序邏輯。而狀態存儲模塊則需要存儲每個周期有限狀態機的具體狀態。它們之間的關系是,狀態轉移模塊根據當前有限狀態機的狀態(即狀態存儲模塊所存儲的值)和當前的輸入計算出有限狀態機的下一狀態值,當時鍾上升沿到來時,這個新的狀態值被存入狀態存儲模塊中。
輸出模塊的邏輯分為兩種,根據輸出邏輯的不同,有限狀態機又被分為Moore型狀態機和Mealy型狀態機。它們之間具體的差別是,Moore型狀態機的輸出邏輯僅與有限狀態機當前狀態值有關;而Mealy型狀態機的輸出邏輯則與有限狀態機的當前狀態和當前輸入有關。
設計建議
- 分析具體問題,畫出狀態轉移圖
- 對狀態進行合適的編碼
- 畫出狀態轉移和輸出邏輯的真值表
- 在Logisim中實現狀態轉移和輸出邏輯,並采用合適的存儲器存儲具體狀態值
如何初始化狀態存儲的初值???
- 利用Comparator,MUX和Counter進行選擇,判斷計數為0的情況下則選擇初始化當前狀態,其他情況則直接將狀態存儲的輸出值反饋至當前狀態
Attention:
- 注意分清狀態轉移和狀態存儲模塊、分清狀態和輸入
- 以2^n_mod_5為例,輸入是數值,狀態是余數的值,輸出是狀態的獨熱碼,輸出的值可以理解為狀態的獨熱碼。
- 之前設計電路的時候其實是非規范的做法,實際上並沒有進行狀態的存儲,而只是利用當前輸入值進行計算,存儲的是輸入值的后兩位。將當前數據輸入的后兩位當作了狀態,也就是每次轉移后的結果是輸入值的后兩位而並不是真正意義上的狀態,意即狀態轉移部分只是左移原數取低位再加上輸入,而在“狀態存儲”后進行真值表的編輯,使得獨熱碼能夠在“狀態”和輸入的控制下正確表示。
- 之所以正確是因為mealy型狀態機的邏輯要求輸入直接與當前狀態聯系並直接反饋於輸出,因此存儲的部分實際上是輸入還是之前的狀態,實際上影響了輸出部分是之前輸入值與當前輸入運算得到當前狀態,還是之前的狀態與當前輸入得到當前狀態。而通法應該是后者。
- 通法:對狀態進行操作,即開始時將輸入與當前狀態進行聯系,狀態轉移后得到的應該是下一狀態,狀態存儲的也應該是新的狀態,本題中為了便於輸出獨熱碼,使用三位二進制來表示狀態,之后輸出部分使用譯碼器Decd轉換為獨熱碼即可。
6. 鎖存器、觸發器、寄存器的異同
-
鎖存器和觸發器均為存儲一位狀態的簡單時序邏輯電路
-
鎖存器:
- SR鎖存器:一對交叉耦合的或非門; 一個在Q上存儲一位狀態的雙穩態元件; S與R同時有效時輸出不確定
- D鎖存器:電平敏感鎖存器; 時鍾輸入CLK用來控制狀態發生改變的時間
-
觸發器:
- D觸發器:由反相時鍾控制的兩個背靠背的D鎖存器; 在時鍾上升沿將D復制到Q; 主從觸發器
-
寄存器
- 組成結構:N位寄存器由由共享1個公共CLK輸入的一排N個觸發器組成
-
Q:一個時序電路中放兩個時鍾,時鍾上升沿的控制是分開的嗎
-
A: 在仿真時電路中的clk的電平轉換是同時的
課上測試
問題合集
- 對於基本元件的使用與記憶出現致命性錯誤:在檢查和重新連線時遺漏了bit_extender的sign型擴展
- 接問題1,檢查的過程中分模塊檢查但致命性的遺漏了復位部分extender,只關心了直接的輸入輸出路徑,對於復位線路的疏忽極其致命
- 不同類型狀態機的理解仍舊需要鞏固基礎,不熟練導致在debug時方向錯誤
- 做題策略和心態問題,時間充裕的時候不妨做新的題目。不過這一點歸根結底還是知識不熟練、學的不到位的問題。
類似的問題:compare元件是否為unsigned之間的比較還是二進制補碼形式比較,元件基礎參數設置!
其他知識點
-
Wire colors
-
MUX多路選擇器:從多個輸入信號中選擇一個作為輸出。
DMX多路分配器:將1個輸入數據根據需要傳送到多個輸出端的任何一個輸出端。
Decd譯碼器:將二進制編碼轉換為相應的獨熱碼。 -
Bit-finder
-
RAM:
- One synchronous load/store port (default)一個同步載入/保存端口,由ID控制具體模式,1或懸空時為將數據load至元器件西側指定的地址中,0時store端口處的數據。
- One asynchronous load/store port 一個異步載入/保存端口,除了無clk端口以外。當ID為0時load數據,當ID為0,地址或數據發生變化時,進行另一個store,該點使之更接近於許多可用的隨機存取存儲器
- Separate load and store ports 兩個接口,一個store存儲數據,一個load載入數據,免去了使用Controlled Buffer的必要
回顧
-
基礎邏輯門的辨識
-
元器件的了解與熟練使用:Tunnel, Probe
-
狀態機的題目至少分別做一道
-
基礎概念、元器件繼續仔細看,要專心!!!