Transcript Lab09
Department of Computer Science and Information Engineering National Cheng Kung University Experiment on digital system Sequential circuit(1) Digital Integrated Circuit Design Laboratory Outline Sequential circuit (1) Latch & Flip-Flop Shift Registers Lab Department of Computer Science and Information Engineering National Cheng Kung University Sequential circuit (1) Digital Integrated Circuit Design Laboratory Sequential Circuit (1/5) Sequential Circuit (2/5) 循序電路的輸出不僅取決於目前的輸入,還與前一 時刻的輸入/輸出有關。 循序邏輯包含儲存元件用以儲存狀態值,而組合邏 輯則沒有儲存元件。大部分的數位電路都是一種由 組合邏輯跟儲存元件所建構的循序邏輯電路,它包 含記憶體、延遲單元、儲存單元與有限狀態機 (finite state machine)等。 Sequential Circuit (3/5) Sequential Circuit (4/5) 循序電路可分為同步與非同步兩大類。 在同步循序電路中,狀態的改變受控於時脈訊號。若電路狀態的改變, 在時脈訊號由0變化到1時發生,我們稱之為正緣(positive edge)或稱為上 升緣(rising edge)觸發。反之,若在時脈訊號由1變化到0時,電路狀態才 會改變,我們稱之為負緣(negative edge)或稱為下降緣(falling edge)觸發。 在同步電路內,只有在時脈觸發發生時才能改變輸出狀態與訊號,且此 輸出訊號會一直維持到下一個觸發的來臨。相對的,在非同步循序電路 中,任何時間都可以改變狀態,不需時脈訊號的觸發,是一種屬於事件 驅動的設計。 Sequential Circuit (5/5) 循序邏輯電路 同步 同步 (Synchronous) 非同步 (Asynchronous) Clock 控制 正緣觸發 (Clock 由 0 變化到 1 時,開始執行電路) - Posedge 負緣觸發 (Clock 由 1 變化到 0 時,開始執行電路) – Negedge example: always@(posedge clock)、always@(negedge clock) 非同步 事件 Event 控制 example: always@(posedge clock or posedge reset) 任何時間都可以改變狀態,不需要時脈訊號觸發 Department of Computer Science and Information Engineering National Cheng Kung University Latch & Flip-flop Digital Integrated Circuit Design Laboratory Latch & Flip-flop Latch Flip-flop Flip-Flop inference D flip-flop with reset (1/2) D flip-flop with reset (2/2) D flip-flop with set (1/2) D flip-flop with set (2/2) Loop problem (1/2) Loop problem (2/2) Notice wire and reg reg == register 放在always begin…end裡面的變數,要宣告為 reg 放在always begin…end外面的變數,要宣告為 wire (需搭配assign使 用) 在組合電路中使用 reg,合成以後只是線 (net) 在循序電路中使用 reg,合成後會形成 Flip-flop (register) Latch 在組合電路中,case、if…else…若沒有寫滿,合成後會產生latch Blocking (限制指定) vs. Non-Blocking (無限制 指定) Blocking assignment initial begin … A=1; B=0; … A=B; // B=0 is used B=A; // A=0 is used end ======================= initial begin … A=1; B=0; … B=A; // A=1 is used C-like A=B; // B=1 is used end Non-Blocking assignment initial begin … A=1; B=0; … A<=B; // B=0 is used B<=A; // A=1 is used end ======================= initial begin … A=1; B=0; … B<=A; // A=1 is used 平行處理 A<=B; // B=0 is used end 19 Department of Computer Science and Information Engineering National Cheng Kung University Shift Registers Digital Integrated Circuit Design Laboratory Shift Registers 串入串出移位暫存器 Serial In/Serial Out Shift Register 功能:將串列訊號輸入至最左邊 DEF,而輸出訊號則被儲存在最右邊 DEF 每個時脈週期只能輸入與輸出 one-bit 的資料 – 傳輸速率較慢(缺點) 時脈輸入訊號正緣到達時: 若 clear = 1,所有 DEF 清除為 0 若 clear = 0,電路開始進行移位,全部 DEF 的資料往右 傳遞一個 DEF (右移 1個位元) 最右邊 DEF的輸出位元資料, 則被當作串列輸出訊號 (out) 21 Serial In/Serial Out Shift Register O X 22 Shift Registers 串入並出移位暫存器 Serial In/Parallel Out Shift Register 功能:將串列訊號輸入至最左邊 DEF,而全部DEF所儲存的資料 即是所謂並列輸出訊號 時脈輸入訊號負緣到達時: 若 clear = 1,所有 DEF 清除為 0 若 clear = 0,電路開始進行移位,全部 DEF 的資料往右 傳遞一次,然後每個 DEF 個別貢獻 one-bit 資料,當作並 列輸出訊號 每個時脈週期只能輸入 one-bit 資料,但可以輸出 four-bits 資料 23 Serial In/Parallel Out Shift Register 24 Shift Registers 並入串出移位暫存器 Parallel In/Serial Out Shift Register 功能:並列輸入所有訊號資料至 DEF,而串列輸出訊號則是被儲存在最右 邊的 DEF中 時脈輸入訊號正緣到達時: 若 clear = 1,所有 DEF 清除為 0 若 load = 1,將全部輸入訊號以並列方式載入到所有 DEF 中 若 clear = 0 與 load = 0 時,電路開始進行資料移位 – 串列輸出 同時輸入 four-bits 資料,但只能輸出 one-bit 資料 25 Parallel In/Serial Out Shift Register 26 Shift Registers 並入並出移位暫存器 Parallel In/ Parallel Out Shift Register 功能:並列輸入所有訊號資料至 DEF,並列輸出所有儲存在 DEF 資料 時脈輸入訊號正緣到達時: 若 clear = 1,所有 DEF 清除為 0 若 load = 1,將全部輸入訊號以並列方式載入到所有 DEF 中 若 clear = 0 與 load = 0 時,電路開始進行資料移位 – 並列輸出 27 Parallel In/ Parallel Out Shift Register 28 Department of Computer Science and Information Engineering National Cheng Kung University Lab Digital Integrated Circuit Design Laboratory Lab (1/2) 累加器(Accumulator) 累加器是CPU架構中很重要的一個計算暫存器,主要是儲存運算所產生 的中間累加結果。 題目功能說明: 時脈輸入訊號的正緣到達時 (1)若reset訊號為1,累加器會被清除為0; (2)若reset訊號為0,累加器會將持續的輸入值都累加起來,輸出則是到 目前為止,輸入值的累加總和。 Lab (2/2) VeriInstrument裝置模擬 注意:時脈的部分,設1就好,以免頻率太快而不易看出變化。 Lab - Hint module Accumulator (sequential circuit) module Seven_Display (combinational circuit) 計算累加器正確的值 將Accumulator算出的值轉為output的七段顯示器 兩個module之間溝通方式 SevenDisplay DIS (.data(tmp), .out(out)); Seven-segment display