HDLbits 刷題記錄 3.2.1 Latches and Flip-Flops(下)
3.2.1 Latches and Flip-Flops
3.2.1.12 D flip-flop
寫一個top_module,包含選擇器和觸發(fā)器

3.2.1.13 DFFs and gate

由于最終輸出Z 不受時鐘信號clk的影響,所以Z的賦值不應(yīng)該放在always塊中
assign賦值,一旦q1,q2或q3發(fā)生變化,輸出Z就發(fā)生變化
3.2.1.14 Create circuit from truth table
僅用d型觸發(fā)器和門實(shí)現(xiàn)JK觸發(fā)器。注:Qold是時鐘上升沿前的D觸發(fā)器的輸出。

3.2.1.15 Detect and edge

當(dāng)監(jiān)測到輸入信號in有一個上升沿時,輸出pedge輸出1,否則輸出0
這里我用了兩個D觸發(fā)器,tmp用來存儲前一個變化狀態(tài)
只有在前一個變化狀態(tài)為0,in的當(dāng)前狀態(tài)為1的時候,輸出pedge才是1
反之,若檢測下降沿,只需要將pedge <= (~tmp) & in改成pedge <= tmp & (~in)即可
前一個狀態(tài)為1,in的當(dāng)前狀態(tài)為`0,即為下降沿
3.2.1.16 Detect both edges

判斷是否 上升沿或者下降沿
對上一個狀態(tài)和現(xiàn)狀圖亦或,若不同,則in發(fā)生跳變
3.2.1.17 Edge capture register
當(dāng)監(jiān)測到輸入信號`in`從高電平跳變的低電平時,輸出信號`out`會在下一個時鐘上升沿輸出`in`前一個狀態(tài),并一直保持,直到復(fù)位信號`reset`有效時(高電平有效),才能將輸出信號`out`置為低電平

監(jiān)測到時鐘上升沿時,先將`in`賦值給`tmp`,如果在`if-else`語句中,對`tmp`賦值,會出現(xiàn)時序錯誤
3.2.1.18 Dual-edge triggered flip-flop
實(shí)現(xiàn)雙邊沿觸發(fā)器
