組合電路 時序電路在數位電路中的地位

2021-08-19 15:46:03 字數 2361 閱讀 7527

我是文科出生,研究生階段才轉向計算機,中間有很長一段時間都只做軟體理論相關研究和一些具體的軟體專案,包括編譯器、電力系統監控器、軟體測試工具研發等;直到2023年,才開始陸陸續續接觸一些硬體專案,說是硬體專案,其實主要是一些嵌入式的專案,如世界盃前做的3g轉wifi和自己玩的一些小車和感測器等。

在做嵌入式專案之前,壓根就沒接觸過硬體方面的開發知識,難度可想而知,什麼叫編碼器、什麼叫解碼器、怎麼做分頻、怎麼做倍頻、怎麼做a/d轉換、d/a等等,一系列的問題迎面而來。為了完成專案,只能硬著頭皮上,從最基礎的數字邏輯開始看起,從二進位制、卡諾圖入手,逐漸深入到組合電路和時序電路,再結合一本叫做《計算機組成與設計-硬體/軟體介面》,才逐漸深入明白我們做的編譯器後端的具體工作原理,在此基礎上對軟體的各種效能問題有了更深刻的認識。

組合電路和時序電路是計算機原理的基礎課,組合電路描述的是單一的函式功能,函式輸出只與當前的函式輸入相關;時序電路則引入了時間維度,時序電路在通電的情況下,能夠保持狀態,電路的輸出不僅與當前的輸入有關,而且與前一時刻的電路狀態相關,如我們個人pc中的記憶體和cpu中的暫存器,均為時序電路。

說了這麼多,我們學習的組合電路和時序電路在計算機中又是怎麼一回事呢?為了便於理解,下面以乙個大家都能接受的c語言程式開始,從上層向下層開始解釋。

void main()
這個例子大家都能明白,main函式要做的事情就是實現兩個數的加法操作。這是我們人類的思維方式,但是計算機並不認識,如何讓計算機理解呢?於是,我們需要將上面這個程式翻譯成機器能理解的模樣,這時候就需要借助編譯器(如常見的gcc、msc等)將上面的程式翻譯成mips指令(不同的cpu有不同的指令集,包括x86指令集、mips指令集、sparc指令集等,我們在這裡用mips指令集,咱們的龍芯也是採用mips指令集),如下所示:

addi   $t0, 0, 3

# a = 0+3, a儲存在$t0暫存器中, 對應的二進位制**為:0010 00** **** **** **** **** **** ****(這裡的星號*表示二進位制,這裡暫時不關心)

addi $t1, 0, 5

# b = 0+5, b儲存在$t1暫存器中

addi $t2, $t1, $t0

# sum = a + b, sum儲存在$t2暫存器中

到這裡,大家一定還在疑惑,不是說要翻譯成二進位制**嗎?怎麼是mips組合語言?對,就是組合語言,這個組合語言中的每一條指令就對應一條二進位制**,彙編的方式更容易讓人理解。

現在我們得到了計算機可以理解的mips指令(可以想象成可執行程式)了,接下來的問題是如何執行mips指令。

要執行程式,首先必須將可執行程式檔案(從外設)載入到記憶體。可執行檔案載入到記憶體時,作業系統會為每個可執行程式在記憶體中分配四個區:

我們重點關注**區和棧區,初始時,其分布如下圖所示:

其中pc(program counter)是程式計數器(是cpu中的乙個暫存器,具有資料儲存功能),即用來指示下乙個即將執行的指令的位址,本例中,進入main函式後,即將執行的第一條指令是a = 3,其位址為:0x ff ff ff 00, 因此pc指向其對應的彙編**的位址。

cpu根據pc的的值,從指定位址0x ff ff ff 00處獲取指令,然後解析指令,並執行指令(即執行a=3)。

當a = 0執行完畢後,pc執行操作:pc = pc + 4,pc指向0x ff ff ff 04,即b = 5的指令的位址。此時,棧區的狀態為: 

接著,cpu根據pc的的值,從指定位址0x ff ff ff 04處獲取指令,然後解析指令,並執行指令(即執行b=5)。當b=5執行完畢後,pc執行操作:pc = pc + 4,pc指向0x ff ff ff 08,即sum=a+b的指令的位址。此時,棧區的狀態為:

然後,cpu根據pc的的值,從指定位址0x ff ff ff 08處獲取指令,然後解析指令,並執行指令(即執行sum=a+b)。當sum=a+b執行完畢後,pc執行操作:pc = pc + 4,pc指向0x ff ff ff 12(因為,指令已經執行完畢,這裡應該提示要從main函式返回)。此時,棧區的狀態為: 

至此為止,main函式內部的流程基本上陳述完了(關於函式間呼叫,相對複雜,計算機組成中會詳細講解),但如何實現這些步驟呢,其中的關鍵問題包括如下:

數位電路 時序電路實驗

一 實驗設計與程式 module shop y,ab,r,z,reset,clk input reset,clk 定義變數reset和時鐘 input 1 0 ab 投幣金額 output y,r,z 狀態,出貨標誌,退幣標誌 reg 2 0 y reg r,z always posedge clk...

同步時序電路與非同步時序電路,

同步時序電路與非同步時序電路的區別 簡而言之 同步電路 儲存電路中所有觸發器的時鐘輸入端都接同乙個時鐘脈衝源,因而所有觸發器的狀態的變化都與所加的時鐘脈衝訊號同步。非同步電路 電路沒有統一的時鐘,有些觸發器的時鐘輸入端與時鐘脈衝源相連 這有這些觸發器的狀態變化與時鐘脈衝同步,而 其他的觸發器的狀態變...

REV 時序電路

不僅和現在的輸入有關也和過去的狀態有關的電路.有反饋迴路.s 1 1r 1 0s 0r 0 ke eps 1r 1 ban ne ds 1 rightarrow 1 r 1 rightarrow 0 s 0 r 0 rightarrow keep s 1 r 1 rightarrow banned ...