第八章
暫存器轉換階層
目錄
暫存器轉移階層
HDL中的暫存器轉移階層
演算法狀態機
設計範例
設計範例的HDL描述
二進位乘法器
暫存器轉換階層 (RTL)
數位系統設計–模組處理– 模組:由數位元件所組成,如暫存器 ,解碼器,多工器等 元件所組成
– 模組間連接則是用共同的資料及路徑的控制所完成
何謂暫存器轉移處理– 利用暫存器儲存處理過程中的暫態值
暫存器轉換階層包括三大部分– 系統中有些暫存器,且能處理暫存器中的資料,其處 理的順序能被控制
暫存器
數位系統中的基本要素,由正反器及邏輯 閘所形成
1位元暫存器由一組正反器所構成,可儲存 1位元資訊,n位元暫存器可儲存n位元資訊
暫存器可做設定清除及取補數的處理
資料處理
暫存器內的資料作處理時採用並列方式 來完成
需在單一計時脈波裡完成
處理完的資料可取代原來資料或是轉移 到另一個暫存器
例如
– 計數器:可將暫存器的內容加1
– 雙向移位暫存器 :可將資料向左或向右移位
運算處理順序
主要是控制處理時的初始狀態及時脈信 號的處理
先前的結果也會影響下一個運算
控制邏輯的二進位變數可控制暫存器中
多種不同操作
指令
轉移- R2←R1– 利用運算符號將R1暫存器中的資料轉移R1暫存器
條件指令- if(T1=1)then(R2 ← R1)– T1為控制信號,而時脈不是變數,所有轉移都發生在 時脈邊緣的轉換
- if(T1=1)then(R2 ← R1,R1 ← R2) 兩內容值交換
其他指令– R1 ←R1+R2 – R3 ←R3+1 – R4 ←shr R4 – R5 ← 0
數位系統中資料處理動作
轉移動作
– 資料由一暫存器移至另一暫存器
算術運算
– 對暫存器內資料做運算
邏輯運算
– 對暫存器內非數字資料做位元處理
移位運算
– 暫存器內資料做移位動作
做轉移動作時來源暫存器的內容並未更
HDL 中的暫存器轉換階層
暫存器轉換階層
– 依據硬體描述語言來描述數位系統
Verilog HDL
– 利用行為組合及資料流向建構RTL
暫存器轉換
– 依據程序指定敘述加以說明
組合電路
– 連續的指定或程式指定敘述來說明
Verilog HDL 轉移敘述
連續指定:說明組合邏輯
程序指定(無時脈):描述 二進位加法器,A 和B是輸入,S是輸出
assign S = A+B ;
程序指定
方塊程序指定(blocking):運算為等號(=)– 依照敘述在區塊內的順序而執行
非方塊程式指定(non-blocking): (<=)
先將右邊運算式處理完畢再將結果指定給左邊
always @ (posedge clock) begin
RA = RA +RB ; RD = RA ; end
always @ (negedge clock) begin
RA <= RA+RB ; RD <= RA ; end
HDL 的運算子
算術運算子:+ 、- 、 * 、 / 、 %
– 主要處理二進位數負數則用2´補數表示
邏輯運算子:&& 、 || 、!
– 決定條件的真假
位元處理運算子:& 、 | 、 ~ 、 ^
– 針對每一個位元做處理關係運算子:> 、 < 、 == 、 != 、 >= 、
<=
– 決定條件的真假
移位運算子: >> 、 << 、 { , }
– 將左邊的運算元依右邊位元數值做位移
迴圈敘述
Repeat,Forever,While,For 讓程序敘述重 複執行期敘述必須在initial 或always內
Repeat:執行次數為其敘述後面數字
Forever:不斷的重複執行程式敘述
intial begin Clock = 1’b0 ; repeat (16) #5 clock =~clock ; end
initial begin
clock = 1’b0 ; forever
# clock = ~clock ; end
迴圈敘述
While: 運算式條件成立下執行某個敘述 或區塊敘述
For :包含初始條件終止條件運算式及一 個控制變數改變的指定敘述
integer count ;
邏輯合成
可將硬體描述語言的原始碼轉譯成邏輯閘結構 的程式 若HDL的架構用在 RTL的描述就可直接被轉 換成邏輯閘- 階層的描述來處理
例子:將
HDL的架構轉譯成邏輯閘結構HDL Example 8-1
//description of 2x4 decoder //usingfor loop statement module decoder (IN, Y) ;
input [1:0] IN; //Two binary inputs output [3:0] Y; //Four binary outputs reg [3:0] Y;
integer I; //control variable for loop always @ (IN)
for (I = 0; I <= 3; I = I + 1) if (IN == I) Y[I] = 1;
else Y[I] = 0;
endmodule
邏輯合成之敘述
Assign
– assign 被用來描述組合邏輯
– assign Y = S ? I1:I0 ; // 為一2-to-1多工器 若要說明較大之多工器則敘述裡需有多個 運算子
always
– 可用來代表一個組合邏輯或序向電路 – always @ (I1 or I0 or S)
if (S) Y=I1 ; else Y=I0 ;
若要說明較大之多工器則可用case敘述
HDL 模擬與合成的過程
模擬與合成
模擬器:檢查HDL設計裡的RTL描述看動 作是否正確
測試平台:提供模擬所需的要的信號給模 擬器
邏輯合成器:接收正確的模擬結果產生一
個連接表相當於此設計的邏輯階層描述
控制與資料處理器的相互作用
邏輯設計分為兩部分
– 關於資料處理運算的數位電路設計
– 決定多種不同動作完成順序的控制電路設計
演譯狀態機圖
何謂演譯法
– 說明如何利用一組有限的程序步驟,來求解 一個問題
流程圖
– 說明演譯法的程序步驟之順序以及抉擇路徑 的簡便方 法
硬體演譯法
– 用一個已知的設備來解決問題的程序
硬體演譯法的流程圖
– 將文字指令轉譯成一種資訊圖
ASM 圖
定義:
– 特別發展出來的特殊流程圖他是被用來定義 數位硬體演譯法的
ASM圖與傳統的流程圖
– 傳統的流程圖並不需要考慮時間問題;而 ASM圖需描述從這一狀態到下一狀態的時序 關係。
構造
– 此圖由三個基本元件所組成:狀態盒、判斷 盒、條件盒 。
狀態盒
定義:
– 控制序列的狀態是由狀態盒來指示,這狀態 盒的形狀是一矩形盒,盒內記載著該狀態 下,由控制所產生的暫存器操作或是輸出信 號的名稱;狀態被賦予一個符號名稱,標記 在盒子的左上角,指定給狀態的二進位碼則 置於右上角
判斷盒
定義:
– 判斷盒用來描述輸入對控制子系統的效應,
判斷盒的形狀是用有兩個或更多出口路徑的 菱形盒來表示。待測試的輸入條件被記載於 盒內,若條件是真的話,就取某一條出口路 徑;若是假的,就取另一條出口路徑。
條件盒
定義:
– AMS所獨有的。如圖所示,條件盒用橢圓形來表 示,它的圓弧角可以讓它與狀態盒加以區別。至於 條件盒的輸入路徑,則是來自於判斷盒的其中一條 出口路徑。當輸入條件滿足給定的狀態時,則列在 條件盒內的暫存器操作或輸出才會產生。
ASM 方塊
定義
– 由一個狀態盒及接自此盒的所有狀態盒和條件盒所 組成的,ASM方塊有一個入口及若干個由狀態盒結 構所代表的出口路徑;ASM圖則是由一個或是更多 個相互連接的方塊所組成的。如圖所示。
ASM 圖與狀態圖
ASM圖與狀態圖非常類似,每一個狀態區塊等 效於與循序電路的一個狀態,判斷盒則等效於 連接兩個狀態之指向所標註的二進位資訊,因 此,有時候可以很方便的將ASM圖轉換成狀態 圖,然後用循序電路程序來設計控制邏輯,例 如,上圖的ASM圖即可畫成如下圖之狀態 圖 。時脈的考慮
傳統的流程圖與ASM圖最主要的差異在 於解釋不同操作間的時間關係
。ASM圖將整個方塊視為一個單元,在該 方塊內所指定的所有操作必須與系統自 狀態T 1 轉變至次一狀態時的相同時序脈 波之邊緣轉換同步,可以用圖來表示
。設計範例
設計一個帶有兩個正反器E及F,及一個四位元的二進 位計數器A的數位系統,在A內的各個正反器用A4,
A3,A2及A1來表示。A4是這個計數器的最大有效位 元(MSB),啟動信號S藉由清除計數器A和正反器F,可 用來啟動系統操作。然後由下一個時序脈波開始,將 計數器加1,並且持續增加直到操作停止。計數器位元 A3和A4可以決定操作的順序:
若A3 = 0,E被清除為0,同時繼續計數 若A3 = 1,E被設定為1,然後若A4 = 0,則繼續計數,但是如果A4 = 1,則F在下一個時序脈波時,被設定為 1,而系統停止計數。
然後若S = 0,則系統保留在初始狀態,若S = 1,則重 複這個操作週期。設計範例的 ASM 圖
設計範例的操作序列
在ASM圖裡的每一個方塊所指示的操作,都是在同一 時序脈波期間內被執行。方塊中的狀態盒及條件盒內 所指明的操作都是在資料處理器的區域內被執行。而 由一狀態轉變至另一狀態,則是在控制邏輯中執行。表8-2列出每個時序脈波之後,計數器與兩個正反器的 值 。
觀察表8-2,在E所執行的操作似乎延遲一個計時脈表 8-2
計 數 器 正 反 器
A4 A3 A2 A1 E F 條 件 狀 態
0 0 0 0 1 0
0 0 0 1 0 0
0 0 1 0 0 0
0 0 1 1 0 0
A3 = 0 , A4 = 0 T1
0 1 0 0 0 0
0 1 0 1 1 0
0 1 1 0 1 0
0 1 1 1 1 0
A3 = 1 , A4 = 0
1 0 0 0 1 0
1 0 0 1 0 0
1 0 1 0 0 0
1 0 1 1 0 0
A3 = 0 , A4 = 1
1 1 0 0 0 0 A3 = 1 , A4 = 1
1 1 0 1 1 0 T2
1 1 0 1 1 1 T0
資料處理器的設計
資料處理器的設計要求是在狀態盒及條
件盒內加以說明
資料處理器的設計
計數器除了做同步清除操作時要有額外的邏輯閘,其 餘都與圖6-12的計數器相似, 當控制在狀態T1
時,每個時脈週期都可以讓計數器加 1,而且只有在控制狀態T0
與S等於1時才會被清除。這 種有條件的操作需要一個AND閘來保證兩個條件同時 成立,其他兩個條件的操作則是利用其他兩個AND閘 來做正反器E的設定或清除。 在狀態T2
期間,正反器F是非條件式的設定,注意,所 有的正反器與暫存器,包括在控制裡的正反器,都是 使用一個共同的計時脈波。暫存器轉換階層描述
暫存器轉移階層
– 主要是藉由指定暫存器在系統中,及操作如 何被執行,以及控制的順序來加以描述。
– 控制資訊及暫存器轉移操作可以被分開表 示。
– 狀態圖說明了控制順序,而狀態圖的資訊則
設計範例暫存器轉換階層描述
狀態表
狀態圖可以轉換成狀態表,因此控制器的循序 電路可以依據此狀態表來設計。– 首先,我們必須在ASM圖上指定二進位值給每一個 狀態,對於在控制循序電路裡的n個正反器,其 ASM圖最多可容量2
n
種不同的狀態。– 控制器的狀態表是現在狀態與輸入和其對應的次態 與輸出的對照表,在大部份的情況下,有許多隨意 的輸入條件必須包括進去,所以在處理狀態表時將 這些考慮進去是相當合理的。
控制狀態表
兩個正反器,並將其標記為G1與G2。
輸入是取自於判斷盒的條件
輸出則相當於控制的現在狀態
目前狀態 輸入 次一狀態 輸出
目前狀態
符號 G1 G0 S A3 A4 G1 G0 T0 T1 T2
T0 0 0 0 X X 0 0 1 0 0
T0 0 0 1 X X 0 1 1 0 0
T1 0 1 X 0 X 0 1 0 1 0
T1 0 1 X 1 0 0 1 0 1 0
T1 0 1 X 1 1 1 1 0 1 0
T2 1 1 X X X 0 0 0 0 1
控制邏輯
循序電路設計程序在第五章已經介紹
過,若將這種程序應用在表8-3,我們需
要用五個變數的卡諾圖來化簡輸入函
數,這是因為有五個五個變數列在表中
的”現在狀態”及”輸入”這兩欄之下,我
控制邏輯圖
設計範例的 HDL 描述
設計的三個階層:– 構造的描述:
• 最詳細也是最低的階層,而用物理元件及元件之間的連 接來說明數位系統的設計。
– RTL描述
• 是利用暫存器,操作的執行及操作順序的控制來說明數 位系統設計。
– 基礎演算法的行為描述。
• 大多是在觀念的階層。描述設計的功能是採用相似於程
式語言的程序演算法。
RTL 描述
可以被區分為三個部份– 第一部份是定義此設計裡的輸入、輸出及一些暫存 器
• 所有的輸入是S(開始),CLK(時脈),CLR(清除)。至於啟動 控制狀態至T
0則需要清除輸入,而輸出是正反器E及F和暫 存器A。
– 第二部份則是控制順序
• 用兩個always指令來說明,第一個always區塊提供了兩個 操作:CLR輸入啟動了現在狀態到T
0,利用時脈,正緣觸 發的CLK和狀態轉移做同步。第二個always區塊則包含了 一個說明從現在狀態轉到下一狀態的CASE條件
– 至於第三部份是提供暫存器轉移操作與輸出
• non-blocking指定(用符號<=)則被暫存器轉移操作所使用,
在控制狀態T1期間,這是特別的重要。
• 若使用blocking指定,則有兩個敘述必須要被使用,首先 是檢查E的敘述,最後是A增加1的敘述。
HDL Example 8-2
//RTL description of design example (Fig.8-11) module Example_RTL (S,CLK,Cir,E,F,A);
//Specify inputs and outputs //See block diagram Fig. 8-10 input S,CLK,Cir;
output E, F;
output [4:1] A;
//Specify system registers
reg [4:1] A; //A register
always @(posedge CLK or negedge Clr) if (~Clr) pstate = TO; //Initial state else pstate <= nstate; //Clocked operations always @ (S or A or pstate)
case (pstate)
TO: if (S) nstate = Tl; else nstate = TO;
Tl: if (A[3] & A[4]) nstate = T2; else nstate = Tl;
T2: nstate = TO;
endcase
//Register transfer operations //See list of operation Fig.8-11(b) always @ (posedge CLK)
case (pstate) TO: if (S)
begin
A <= 4'bOOOO;
F <= 1'bO;
end Tl:
begin
A <= A + 1'b1;
if (A[3]) E <= 1'bl;
else E <= 1'b0;
end T2: F <= I'bl;
endcase endmodule
設計描述的測試
測試平台模組(在4-11節裡說明了撰寫測試平 台的程式),這個測試模組產生了S,CLK,CLR信號,同時檢查暫存器A,E及F所得到的 結果。
HDL Example 8-3
//Test bench for design example
module test_design_example;
reg S, CLK, Clr;
wire [4:1] A;
wire E, F;
//Instantiate design example
Example_RTL dsexp (S,CLK.Clr,E,F,A);
initial begin
Cir = 0;S = 0;
CLK = 0;
#5 Clr = 1; S = 1;
repeat (32) begin
#5 CLK = ~ CLK;
end end initial
$monitor("A = %b E = %b F
= %b time = %0d".
A.E.F,$time);
endmodule
結構的描述
一個結構描述相當於一個電路的流程圖或是電 路的方塊圖。 圖8-10的方塊圖提供了結構描述所需的資訊電 路被分為三個部份:– 控制方塊、正反器E與F,及一些相關的邏輯閘、具 有同步清除的計時器
設計範例的結構描述可以參考HDL例題8-4,它包括了六個模組,但可以被區分成四部份:
模組功能
第一個模組宣告了此電路的輸入及輸出,出入 口的列表和用RTL描述所列的是相同的 使用控制模組來描述圖8-12的電路,在這個電 路裡的兩個正反器,其輸出為G1與G0,其輸 入為DG1與DG0,它們被宣告為wire的資料型 態。 在EF模組則依照相同的模型來描述兩個JK正反 器,首先被推導出來的是正反器的輸入方程 式,同時JK正反器則利用這些值當做輸入 最後的模組描述具有同步清除的計數器。 結構描述是利用例題8-3的測試平台來做測試動 作,至於結構描述的模擬結果,和RTL描述模 擬所得到的輸出結果是相同的。HDL Example 8-4
//Structural description of design example //See block diagram Fig. 8-10
module Example_Structure (S,CLK,Clr,E,F,A);
input S,CLK,Cir;
output E, F;
output [4:1] A;
//Instantiate control circuit
control ctl (S,A[3],A(4],CLK,Clr,T2,Tl,Clear);
//Instantiate E and F flip-flips E_F EF (Tl,T2,Clear,CLK,A[3],E,F);
//Instantiate counter
counter ctr (Tl,Clear,CLK,A) ; endmodule
//Control circuit (Fig. 8-12)
module control (Start,A3,A4,CLK,Clr,T2,Tl,Clear);
input Start,A3,A4,CLK,Cir;
output T2,Tl,Clear;
wire Gl,GO,DG1,DGO;
//Combinational circuit assign DG1 = A3 & A4 & Tl,
DG0 = (Start & -GO) | Tl, T2 = Gl,
Tl = GO & ~Gl, Clear = Start & ~G-0;
//Instantiate D flip-flop DFF G1F (Gl,DG1,CLK,Cir), G0F (GO,DGO,CLK,Cir) ; endmodule
//D flip-flop
module DFF (Q,D,CLK,Clr) ; input D,CLK,Cir;
output Q;
reg Q;
always @ (poaedge CLK or negedge Clr) if (~Clr) Q = 1'b0;
else Q = D;
endmodule
//E and F flip-flops
module E_F (Tl,T2,Clear,CLK,A3,E,F) ; input Tl,T2,Clear,CLK.A3;
output E,F ;
wire E,F,JE,KE,JF,KF;
//Combinational circuit assign JE = Tl & A3,
KE = Tl & ~A3.
JF = T2, KF = Clear;
//Instantiate JK flip-flop JKFF EF (E,JE,KE,CLK), FF (F,JF,KF,CLK);
endmodula
//JK flip-flop
module JKFF (Q,J,K,CLK);
input J,K,CLK;
output Q;
reg Q;
always @ (posedge CLK) case ({J,K})
2'b00: Q = Q;
2'b01: Q = 1'b0;
2'b10: Q = I'bl;
2'b11: Q = ~Q;
endcase endmodule
//counter with synchronous clear module counter (Count,Clear,CLK,A);
input Count,Clear,CLK;
output [4:1] A;
reg [4:1] A;
always @ (posadge CLK)
二進位乘法器
第二個設計範例,它代表一個二進位乘 法的硬體演算法,提出暫存器的結構來 完成此設計,然後藉由使用ASM圖來顯 示處理器及控制的設計。
在這節裡,硬體演算法是產生一個循序 電路的乘法器,它僅由一個加法器及一 個移位暫存器來形成。
二進位乘法器方塊圖
它接收加法器的結果同時它必須具有同步清除 的能力來重置暫存器為0。
正反器C必須設計成可接收輸入的進位同時也 要有同步清除的能力 暫存器Q是一個移位暫存器 計數器P是一個具有並行載入一個二進位常數 的二進位下數的計數器 暫存器B與Q需要有並行載入的能力,這是為 了能接收乘法操作一開始的乘數及被乘數。暫存器結構
被乘數儲存在暫存器B內,乘數則儲存在暫存器Q內,而部份乘積則在暫存器A內形成,同時儲存在暫存器A 與暫存器Q內,並加器用來將暫存器B的內容加到暫存 器A。
C正反器則是儲存加法動作後所產生的進位。 計數器P,起初設定一個等於乘數位元數的二進位數,此計數器會在每一個部份乘積形成後逐次遞減,當計
二進位乘法器 ASM 圖
二進位乘法器的數值例題
被乘數 B = 1011
C A Q P
乘數 Q 0 00000 10011 101
Q0 = 1 ; 加 B 10111
第一個部份的結果 0 10111 100
右移 CAQ 0 01011 11001
Q0 = 1 ; 加 B 10111
第二個部份的結果 1 00010 011
右移 CAQ 0 10001 01100
Q0 = 0 ; 右移 CAQ 0 01000 10110 010
Q0 = 0 ; 右移 CAQ 0 00100 01011 001
Q0 = 1 ; 加 B 10111
第五個部份的結果 0 11011
右移 CAQ 0 01101 10101 000
最後的結果 AQ = 0110110101
控制邏輯
數位系統可以被區分為兩個部分:一是在資料 處理器理的暫存器轉移設計,另一個是控制邏 輯設計。 至於控制邏輯設計事實上是設計循序電路的問 題,因此,最簡單的方法就是設計循序控制的 狀態圖 ASM圖和狀態圖相似,至於長方形的區塊用來 代表狀態盒,它是用來表示循序電路的狀態;而菱形的區塊則是用來代表決定盒,它是狀態 圖用來決定此條件是否可以讓狀態轉換至下一 狀態。
二進位乘法器的控制說明
控制的方塊圖
循序控制的輸入信號是S與Z,而輸出為 T 0 ,T 1 ,T 2 ,T 3 ,至於AND閘所產生的 信號L= T 2 Q 0 ,則是在狀態T 2 時,若Q 0 = 1,載入和到暫存器A所需的。
狀態指定
設計裡有一重要步驟就是指定一個二進 位碼的值到此狀態,
– 最簡單的指定方式可以直接參考表8-5所列 的二進位數,
– 另一相似的指定是格雷碼,當從一數到下一 個數時,格雷碼只有一個位元會改變。
表 8-5 控 制 的 狀 態 指 令
狀 態 二 進 位 格 雷 碼 O ne -hot
T0 00 00 0001
T1 01 01 0010
T 10 11 0100
控制邏輯設計
兩個特殊的設計程序
– 一個是用循序暫存器及解碼器
• 如同它的名字所隱含的意義,就是使用一個暫 存器來代表控制狀態。以及用一個解碼器來提 供相對應的每一個狀態的輸出。
– 另外一個是用每一狀態一個正反器的方 式。
• 結果就是將一個狀態一個正反器應用在循序電 路
循序暫存器及解碼器
二進位乘法的控制狀態圖有四個狀態及兩個輸入,如 果用循序暫存器及解碼器來完成,那麼暫存器需要兩 個正反器,以及一個2-to-4的解碼器 循序控制的狀態表列在表8-6裡,它是直接由圖8-15(a) 的狀態表所衍生出來的目前狀態 輸入 次一狀態 輸出
G1 G0 S Z G1 G0 T0 T1 T2 T3
循序暫存器及解碼器控制部分邏輯圖
它包含一個有兩個正反器G
1與G
0以及一個2-to-4解碼器的暫存 器,而解碼器的輸出被用來產生,下一個狀態邏輯的輸入就像控 制的輸出。而控制器的輸出應該連接到資料處理器讓暫存器操作 需求動作。
一個狀態一個正反器
循序電路用此方法設計使用了最多的正反器 乍看之下,此方法用了許多正反器應該會增 加系統的成本,但是,此方法提供了一些好 處只是還未看到;一個最簡單的好處就是從 ASM裡的實例或是狀態圖來設計此邏輯,如 果使用D型正反器就不需要狀態表或是激勵 表,若將操作再簡化,同時在不使用解碼器 的情形下將邏輯閘的數目減少,這樣就可以 減少設計的花費。一個狀態一個正反器的控制器
二進位乘法器的 HDL 描述
此描述被分成五部份– 第一部份列出所有的輸入和輸出
– 第二部份則宣告所有的暫存器,包括控制暫存器及 四個狀態的編碼。
– 第三部份是利用一個assign敘述來說明一個組合邏 輯電路
– 第四部份則依據圖8-15(a)的狀態圖來描述此控制的
HDL Example 8-5
// RTL description of binary multiplier
// Block diagram Fig. 8-13 and ASM chart Fig. 8-14 // n = 5 to compare with Table 8-4
module mltp(S,CLK,Clr,Binput.Qinput,C,A,Q,P) ; input S,CLK,Cir;
input [4:01 Binput.Qinput; //Data inputs output C;
output [4:0] A,Q;
output [2:0] P;
//System registers reg C;
reg [4:0] A,Q,B;
reg [2:0] P;
reg [1:0] pstate, nstate; //control register parameter T0=2'b00, Tl=2'b01, T2=2'bl0, T3=2'bll;
//Combinational circuit wire Z;
assign Z = ~|P; //Check for zero
//State transition for control //See state diagram Fig. 8-15(a)
always @(negedge CLK or negedgo Cir) if (~Clr) pstate = T0;
else pstate <= nstate;
always @(S or Z or pstate) case (pstate)
T0: if (S) nstate = Tl; else nstate = T0;
Tl: nstate = T2;
T2: nstate = T3 ; T3: if (Z) nstate = TO;
else nstate = T2;
endcase
//Register transfer operations //See register operation Fig. 8-15(b) always @(negedge CLK)
case (pstate)
TO: B <= Binput; //Input multiplicand
Tl: begin A <= 5'b00000;
C <= 1'b0;
P <= 3~b101; //Initialize counter to
n=5
Q <= Qinput; //Input multiplier
end T2: begin
P <= P - 3'bOOl; //Decrement counter if (Q[0])
{C,A} <= A + B; //Add multiplicand end
T3: begin
C <= 1'b0; //Clear C
A <= {C,A[4:1]}; //Shift right A Q <= {A[0],Q[4:l]}; //Shift right Q end
endcase
endnodule
測試乘法器
測試平台如HDL例題所示,被乘數和乘數是 輸入部份存在B與Q裡;而乘積是輸出,存 在A與Q內。我們也要檢查進位C及計數器P 的值,而這5位元的二進位輸入和表8-4裡用 的相同。 第二個啟動的敘述提供了13個時脈,每個時 脈有10個時間單位。 從狀態的轉移可以看出,狀態T2與T3的週期 在迴圈裡出現了5次,(每一個部份乘積)這需 要10時脈週期。至於另外的三個時脈週期是 T0,T1以及當Z=1時,返回狀態T0所需要 的。HDL Example 8-6
//Testing binary multiplier module test_mltp;
//Inputs for multiplier reg S,CLK,Clr;
reg [4:0] Binput,Qinput;
//Data for display wire C;
wire [4:0] A,Q;
wire [2:0] P;
//Instantiate multiplier
mitp mp(S,CLK,Clr,Binput,Qinput,C,A,Q,P), initiAl
begin
S=0; CLK=0; Clr=0;
#5 S=l; Clr=l;
Binput = 5'b10111;
Qinput = 5'b10011;
#15 S = 0;
end
乘法器的行為描述
通常,行為描述的基本演算法是不能被合成 的。HDL Example 8-7
//Behavioral description of multiplier
(n = 8)
module Mult (A,B,Q);
input [7:0] B,Q;
output [15:0] A;
reg [15:0] A;
always @ (B or Q)
A = B * Q;endmodul
使用多工器來的設計
組合邏輯電路可以使用多工器來取代邏 輯閘以完成電路
使用多工器來取代邏輯閘的結果可以形 成一種元件三層級的規則。
– 第一層級由多工器組成,可以決定暫存器的 次一狀態。
– 第二層級包含一個暫存器,他可以用來保留 現在的二進位狀態。
– 第三層級則是一個可以提供每一個控制狀態 不同輸出的解碼器。
具有四個控制輸入的 ASM 圖例題
多工器製作控制
多工器輸入條件
了方便多工器輸入的計算,我們準備了一個表以便 在ASM圖上表示每一個可能轉變的輸入條件。表8-7 即給出圖8-19 ASM圖的這種資訊目前狀態 次一狀態 輸入
G1 G0 G1 G0 輸入條件 MUX1 MUX2
0 0 0 0 w′
0 0 0 1 w
0 w
0 1 1 0 x
0 1 1 1 x′
1 x′
1 0 0 0 y′
1 0 1 0 yz′
1 0 1 1 yz
y yz z
y′+ = yz
1 1 0 1 y′ z
1 1 1 0 y
1 1 1 1 y′ z′
z y z y
y+ ′′= + ′ y′z+y′z′=y′
設計範例 - 計算在暫存器裡 1 的個數
所要設計的數位系統包含兩個暫存器R1 與R2,及一個正反器E。此系統可以計 算存放在暫存器R1內二進位數裡1的個 數,並將暫存器R2設定給此數。
此控制利用一個外部輸入S來啟動操
作,並使用兩個資料處理器的狀態輸入
E與Z。
Count-of-ones 電路的 ASM 圖
Count-of-ones 電路的方塊圖
設計範例的多工器輸入條件
目前狀態 次一狀態 多工器輸入
G1 G0 G1 G0 輸入條件 MUX1 MUX2
0 0 0 0 s′
0 0 0 1 s
0 s
0 1 1 0 z
0 1 1 1 z′ z′ 0
1 0 1 1 none 1 1
1 1 1 0 E′
1 1 0 1 E
E′ E