-------------讀《數字邏輯與EDA設計》(廣工版)小結
第一章 數字邏輯基礎
1.1數制與碼制★★★
數制
n進制:0~n-1,小數點左邊,從右向左位權:n0,n1.....,小數點右邊,從左向右位權:n(-1),n(-2)....
16進制是用09,AF
數制之間的轉換
碼制
-
順序二進制編碼
-
格雷碼
n位二進制數的順序二進制為B=B_n-1.....B_0,則G_i=B_i⊕B_i+1
-
獨熱碼
只有一個二進制位為1,其余為0
-
二-十進制編碼/BCD碼(用每個四位的二進制表示十進制一位的0~9)
8421,2424,5211屬於位權碼,余三碼是二進制碼+3,余三格雷碼是格雷碼+3
1.2基本及常用的邏輯運算★★
AB與,A+B或,A⊕B異或
1.2邏輯函數表示方法★★
- 邏輯表達式
- 真值表
- 卡諾圖
- 邏輯圖
1.3邏輯函數的化簡★★★
-
最小項及標准與或式(類似於離散數學中的極小項與主析取范式)
常將最小項記作:m1,m2......
求取方法:1.通過公式變換表達式 2.列出函數真值表,直接寫出標准與或式
-
邏輯函數的最簡與或式
-
利用公式和定理化簡邏輯函數
- 並項法 AB+A~B=A
- 吸收法 A+AB=A
- 消項法 AB+AC+BC=AB+AC
- 消因子法 A+~AB=A+B
- 配項法 A+A=A , A+~A=1
-
卡諾圖(變量少於6個)
n個變量邏輯函數的卡諾圖就有2n個最小項,就有2n個方格
按格雷碼的順序在行列端及列左端處寫出變量取值
幾何相鄰:1.相接 2.相對 3.相重
幾何相鄰的最小項必為邏輯相鄰,可以合並消去變量
2^n個最小項合並成一項時,可以消去n個變量
合並所消去的是包圍圈內變量取值不同的,保留取值相同的
-
存在無關項的邏輯函數
約束項用集合d表示
其約束項和任意項統稱無關項,在卡諾圖用X表示,其化簡時視為1還是0,應以得到的包圍圈最大且包圍圈個數最少為原則
1.4常用74HC系列門電路芯片★
- 74HC00——2輸入與非門
- 74HC02——2輸入或非門
- 74HC04——非門
- 74HC08——2輸入與門
- 74HC32——2輸入或門
- 74HC86——2輸入異或門
sb知識:CMOS三態門能實現分時傳送數據邏輯功能
第二章 組合邏輯電路
組合電路特點:
1.邏輯功能上:任意時刻的電路輸出,僅取決於該時刻各個輸入變量的取值,與電路原來的工作狀態無關
2.電路結構上:電路中輸出到輸入之間無反饋連接,電路由邏輯門電路組成,不包含任何可以存儲信息的具有記憶功能的邏輯元器件
2.1組合邏輯電路的分析方法★★★
- 根據給定的邏輯電路,寫出輸出函數的邏輯表達式
- 表達式變換及化簡
- 根據表達式列出真值表
- 對給定電路的功能進行邏輯描述
2.2常用的組合邏輯電路(多考察各種器的輸入輸出端設計)
1.編譯器★
簡單來說就是將多個輸入信號(I_0I_m-1)變成較少的對應輸出編碼(Y_n-1Y_0)
為保證編碼位數最短,即輸出最少,m與n滿足:
2(n-1)<m<=2n
二進制編碼器:n個輸出對應2^n個輸入
2.譯碼器★
與編譯器剛好相反
3.數據選擇器
作為一種多路開關常用於將並行數據轉換位串行數據輸出
2^n路輸入1路輸出的多路選擇器有n個選擇控制變量,選擇控制端的二進制值m對應第m個輸出端口D_m
即是有n個選擇控制輸入端,2^n個數據輸入端
4.數值比較器
基本功能:輸入兩個位數相同的數A,B,比較大小后輸出結果:G,E,S(對應> = <)
有符號優先比較符號,多位數從高位比較起
n位數值比較器需要2n位數據輸入及3位輸出信號
5.加法器★
1位二進制加法器
- 半加器:只考慮兩個加數本身,不考慮由低位來的進位
- 全加器:除了考慮連個加數本身,還考慮由低位來的進位(會疊加上去)
2.3組合邏輯電路的設計方法★★★
- 分析設計要求,將文字描述抽象成輸出變量與輸入變量的邏輯關系
- 列真值表
- 根據真值表寫出邏輯表達式並進行化簡
- 根據所選擇的門電路的類型,變換最簡表達式
- 根據邏輯表達式畫出邏輯電路圖
2.4組合邏輯電路的時序分析★★★
-
波形圖
-
時序分析
實際中信號經過任何一個門電路都會產生時間延遲,稱為傳輸延遲
傳輸延遲除了會影響電路速度,還會引起電路的競爭問題
-
競爭冒險
當輸入信號發生變化后,在輸出達到穩定前,輸出端可能出現異常的虛假信號(干擾脈沖)
解決方案:1.選通法 2.濾波法 3.增加冗余項法
第三章 時序邏輯電路
時序電路特點(注意與組合電路的不同):
1.邏輯功能上:任意時刻電路的穩定輸出,不僅取決於該時刻各個輸入變量的取值,還取決於電路原來的狀態
2.電路結構上:通常包含組合電路+存儲電路,存儲電路由具有記憶功能的鎖存器或觸發器構成,存儲電路的輸出狀態必須反饋到組合電路的輸入端,共同決定組合電路的輸出
按觸發器的時鍾脈沖控制方式分類
1.同步時序電路: 所有觸發器狀態的改變都在同一個時鍾脈沖控制下同時發生
2.異步時序電路: 觸發器由兩個或及以上的時鍾脈沖Clk控制或無Clk控制
按輸出與輸入的關系分類
1.Mealy型時序電路: 輸出信號不僅取決於存儲電路的狀態,還與輸入直接相關
2.Moore型時序電路: 輸出信號僅僅取決於存儲電路的狀態
3.1時序電路邏輯功能的表示方法★★
-
邏輯表達式
1.輸出函數,用Y=...表示
2.驅動函數,用Z=...表示
3.狀態函數,用Q^(n+1)=...表示 //Q^n表示現態 Q^(n+1)表示次態
-
狀態表(有些需要先編碼,再列出真值表的形式)
包括時鍾Clk,輸入,現態,次態,輸出
-
狀態圖
圓圈代表一個存儲狀態,圈中文字代表狀態名字,箭頭表示狀態之間的轉換關系,箭頭上有:斜線左邊表示轉換條件/輸入信號,右邊是輸出信號
-
時序圖
3.2鎖存器與觸發器
鎖存器是電平敏感的存儲元件,即是存儲狀態隨着輸入信號的高低電平變化而變化
觸發器是時鍾脈沖邊沿觸發的存儲元件,即是存儲狀態僅在時鍾脈沖邊沿可能發生變化
觸發器(雙穩態)★★
1.D觸發器,特性函數:Q^(n+1)=D Clk上升有效
2.JK觸發器, 特性函數: Q(n+1)=J~Qn+~KQ^n Clk下降有效
3.RS觸發器,特性函數:1. Q(n+1)=S+~RQn 2. RS=0(約束條件)
4.T觸發器,特性函數:Q(n+1)=T⊕Qn
當置位或清零信號一產生就立刻進行操作的是異步方式,
當置位或清零信號產生后,還要等待時鍾脈沖信號的有效邊沿到來才進行操作的是同步方式
帶有異步置位Set和異步清零Clr的觸發器需遵守約束條件:Set*Clr=0
求n個觸發器構成的計數器有幾個無效狀態,用2^n-計數容量=無效狀態個數
3.3時序電路的分析方法★★★
-
寫函數表達式,包括輸出函數和各觸發器的驅動函數(Clk處無小圓圈為上升沿觸發,有為下降沿觸發)
-
將各觸發器的驅動函數代入各自的特性函數中,求觸發器的狀態函數
-
列出狀態表
-
畫狀態圖及時序圖(利用狀態表)
-
結合輸入信號的含義,進一步對電路功能進行分析,以及對電路是否能自啟動進行分析
凡是沒被利用的狀態稱為無效狀態,構成的循環稱為無效循環,在時序電路中若存在無效循環,則電路有缺陷.時序電路能否自啟動取決於是否存在無效循環
3.4常用的時序邏輯電路
寄存器
1.基本寄存器
實現數據的並行輸入及並行輸出
2.移位寄存器
在移位脈沖的操作下,依次右移或左移數據,主要實現數據的串行輸入,輸出,也可以並行
分為右移,左移和雙向移位寄存器
計數器★
主要由觸發器組成 , n個觸發器構成的m進制的計數器,計數容量為m^n,N進制計數器的計數容量為N
m進制計數器有m個狀態,最少滿足: 2(n-1)<m<=2n
使用集成的計數器設計N進制計數器★★
1.清零法:當計數器計數值達到N時,利用組合邏輯電路產生清零信號,使計數值變為0,可分同步置零與異步置零
2.置數法:通過設計計數的初始值,改變計數容量,如將容量為16的74HC161初始值設為4,以設計12進制計數器
3.級聯方式設計:當待設計的計數器計數容量大於集成計數器容量時,
通過將n片m位N進制計數器級聯的方式最多組成 (Nm)n進制的計數器
3.5時序電路的設計方法★★★
-
分析設計要求,建立原始狀態圖
-
進行狀態化簡,消去多余狀態
(相同輸入下有相同輸出,且都轉換到同一個次態,可合並)
-
狀態分配,畫出編碼后的狀態圖
n個觸發器共有2^n種狀態組合,固需要M個狀態時,至少滿足:
2(n-1)<M<=2n
-
選擇觸發器類型,求出電路的狀態函數,輸出函數及驅動函數
(可畫狀態表更方便求取)
-
如果電路存在無效狀態,則需判斷是否為能自啟動電路
(可將無效狀態代入輸出函數和狀態函數計算是否能返回有效循環)
-
畫邏輯圖
3.6時序邏輯電路時序分析的基本概念(詳見課本)★
1.時鍾脈沖信號 2.建立時間,保持時間和最大傳播延遲時間 3.穩態和亞穩態 4.分辨時間
5.時鍾偏差
第四章 硬件描述語言 Verilog HDL★★★
1.標識符
包括字母,數字,$和_的組合,區分大小寫,首字符必須字母或下划線
2.代碼格式
自由,可同行或多行,注釋從C
3.模塊和端口(類似C中函數與函數參數的概念)
module 模塊名(端口1,。。。)
。。。
endmodule
端口列表所有端口須在模塊中聲明,根據流動方向分為:input,output和inout(雙向)
端口默認聲明wire型,若希望輸出端口能保存數據,需顯示聲明為reg型(input和inout不能為reg)
端口調用
直接傳參,需要按順序傳,用名字傳參,如:(.端口名1(信號名1)。。。),則不必按順序
4.系統任務和系統函數$
$display(=printf) $monitor(動態監視,發生變化就輸出) \(stop和\)finish(使仿真掛起,進行調試)
\(time,\)stime,$realtime(分別以64,32位,實數返回當前仿真時間) $random
5.常用編譯器指令(以`開頭)
define和undef,include,timescale(定義延遲單位與延遲精度),
6.數據類型,操作符和表達式
3種常量:整型(Integer), 實數(Real), 字符串型(String)
整型格式:[指定位寬]'[有s/S表示有符號數] base(o/O-8, b/B-2, d/D-10, h/H-16) value
數據類型
基本值:1. 0(邏輯0/假) 2. 1(邏輯1/真) 3. x(X)//未知狀態 4.z(Z) //高阻狀態
線網類型:wire
常量類型:reg(寄存器類型,保持最后一次賦值結果),integer,time,real,realtime
數組類型:
參數:可用parameter定義常數
位選和部分位選:可從上述數據類型中拿取一部分數據,數據按高位在左
如:reg[3:0]pa;reg[2:0]Z
pa=4'b1010;
Z=pa[3:1];//3'b101
操作符
==邏輯相等 =全等 != !(邏輯不等與非全等)
<< ,>>(邏輯左移與右移,空位填0)
<<<,>>>(算術左移和右移,左移填0,右移有符號數填符號位)
拼接和復制
如:X={pa,pb[2:0],pc};
Z={3{pa}};//={pa,pa,pa}
7.行為級建模
1.過程結構(可加入敏感事件,延遲控制)
initial: 0時刻開始執行,只執行一次,可以在變量聲明時對reg賦值
always : 0時刻開始,重復執行
2.時序控制
delay://延遲控制
@(事件表達式) 執行語句;//事件控制
事件表達式:
<信號名>:發生變化就執行
posedge<信號名>:信號正跳
negedge<信號名>:信號負跳
wait(條件) //電平敏感事件控制,條件為真就執行
執行語句;
3.語句塊
順序:begin...end
並行:fork...join
4.過程性賦值
阻塞性過程賦值:=
非阻塞性過程賦值:<=
5.分支語句
if, case(分支不用break), forever(用disable跳出), while, for
repeat(循環次數)
執行語句
8.結構級建模
內置基本門級元件
多輸入門:and(與門),nand(與非門),or(或門),nor(或非門),xor(異或門),xnor(異或非門)
多輸出門:buf(緩沖器),not(非門)