verilog設(shè)計--抽象層級:開關(guān)級-->門級-->RTL級-->算法級-->系統(tǒng)級
數(shù)字系統(tǒng)邏輯電路:組合邏輯+時序邏輯杰赛,組合邏輯負責(zé)運算鳖目,時序邏輯負責(zé)數(shù)據(jù)流動控制
對于數(shù)字系統(tǒng)的邏輯設(shè)計工程師而言洲敢,熟練地掌握門級败玉、RTL級蛀恩、算法級疫铜、系統(tǒng)級是非常重要的。而對于電路基本部件(如門双谆、緩沖器壳咕、驅(qū)動器等)庫的設(shè)計者而言席揽,則需要掌握用戶自定義源語元件(UDP)和開關(guān)級的描述。
1- 抽象層級
1-1 門級
門與開關(guān)是邏輯電路的基本結(jié)構(gòu)谓厘,數(shù)字電路可以完全分解為與非門邏輯(或者或非門)幌羞;
and 與門
nand 與非門
nor 或非門
or 或門
xor 異或門
xnor 異或非門
buf 緩沖器
not 非門
設(shè)計層次:門-->觸發(fā)器等功能模塊-->更高階功能模塊
1)門到功能模塊示例:
module flop(data,clock, clear, q, qb);
input data, clock,clear;
output q, qb;
nand #10 ndl (a, data, clock, clear),
? ? ? ? nd2 (b, ndata, clock),
? ? ? ? nd4(d, c,b, clear),
? ? ? ? nd5 (e, c, nclock),
? ? ? ? ? nd6 (f, d, nclock),
? ? ? ? nd8 (qb, q, f, clear):
nand #9? nd3 (c, a, d),
? ? ? ? nd7 (q, e, qb);
not #10? ivl(ndata, data)
? ? ? ? ? iv2 (nclock, clock);
endmodule
2)已有模塊到更高階模塊示例:
module hardreg(d, clk, clrb, q):
input clk, clrb;
input [3:0] d;
output [3:0] q;
flop f1 (d[o], clk, clrb, q[o],),
? ? f2 (d[1], clk, clrb, q[1],),
? ? f3 (d[2], clk, clrb, q[2],),
? ? f4 (d[3],clk, clrb, q[3],);
endmodule
3)調(diào)用原語(user difined primitives)
primitive 元件名(輸出端口名,輸入端口名1庞呕,輸入端口名2新翎, …)
output 輸出端口名;
input 輸入端口名1, 輸入端口名2, …;
reg 輸出端口名;
initial begin
輸出端口寄存器或時序邏輯內(nèi)部寄存器賦初值(0住练,1地啰,或 X);
end
table
//輸入1 輸入2 輸入3 … : 輸出
邏輯值 邏輯值 邏輯值 … : 邏輯值 ;
邏輯值 邏輯值 邏輯值 … : 邏輯值 ;
邏輯值 邏輯值 邏輯值 … : 邏輯值 ;
… … … … : … ;
endtable
endprimitive
注意點:
1) UDP只能有一個輸出端讲逛,而且必定是端口說明列表的第一項亏吝。
2) UDP可以有多個輸入端,最多允許有10個輸入端盏混。
3) UDP所有端口變量必須是標(biāo)量蔚鸥,也就是必須是1位的。
4) 在UDP的真值表項中许赃,只允許出現(xiàn)0止喷、1、X三種邏輯值混聊,高阻值狀態(tài)Z是不允許出現(xiàn)的弹谁。
5) 只有輸出端才可以被定義為寄存器類型變量。
6) initial語句用于為時序電路內(nèi)部寄存器賦初值句喜,只允許賦0预愤、1、X三種邏輯值咳胃,缺省值為X植康。
1-2 行為級
行為級描述更為抽象,不關(guān)注底層具體的電路實現(xiàn)細節(jié)展懈,而是直觀的行為描述销睁。系統(tǒng)可通過行為級模塊化,并通過邏輯行為的驗證仿真來確保設(shè)計符合預(yù)期存崖。
綜合工具:行為級-->門級榄攀,行為級抽象,便于理解金句,門級對應(yīng)于具體電路結(jié)構(gòu);
1-2-1 仿真驗證
為了已設(shè)計的模塊進行檢驗往往需要產(chǎn)生一系列信號作為輸出吕嘀,輸入到已設(shè)計的模塊违寞,并檢查已設(shè)計模塊的輸出贞瞒,看它們是否符合設(shè)計要求。行為描述建模即可用于驗證仿真趁曼。
仿真驗證涉及到時鐘军浆、復(fù)位及初始狀態(tài)的設(shè)置,過程中的激勵輸入及對應(yīng)輸出信號的變化觀測挡闰。
示例:
module gen_clk(clk, reset);
output clk;
output reset;
reg clk, reset;
initial
begin
reset = l;clk=0;
//initialstate
#3 reset =0;
#5 reset = l;
end
always #5 clk=clk;
endmodule
1-2-2 自頂向下的設(shè)計
行為描述建模也常常用于復(fù)雜數(shù)
字邏輯系統(tǒng)的頂層設(shè)計乒融,也就是通過行為建模把一個復(fù)雜的系統(tǒng)分解成可操作的若干個模塊,每個模
塊之間的邏輯關(guān)系通過行為模塊的仿真加以驗證摄悯。
可綜合性:邏輯綜合就其實質(zhì)而言是設(shè)計流程中的一個階段赞季,在這一階段中將較高級抽象層次的描述自動地轉(zhuǎn)換成較低層次描述。最終目的是得到由門電路或RTL奢驯、電路圖描述的可實現(xiàn)電路申钩。
示例:
RISC 8bitCPU九個基本部件:累加器(ACCUMULATOR)、RISC算術(shù)運算單(RISC_ALU)瘪阁、數(shù)據(jù)控制器(DATACTRL)撒遣、動態(tài)存儲器(RAM)、指令寄存器(INSTRUCTION REGISTER)管跺、狀態(tài)控制器(STATE CONTROLLER)义黎、程序計數(shù)器(PROGRAMM COUNTER)、地址多路器(ADDRMUX)和時鐘發(fā)生器(CLKGEN)豁跑。
逐塊建模驗證廉涕,綜合、優(yōu)化贩绕、布局火的、布線、后仿淑倾,如驗證通過馏鹤,則設(shè)計完成。
2- 數(shù)字系統(tǒng)
復(fù)雜的數(shù)字系統(tǒng)中既有組合邏輯娇哆,也有時序邏輯湃累。一般情況下,組合邏輯可以用來完成簡單的邏輯功能,如多路器、與碍讨、或治力、非邏輯運算、加法和乘法等算術(shù)運算勃黍。而時序邏輯則可以用來產(chǎn)生與運算過程有關(guān)的(按時間節(jié)拍)多個控制信號序列宵统。在可綜合的硬件描述語言設(shè)計的復(fù)雜運算邏輯系統(tǒng)中,往往用同步狀態(tài)機來產(chǎn)生與時鐘節(jié)拍密切相關(guān)(同步)的多個控制信號序列,用它來控制多路器或數(shù)據(jù)通道的開啟/關(guān)閉,來使有限的組合邏輯運算器資源得到充分的運行,并寄存有意義的運算結(jié)果,或把它們傳送到指定的地方,如存儲單元或者有關(guān)組件的輸入/輸出覆获。
組合邏輯輸出必須暫存在寄存器中马澈,且暫存時機必須合適瓢省,以避免冒險競爭的不穩(wěn)定信號存入,影響后級邏輯操作與處理痊班。為增強可靠性勤婚,需采用同步時序設(shè)計。
(1)組合邏輯:輸出只是當(dāng)前輸人邏輯電平的函數(shù)(有延時),與電路的原始狀態(tài)無關(guān)涤伐。輸入信號中的任何一個發(fā)生變化時,輸出都有可能會變化,與電路目前所處的狀態(tài)沒有任何關(guān)系(即邏輯電路沒有記憶部件)馒胆。
(2)時序邏輯:輸出不只是當(dāng)前輸人的邏輯電平的函數(shù),還與電路目前所處的狀態(tài)有關(guān)的邏輯電路(即邏輯電路有記憶部件)。同步時序邏輯是數(shù)字系統(tǒng)設(shè)計核心凝果,時序邏輯通常結(jié)合狀態(tài)機設(shè)計祝迂。
2-1 組合邏輯
組合邏輯部件:如多路器、比較器豆村、加法器液兽、乘法器、雙向三態(tài)門和總線等掌动,關(guān)注邏輯表達四啰、電路結(jié)構(gòu)和性能。
2-1-1 一些純組合邏輯
2-1-1-1 加法器
1)真值表&邏輯表達式
Xi粗恢、Yi為2個加數(shù)柑晒,Si為和,Ci-1為來自低位的進位眷射,Ci為高位進位匙赞;
由真值表可得如下邏輯表達式:
與、與非表達式
異或表達式
2)verilog HDL描述
4位全加器:
module add_4(X妖碉,Y涌庭,sum,C);
input [3 :0]X,Y;
output [3:0]sum ;
output C:
assign {C,Sum)=X+Y;
endmodule
16位全加器:
module add_16(X欧宜,Y坐榆,sum,C);
input [15 :0] X冗茸,Y;
output [15 :0]sum ;
output C席镀;
assign {C,Sum}=X+Y;
endmodule
3)電路結(jié)構(gòu)
多位加法器可由一位加法器并行拼接,比串行提升效率夏漱,采用超前進位以減少逐位進位延遲豪诲;
示例-4位二進制超前進位全加器
示例-16位二進制超前進位全加器
在作卷積運算和快速傅里葉變換時,由于多位并行加法器由多層邏輯構(gòu)成挂绰,存在多級門和布線延遲并隨位數(shù)增加累積屎篱,使之頻率受限(時鐘節(jié)拍大于運算電路延遲前提要求),為此可在組合邏輯層加入多個寄存器組暫存中間結(jié)果--即流水線來提高運算速度
4)性能
i.串行-->并行
ii.逐位進位-->超前進位
iii.綜合器優(yōu)化,流水線處理
2-1-1-2 乘法器
乘法器是加法器的擴展芳室,故8位可由2個4位擴展专肪,主要關(guān)注電路和運算時間延遲,同時綜合工具的設(shè)置也影響控制運算時間延遲堪侯。
1)邏輯表達式
設(shè)2個n位二進制數(shù)X、Y荔仁,X:Xn-1...X1X0,Y;Yn-1...Y1Y0先朦,則XY乘積為2n位二進制數(shù)似炎,Pij=YiXj;
示例-2個4位二進制XY相乘
2)verilog HDL描述
module mult_4(X,Y,Product);
input [3 :0] X遇骑,Y;
output [7:0] Product;
assign Product=X* Y;
endmodule
3)電路結(jié)構(gòu)
快速乘法器的網(wǎng)格形式疊帶陣列結(jié)構(gòu)如下卖毁,每個乘法處理單元MU由與門和全加器構(gòu)成,最長延時為1個與門與8個全加器傳輸延時落萎。
為提高乘法運算速度亥啦,可采用進位節(jié)省乘法器,第二行乘法處理單元中全加器可改為半加器练链,執(zhí)行一次乘法最長延時為1個與門翔脱、3個全加器、三位超前進位加法器傳輸延時媒鼓。
4)性能
i.串行-->并行
ii.逐位進位-->超前進位
iii.綜合器優(yōu)化届吁,流水線處理,速度與面積的平衡
2-1-1-3 比較器
1)真值表&邏輯表達式
i.1位二進制比較器
與非表達式
ii.多位比較器
A.先從高位比起,高位大的數(shù)值一定大绿鸣。
B.若高位相等,則再比較低位數(shù),最終結(jié)果由低位的比較結(jié)果決定疚沐。
邏輯表達式
2)verilog HDL描述
module compare_n(X,Y潮模,XGY亮蛔,XSY,XEY);
input [width-l:0] X再登,Y;
output XGY,XSY尔邓,XEY;
reg XGY,XSY锉矢,XEY;
parameter width=8;
always @( Xor Y ) //每當(dāng)X或Y變化時
? ? begin
? ? ? ? if(X= =Y)
? ? ? ? XEY=1; //設(shè)置X等于Y的信號為1
? ? ? ? else
? ? ? ? XEY=0;
? ? ? ? if(X>Y)
? ? ? ? XGY=1; //設(shè)置X大于Y的信號為1
? ? ? ? else
? ? ? ? XGY=0;
? ? ? ? if(X<Y)
? ? ? ? XSY=1; //設(shè)置X小于Y的信號為1
? ? ? ? else
? ? ? ? XSY=0;
? ? end
endmodule
3)電路結(jié)構(gòu)
1位比較器:
4位比較器:
2-1-1-4 多路器
1)真值表&邏輯表達式
示例-4路選通器
地址1地址2輸出
邏輯表達式
2)verilog HDL描述
module Mux_4(addr,D0,D1,D2,D3,Y,nCs);
input [1:0] addr;
input [width-1:0] D0,D1,D2,D3;
input nCS;
output [width-1:0] Y;
reg [width-1:0] Y;
parameter width=4;
always @ (addr or D0 or D1 or D2 or D3 or mCS)
begin
? ? if(!nCS)
? ? ? ? case(addr)
? ? ? ? 2'b00:Y=D0;
? ? ? ? 2'b01:Y=D1;
? ? ? ? 2'b10:Y=D2;
? ? ? ? 2'b11:Y=D3;
? ? ? ? endcase
? ? else
? ? ? ? Y=0;
end
endmodule? ? ? ?
3)電路結(jié)構(gòu)
2-1-1-5 總線
部件間數(shù)據(jù)流通的公共通道梯嗽,各運算部件與數(shù)據(jù)寄存器組可通過帶控制端的三態(tài)門與總線連接/隔離;
1)verilog HDL描述
示例-*3乘法器輸出
module SampleOfBus( DataBus,link bus,write )沽损;
inout [11:0] DataBus;//12位寬的總線雙向端口
input link_bus;//向總線輸出數(shù)據(jù)的控制電平
reg [11:0] outsigs;//模塊內(nèi)12位寬的數(shù)據(jù)寄存器
reg [13:0l insigs;//模塊內(nèi)14位寬的數(shù)據(jù)寄存器
assign DataBus=(link bus)? outsigs:12'hzzz;
//當(dāng)linkbus為高電平總線輸出計算結(jié)果
always @(posedge write)
begin
insigs<=DataBus * 3;end
//每當(dāng)write信號上跳沿時
//接收總線上數(shù)據(jù)并乘以3
//把計算結(jié)果存人insigs
endmodule
2)電路結(jié)構(gòu)
2-1-1-6 流水線
多分級處理灯节,分級的處理時間差不多,操作時間上可重疊,上級輸出為下級輸入炎疆。流水線的設(shè)計消耗寄存器資源換取速度卡骂,對于復(fù)雜邏輯的流水線設(shè)計需綜合考慮可編程邏輯器件的寄存器資源與延遲的可預(yù)測性。
基本結(jié)構(gòu):將適當(dāng)劃分的n個步驟單向串聯(lián)形入。
首次延遲:從輸入到輸出最長路徑初始化時間全跨;
吞吐延遲:執(zhí)行一次重復(fù)性操作所需時間;
流水線示意圖
流水線設(shè)計的第一級寄存器
示例:流水線加法器&乘法器
流水線設(shè)計分級:
1)加法器輸入數(shù)據(jù)產(chǎn)生器和傳送器亿遂;
2)數(shù)據(jù)產(chǎn)生器的超前進位浓若;
3)數(shù)據(jù)產(chǎn)生、傳送功能和超前進位求和電路蛇数;
由于C-1既是第一級邏輯輸入挪钓,也是二級邏輯輸出,故需增加2級寄存器耳舅;
由于發(fā)生器輸出作求和單元輸入碌上,也需要多次插入寄存器;
由于Cout既是下級求和輸入浦徊,也是求和單元輸出馏予,也需2級寄存器;
2-1-2 組合邏輯設(shè)計
組合邏輯按照部件模塊設(shè)計辑畦,需要對組合邏輯部件(如加法器吗蚌、乘法器、比較器纯出、多路器蚯妇、三態(tài)門等)邏輯表達、電路結(jié)構(gòu)暂筝、性能深入了解箩言,并提供注釋說明以順利通過檢錯、測試焕襟,方便維護改進陨收。
設(shè)計工作包括:1)電路模塊設(shè)計;2)測試模塊設(shè)計鸵赖;3)設(shè)計文檔編寫整理务漩;
2-2 時序邏輯
時序邏輯:數(shù)據(jù)寄存,數(shù)據(jù)流動控制它褪;
運算可以通過組合邏輯實現(xiàn)饵骨,但是運算結(jié)果的輸入輸出需要穩(wěn)定一定時間保存到寄存器中暫存,通常通過同步狀態(tài)機對寄存器組間的數(shù)據(jù)流動進行精確控制茫打。
2-2-1 一些時序邏輯
2-2-1-1 數(shù)據(jù)寄存
數(shù)據(jù)通路開關(guān)可通過組合邏輯實現(xiàn)居触,但組合邏輯的瞬間不確定性無法避免妖混,為避免采樣到競爭冒險時刻的不穩(wěn)定信號,需要穩(wěn)定時間片段大于最長路徑延遲以達到組合邏輯理想輸出目的轮洋。
組合邏輯到時序邏輯的配合以完成數(shù)據(jù)的穩(wěn)定傳輸制市。
示例1組合邏輯8位數(shù)據(jù)通路開關(guān):
示例2時鐘同步8位寄存器組模塊(帶使能&復(fù)位)
通過使能信號開關(guān),在變化的數(shù)據(jù)流中選取有效數(shù)據(jù)保存到寄存器組弊予。
module register8(ena,clk,data,rst,out);
input ena,clk,rst;
input [7;0] data;
output [7:0] out;
reg [7:0] out;
always @(posedge clk)
if(!rst)
out <=0;
else
if(ena)
out<=data;
//雖然沒有寫else項,顯然,如果cna為低電平,即使時鐘變化,data變化,但out 仍保持不變
endmodule
2-2-1-2 數(shù)據(jù)流動控制
運算可以通過組合邏輯實現(xiàn)祥楣,但運算的輸入需要穩(wěn)定一段時間才能得到穩(wěn)定輸出(穩(wěn)定時間受門級電路及布線延時影響),輸出作為下級輸入也需要穩(wěn)定一段時間汉柒,因此采用寄存器組暫存運算中間數(shù)據(jù)荣堰。可通過同步狀態(tài)機實現(xiàn)寄存器組間的數(shù)據(jù)流動精確控制竭翠。
示例如下:
A、B薇搁、C寄存運算輸入斋扰、中間和輸出數(shù)據(jù),S1啃洋、S3传货、S5控制組合邏輯作運算,S2宏娄、S4问裕、S6三態(tài)開關(guān)控制A、B孵坚、C的輸出到總線/與總線隔離粮宛。配合時鐘對S1~S6的精確控制,可避免競爭冒險卖宠,暫存運算的穩(wěn)定結(jié)果巍杈。
生成與時鐘精確配合的開關(guān)時序是計算邏輯的核心。
通過狀態(tài)機控制扛伍,嚴(yán)格按時鐘節(jié)拍開關(guān)數(shù)據(jù)通道來硬件構(gòu)成復(fù)雜計算邏輯筷畦,擴大硬件規(guī)模&時鐘頻率即可得到高度并行的高速計算邏輯。
2-2-2 時序邏輯設(shè)計
2-2-2-1 設(shè)計中啟用同步時序
時序同步設(shè)計是數(shù)字系統(tǒng)設(shè)計的核心刺洒。
異步時鐘任何時刻都有可能發(fā)生,所以記錄狀態(tài)的寄存器組的輸出在任何時刻都有可能發(fā)生變化鳖宾。而同步時序邏輯中的觸發(fā)輸人至少可以維持一個時鐘后才會發(fā)生第二次觸發(fā)。因此同步時序邏輯更可靠逆航。
注意:若在同一個時鐘的正跳沿(或負跳沿)下對寄存器組既進行輸人又進行輸出,很有可能由于門的延遲使輸人條件還未確定時,就輸出了下一個狀態(tài),這種情況會導(dǎo)致邏輯的紊亂鼎文。組合電路的延遲與時鐘到各觸發(fā)器的差值小于一個時鐘周期的寬度的情況下,可認為利用上一個時鐘為下一個時鐘創(chuàng)造觸發(fā)條件的方式是安全可靠的纸泡。
注意:在begin end 塊中同時有許多個非阻塞賦值,則它們的賦值順序是同時的,并不是按先后次序賦值漂问。實際上它們表示的是同時賦人上一個時鐘沿時刻送人寄存器的值赖瞒。這與使用同一時鐘沿觸發(fā)的許多寄存器在同一個使能控制信號下賦值是完全一致的。所有被賦的值在上一時鐘沿前就已經(jīng)保存在寄存器中,它們有足夠的時間傳送到被賦值的寄存器的數(shù)據(jù)端口蚤假。當(dāng)時鐘沿到來時被賦值都已經(jīng)穩(wěn)定,所以存人的寄存器的數(shù)值是可靠的栏饮。用這種方法可以避免由組合邏輯產(chǎn)生的冒險與競爭。
同步措施:
1)全局時鐘網(wǎng)絡(luò)布線磷仰,分支一致性設(shè)計袍嬉;
2)平衡樹結(jié)構(gòu),每一級增加緩沖器灶平;
3)降低時鐘頻率伺通;
4)非阻塞賦值;
示例:
c=a&b,由于a逢享、b的變化其結(jié)果在不同時刻是不一致的罐监,引入時間刻度,則可以得到確定結(jié)果避免冒險和競爭瞒爬;
2-2-2-2 數(shù)據(jù)接口同步方法
數(shù)據(jù)接口同步是數(shù)字系統(tǒng)設(shè)計的重難點弓柱,也是常見問題;
不可取的典型方法(溫升或芯片更迭易產(chǎn)生時序混亂):
1)采用緩沖器或是非門調(diào)整延時侧但;
2)相差90°正負沿采樣矢空;
不同情況的數(shù)據(jù)接口同步方法:
1)前級輸出延時隨機:同步機制,通過RAM/FIFO緩存再讀禀横,前級時鐘存屁药,本級時鐘讀,需提供空滿信號管理讀寫柏锄,防止數(shù)據(jù)丟失酿箭。
2)數(shù)據(jù)有固定幀,起始位置確定:增加同步頭指示绢彤,增加一條信號線指示起始位置/數(shù)據(jù)中增加特殊碼型同步頭七问;
3)級聯(lián)模塊基本時鐘是異步時鐘域,前級輸出到下級的準(zhǔn)確性:時鐘同頻茫舶,可直接對輸入數(shù)據(jù)寄存器采樣械巡;對于不同頻異步時鐘,需要做2次采樣饶氏,防止數(shù)據(jù)不穩(wěn)定態(tài)傳播讥耗,但不能保證2級寄存器采樣后的數(shù)據(jù)完全正確,有一定出錯可能疹启;——為避免異步時鐘域錯誤古程,常采用雙口RAM\FIFO通過前級時鐘寫數(shù)據(jù),本級時鐘讀數(shù)據(jù)喊崖,配合空滿管理讀寫控制避免數(shù)據(jù)丟失挣磨;
小結(jié):配合時鐘的邏輯設(shè)計是數(shù)字系統(tǒng)設(shè)計的核心雇逞。