1.FIFO深度計(jì)算
1.1讀寫(xiě)同時(shí)進(jìn)行的FIFO
??對(duì)于讀寫(xiě)同時(shí)進(jìn)行的FIFO,有一個(gè)簡(jiǎn)便計(jì)算深度的公式:
??FIFO_Depth >= Burst_length -Burst_length* (rd_clk/ wr_clk)*(rd_rate) (其中Burst_length可以認(rèn)為是連續(xù)兩個(gè)cycle可以寫(xiě)入的數(shù)據(jù)量)
??如:同步fifo,100個(gè)cycle可以寫(xiě)入80個(gè)數(shù)據(jù),10個(gè)cycle可以讀出8個(gè)數(shù)據(jù),fifo的深度為:160-160×1×(8/10) = 32
1.2fA > fB 讀寫(xiě)之間沒(méi)有空閑周期或延遲周期相同
??例題如下:
??寫(xiě)速率fA = 80MHz,讀速率fB = 50MHz,突發(fā)長(zhǎng)度Burst Length = 120,讀寫(xiě)之間沒(méi)有空閑周期,是連續(xù)讀寫(xiě)一個(gè)突發(fā)長(zhǎng)度。
??題解:
??寫(xiě)一個(gè)數(shù)據(jù)需要的時(shí)間 = 1 / 80MHz = 12.5ns,寫(xiě)一個(gè)突發(fā)需要的時(shí)間 = 120 * 12.5ns = 1500ns,讀一個(gè)數(shù)據(jù)需要的時(shí)間 = 1 / 50MHz = 20ns,每1500ns,120個(gè)數(shù)據(jù)被寫(xiě)入FIFO,但讀一個(gè)數(shù)據(jù)需要20ns的時(shí)間??梢杂?jì)算出,1500ns內(nèi)讀出多少個(gè)數(shù)據(jù),1500 / 20 = 75。剩下的沒(méi)有讀出,就存在FIFO中,則需要120 - 75 = 45。
??所以這種情況下,需要的FIFO最小深度為45。
??當(dāng)然,如果在沒(méi)有空閑周期或延遲周期相同的情況下,讀速率大于等于寫(xiě)速率,那么FIFO的深度為1就行了。
1.3fA > fB讀寫(xiě)都有不同的空閑周期(IDLE Cycles)例題如下:
??寫(xiě)速率fA = 80MHz,讀速率fB = 50MHz,突發(fā)長(zhǎng)度Burst Length = 120,兩個(gè)連續(xù)寫(xiě)入之間的空閑周期為 = 1,兩個(gè)連續(xù)讀取之間的空閑周期為 = 3。
??題解:
??寫(xiě)一個(gè)數(shù)據(jù)需要的時(shí)間 = 2 * (1 / 80MHz) = 25ns,寫(xiě)一個(gè)突發(fā)需要的時(shí)間 = 120 * 25ns = 3000ns,讀一個(gè)數(shù)據(jù)需要的時(shí)間 = 4 * (1 / 50MHz) = 80ns,每3000ns,120個(gè)數(shù)據(jù)被寫(xiě)入FIFO,但讀一個(gè)數(shù)據(jù)需要80ns的時(shí)間??梢杂?jì)算出,3000ns內(nèi)讀出多少個(gè)數(shù)據(jù),3000 / 80 = 37.5。剩下的沒(méi)有讀出,就存在FIFO中,則需要120 - 37.5 = 82.5。
??所以這種情況下,需要的FIFO最小深度為83。
??另一種情況是讀寫(xiě)使能百分比,與這種情況基本相同。比如寫(xiě)使能占空比為50%,可以理解為兩個(gè)周期寫(xiě)一次數(shù)據(jù),讀使能同理。
??那么,對(duì)于在讀寫(xiě)都有不同的空閑周期的情況下,讀速率大于等于寫(xiě)速率,計(jì)算方法也是類(lèi)似。可以按照這類(lèi)方法一步一步計(jì)算即可。
1.4總結(jié)
??這些題目要注意突發(fā)長(zhǎng)度,理解好突發(fā)長(zhǎng)度后,直接套用計(jì)算步驟即可。
2.latch使用的邏輯門(mén)數(shù)量
??5個(gè),分別是四個(gè)與非門(mén),一個(gè)非門(mén)
3.時(shí)序幫助
??時(shí)鐘速率主要影響的是建立時(shí)間 Setup Timing,保持時(shí)間 Hold Timing 主要和路徑延遲有關(guān),保持時(shí)間希望組合邏輯路徑延遲越大越好,較高的工作電壓會(huì)減少組合邏輯的延遲,所以希望對(duì) Hold Timing 有幫助的是較低的工作電壓,組合邏輯路徑延遲更大一點(diǎn)
4.縮寫(xiě)簡(jiǎn)稱(chēng)
?? STA :Static Timing Analysis ,靜態(tài)時(shí)序分析
?? DTA :Dynamic Timing Analysis ,動(dòng)態(tài)時(shí)序分析
?? ROM:Read Only Memory,只讀存儲(chǔ)器
?? RAM:Random Access Memory,隨機(jī)存取存儲(chǔ)器
?? SRAM:Static Random-Access Memory,靜態(tài)隨機(jī)存取存儲(chǔ)器
?? DRAM:Dynamic Random Access Memory,動(dòng)態(tài)隨機(jī)存儲(chǔ)器
?? SDRAM:Synchronous Dynamic Random Access Memory,同步動(dòng)態(tài)隨機(jī)存儲(chǔ)器
?? EEPROM:Electrically Erasable Programmable Read Only Memory,電可擦除可編程只讀存儲(chǔ)器
?? DDR:Double Data Synchronous Dynamic Random Access Memory,雙倍速率同步動(dòng)態(tài)隨機(jī)存儲(chǔ)器
?? FLASH: Flash Memory,閃存
?? AMBA : Advanced Microcontroller Bus Architecture,高級(jí)微控制器總線體系結(jié)構(gòu)
?? AHB : Advanced High-performance Bus 高級(jí)高性能總線
?? ASB : Advanced System Bus 高級(jí)系統(tǒng)總線
?? APB : Advanced Peripheral Bus 高級(jí)外圍總線
5.驗(yàn)證
??fork-join 是并行執(zhí)行的,所以里面的延時(shí)就取決于最大的延時(shí)
6.不能在module中獨(dú)立存在的語(yǔ)句塊
??forever 通常是包含在 initial begin end 中,用來(lái)生成時(shí)鐘,無(wú)法單獨(dú)存在
7.STA和DTA的個(gè)人理解
??靜態(tài)時(shí)序分析(STA):比如vivado的綜合或者布線后的report timing summary,遍歷電路存在的所有時(shí)序路徑,根據(jù)給定工作條件(PVT)下的時(shí)序庫(kù).lib 文件計(jì)算信號(hào)在這些路徑上的傳播延時(shí),檢查信號(hào)的建立和保持時(shí)間是否滿足約束要求, 根據(jù)最大路徑延時(shí)和最小路徑延時(shí)找出違背時(shí)序約束的錯(cuò)誤。
??動(dòng)態(tài)時(shí)序分析(DTA):可以稱(chēng)作動(dòng)態(tài)時(shí)序仿真,對(duì)RTL電路的功能性仿真,需要自己編寫(xiě)testbench進(jìn)行測(cè)試。
8.FPGA開(kāi)發(fā)流程
??系統(tǒng)規(guī)劃
??RTL設(shè)計(jì)
??功能仿真
??綜合、編譯、布局布線
??時(shí)序仿真
??板級(jí)驗(yàn)證
9.setup time和hold time
??在時(shí)鐘有效沿到來(lái)之前,數(shù)據(jù)必須維持一段時(shí)間保持不變,這段時(shí)間就是建立時(shí)間 Tsetup
??在時(shí)鐘有效沿到來(lái)之后,數(shù)據(jù)必須維持一段時(shí)間保持不變,這段時(shí)間就是保持時(shí)間 Thold
??一些需要知道的名詞定義:
??1.走線延遲:數(shù)字邏輯電路中,任何輸出信號(hào)到輸入信號(hào)之間都有一定的線路延遲,把這種線路延遲叫做走線延遲。
??2.組合延遲Tcomb:當(dāng)進(jìn)行門(mén)電路邏輯運(yùn)算時(shí)產(chǎn)生的延遲。——一般為最長(zhǎng)的延遲路徑
??3.寄存器延遲Tco:寄存器內(nèi)部的延遲,或者說(shuō)posedge上升沿到寄存器clk端到輸出Q端的延遲。
??4.時(shí)鐘延遲Tclk:時(shí)鐘信號(hào)從時(shí)鐘源端口出發(fā),到源寄存器時(shí)鐘端口的延遲。
??5.數(shù)據(jù)延遲Tdata:數(shù)據(jù)從源寄存器Q端到目的寄存器D端的時(shí)間。—— Tco + Tcmob
??6.Tskew : 時(shí)鐘偏斜或說(shuō)時(shí)鐘偏移,是指時(shí)鐘信號(hào)到達(dá)數(shù)字電路各部分所用時(shí)間的差異。
??7.Tjitter : 時(shí)鐘抖動(dòng),是同一時(shí)鐘的兩個(gè)時(shí)鐘周期之間的差值。
??8.Th:保持時(shí)間
??9.Tsu:建立時(shí)間。
??關(guān)于保持時(shí)間和建立時(shí)間的計(jì)算方法:
??對(duì)于建立時(shí)間有:T(T為時(shí)鐘周期) + Tskew = Tco + Tcmob + Tsu + A(A為建立時(shí)間容限>0)。所以有T + Tskew - Tco - Tcmob > Tsu。
??關(guān)于保持時(shí)間有:Tco + Tcmob = Th + Tskew + B(B為保持時(shí)間容限>0)。所以有Tco + Tcmob - Tskew > Th。
??關(guān)于時(shí)鐘抖動(dòng)和時(shí)鐘偏移的解決方法:
??減小時(shí)鐘抖動(dòng)的方法:
??受時(shí)鐘自身的影響,不受布線的影響,因此通過(guò)控制系統(tǒng)溫度變化、減少機(jī)械振動(dòng)、減少電源、地等來(lái)減少,選用好的時(shí)鐘源。
??減小時(shí)鐘偏移的方法:
??時(shí)鐘偏移是由于布線長(zhǎng)度或者不同負(fù)載(組合邏輯)引起的,因此可使用低輸出阻抗的時(shí)鐘驅(qū)動(dòng),如果驅(qū)動(dòng)能力不夠可用同型號(hào)電源并聯(lián)、采用樹(shù)形結(jié)構(gòu)、低阻抗時(shí)鐘分布線、遠(yuǎn)程匹配多驅(qū)動(dòng)來(lái)解決?!捎萌謺r(shí)鐘
??補(bǔ)充:
??一般地,我們?cè)谶M(jìn)行分頻操作的時(shí)候,采用PLL來(lái)完成,盡量避免對(duì)時(shí)鐘進(jìn)行邏輯操作,否則容易出現(xiàn)時(shí)鐘偏移、抖動(dòng),甚至出現(xiàn)時(shí)鐘毛刺的情況。
10.function 和 task
??function的定義如下
function <返回值的類(lèi)型或范圍>(函數(shù)名);
<端口說(shuō)明語(yǔ)句>
<變量類(lèi)型說(shuō)明語(yǔ)句>
beign
<語(yǔ)句>
end
endfunction
??function 定義時(shí)的注意事項(xiàng):
????函數(shù)的定義不能包含有任何的時(shí)間控制語(yǔ)句,即任何用#、@、或wait來(lái)標(biāo)識(shí)的語(yǔ)句。
????函數(shù)不能啟動(dòng)任務(wù)。
????定義函數(shù)時(shí)至少要有一個(gè)輸入?yún)⒘俊?br> ????在函數(shù)的定義中必須由一條賦值語(yǔ)句給函數(shù)中的一個(gè)變量賦以函數(shù)的結(jié)果值,該內(nèi)部變量具有和函數(shù)名相同的名字。
????定義中聲明的所有局部變量寄存器都是靜態(tài)的,即function中的局部寄存器在function的多個(gè)調(diào)用直接保持它們的值
??function 調(diào)用:
????function 的調(diào)用可以出現(xiàn)在always以及assign語(yǔ)句中
??function 例子:
function integer clogb2;
input integer depth;
for (clogb2=0; depth>0; clogb2=clogb2+1)
depth = depth >> 1;
endfunction
??task的定義如下:
task <任務(wù)名>;
<端口及數(shù)據(jù)類(lèi)型聲明語(yǔ)句>
<變量聲明>
<語(yǔ)句1>
<語(yǔ)句2>
.....
<語(yǔ)句n>
endtask
??task定義的注意事項(xiàng):
????在第一行“task”語(yǔ)句中不能列出端口名列表。
????任務(wù)中可以有延時(shí)語(yǔ)句、敏感事件控制語(yǔ)句等事件控制語(yǔ)句。
????任務(wù)可以沒(méi)有或可以有一個(gè)或多個(gè)輸入、輸出和雙向端口。
????任務(wù)可以沒(méi)有返回值,也可以通過(guò)輸出端口或雙向端口返回一個(gè)或多個(gè)返回值。
????任務(wù)可以調(diào)用其它的任務(wù)或函數(shù),也可以調(diào)用該任務(wù)本身。
????任務(wù)定義結(jié)構(gòu)內(nèi)不允許出現(xiàn)過(guò)程塊(initial或always過(guò)程塊)。
????任務(wù)定義結(jié)構(gòu)內(nèi)可以出現(xiàn)disable終止語(yǔ)句,這條語(yǔ)句的執(zhí)行將中斷正在執(zhí)行的任務(wù)。在任務(wù)被中斷后,程序流程將返回到調(diào)用任務(wù)的地方繼續(xù)向下執(zhí)行。該語(yǔ)句不可綜合。
??task的調(diào)用方式:
????<任務(wù)名>(端口1,端口2,…,端口n);
11.關(guān)于跨時(shí)鐘域的一些題解
??對(duì)于多比特傳輸,異步fifo是一種解決方案
??對(duì)于由快時(shí)鐘域到慢時(shí)鐘域的脈沖傳遞,需要在快時(shí)鐘域下檢測(cè)單bit脈沖,然后做一個(gè)脈沖展寬,即當(dāng)檢測(cè)到單bit脈沖后,對(duì)寄存器x寫(xiě)1。然后再慢時(shí)鐘下同步寄存器x的值,當(dāng)慢時(shí)鐘域下明確同步到寄存器x的值后,可以反饋給快時(shí)鐘域,用于對(duì)寄存器x寫(xiě)0,表示一次傳遞完成。
??對(duì)于由慢時(shí)鐘域到快時(shí)鐘域的脈沖傳遞,可以使用兩級(jí)觸發(fā)器同步解決。
??對(duì)于電平信號(hào),均可用兩級(jí)觸發(fā)器打拍來(lái)解決。
12.對(duì)于切換時(shí)鐘的題解
??參見(jiàn)文章:設(shè)計(jì)一個(gè)Glitch Free的時(shí)鐘切換電路
13.環(huán)形計(jì)數(shù)器的改進(jìn)方法
??采用約翰遜計(jì)數(shù)器,可以利用更多的狀態(tài),即計(jì)數(shù)次數(shù)增加
14.異步復(fù)位同步釋放的優(yōu)點(diǎn)
??異步復(fù)位最大的問(wèn)題是不管產(chǎn)生或撤銷(xiāo)復(fù)位信號(hào),都是一個(gè)異步過(guò)程,產(chǎn)生復(fù)位信號(hào)不存在問(wèn)題,但是撤銷(xiāo)時(shí)就出現(xiàn)了問(wèn)題,如果異步復(fù)位在觸發(fā)器時(shí)鐘有效沿附近釋放,觸發(fā)器的輸出就會(huì)進(jìn)入亞穩(wěn)態(tài),因此導(dǎo)致SOC的復(fù)位狀態(tài)丟失。因此,需要對(duì)復(fù)位信號(hào)進(jìn)行兩級(jí)觸發(fā)器緩沖,有效消除亞穩(wěn)態(tài)。
??具體代碼如下:
module asyn_reset(
clk ,
rst_n ,
rst_s2
);
input clk ;
input rst_n ;
output reg rst_s2;
reg rst_s1;
always @ (posedge clk or negedge rst_n) begin
if (!rst_n) begin
rst_s1 <= 1'b0;
rst_s2 <= 1'b0;
end
else begin
rst_s1 <= 1'b1 ;
rst_s2 <= rst_s1 ;
end
end
endmodule
15.關(guān)于verilog設(shè)計(jì)中的低功耗
??低功耗的方法:
??1.對(duì)于時(shí)序邏輯下的寄存器,不加復(fù)位邏輯,只加有效值信號(hào)判斷,這樣可以省下復(fù)位電路的布線面積。
??2.手動(dòng)插入時(shí)鐘門(mén)控,在模塊不會(huì)運(yùn)作的時(shí)鐘周期,加入控制信號(hào),關(guān)掉時(shí)鐘,減小動(dòng)態(tài)消耗。
??3.休眠掉電。
??4.減少?zèng)]有意義的高低電平切換,避免沒(méi)有必要的動(dòng)態(tài)消耗。
16.什么是亞穩(wěn)態(tài)?
??輸入信號(hào)在時(shí)鐘有效沿的建立時(shí)間和保持時(shí)間之間變化,導(dǎo)致其不滿足觸發(fā)器建立保持時(shí)間的時(shí)序要求,使得輸出有一段時(shí)間的不確定狀態(tài),這就是亞穩(wěn)態(tài)。
17.格雷碼與二進(jìn)制碼的互相轉(zhuǎn)換
??假設(shè)二進(jìn)制和格雷碼各個(gè)位分別使用如下字符表示:
??n 位的二進(jìn)制:Bn, Bn-1, Bn-2…B2, B1 , B0;
??n 位的格雷碼:Gn, Gn-1, Gn-2…G2, G1, G0;
??則,轉(zhuǎn)換公式為:2-g : Gn = Bn , Gi-1 = Bi ^ Bi-1 (i = 1 , 2 , … ,n) ; g-2 : Bn = Gn , Bi-1 = Gi ^ Bi-1 (i = 1 , 2 , … ,n) 。
18.競(jìng)爭(zhēng)和冒險(xiǎn)
??產(chǎn)生原因:競(jìng)爭(zhēng)和冒險(xiǎn)都是由于存在電路延遲引起的,同時(shí)冒險(xiǎn)是由競(jìng)爭(zhēng)造成的,而競(jìng)爭(zhēng)是因?yàn)殡娐分械臅r(shí)延不同,但是有競(jìng)爭(zhēng)的時(shí)候不一定會(huì)出現(xiàn)冒險(xiǎn)。
??解決方法:1.增加冗余項(xiàng) 2.增加選通信號(hào) 3.增加濾波電容 4.采用可靠型編碼
19.分布式RAM和Block RAM
??這里先介紹一下FPGA的基本組成:CLB(可配置邏輯塊)、IOB、BRAM、完整的時(shí)鐘管理模塊、內(nèi)嵌的底層功能單元和嵌入式專(zhuān)用硬核、豐富的布線資源。其中CLB由兩個(gè)Slice組成,由于Slice有SliceL(Logic)和SliceM(Memory)之分,因此CLB可分為CLBLL和CLBLM兩類(lèi)。而SliceL和SliceM內(nèi)部都包含4個(gè)6輸入查找表(LUT6)、3個(gè)數(shù)據(jù)選擇器(MUX)、1個(gè)進(jìn)位鏈(Carry Chain)和8個(gè)觸發(fā)器(Flip-Flop)。那么,SliceM中的LUT資源就是分布式RAM的組成部分。
??下面介紹兩者的主要區(qū)別:
??Block RAM由一定數(shù)量固定大小的存儲(chǔ)塊構(gòu)成的,使用Block RAM資源不占用額外的邏輯資源,并且速度快。但是使用的時(shí)候消耗的BLOCK RAM資源是其塊大小的整數(shù)倍。如Xilinx公司的結(jié)構(gòu)中每個(gè)BRAM有36Kbit的容量,既可以作為一個(gè)36Kbit的存儲(chǔ)器使用,也可以拆分為兩個(gè)獨(dú)立的18Kbit存儲(chǔ)器使用。反過(guò)來(lái)相鄰兩個(gè)BRAM可以結(jié)合起來(lái)實(shí)現(xiàn)72Kbit存儲(chǔ)器,而且不消耗額外的邏輯資源。
??分布式RAM的特點(diǎn)是可以實(shí)現(xiàn)BRAM不能實(shí)現(xiàn)的異步訪問(wèn),不過(guò)使用分布式RAM實(shí)現(xiàn)大規(guī)模的存儲(chǔ)器會(huì)占用大量的LUT,可用來(lái)實(shí)現(xiàn)邏輯的查找表就會(huì)減少。在查找表資源足夠的情況下,利用查找表為電路實(shí)現(xiàn)存儲(chǔ)器,既可以實(shí)現(xiàn)芯片內(nèi)部存儲(chǔ),又能提高資源利用率。不過(guò)建議僅在需要小規(guī)模存儲(chǔ)器時(shí),使用這種分布式RAM。
20.時(shí)序約束的基本路徑
??1.FPGA內(nèi)部寄存器之間的時(shí)序路徑,簡(jiǎn)稱(chēng)reg2reg;
??2.輸入引腳到FPGA內(nèi)部寄存器的時(shí)序路徑,簡(jiǎn)稱(chēng)pin2reg;
??3.FPGA內(nèi)部寄存器到輸出引腳的時(shí)序路徑,簡(jiǎn)稱(chēng)reg2pin;
??4.輸入引腳到輸出引腳之間的時(shí)序路徑(不通過(guò)寄存器),簡(jiǎn)稱(chēng)pin2pin。
21.時(shí)序約束的基本步驟
??1.時(shí)鐘約束(主時(shí)鐘、虛擬時(shí)鐘、衍生時(shí)鐘);
??2.輸入/輸出接口約束(系統(tǒng)同步、源同步);
??3.時(shí)鐘分組和跨時(shí)鐘約束(異步);
??4.時(shí)序例外約束(多周期路徑、虛假路徑)。
22.突發(fā)傳輸與普通流水線傳輸有何區(qū)別
??表面上來(lái)看,沒(méi)什么區(qū)別。理論上都是N+1個(gè)Cycle。但是這是針對(duì)一拍可以回?cái)?shù)的緊耦合SRAM而言的,如果訪問(wèn)的是DDR呢?
??如果是突發(fā)傳輸,你只需要下發(fā)一次命令,DDR Controller可以幫你計(jì)算好,你總共需要讀多少數(shù)據(jù),比如每一拍是32Bit,突發(fā)長(zhǎng)度是4,DDR控制器只要對(duì)DDR發(fā)一次命令即可,一次性讀回128Bit的數(shù)據(jù)。如果是Single transfer,DDR Controller可不知道你下一筆傳輸?shù)牡刂泛瓦@筆傳輸?shù)牡刂分徊盍?x4,DDR Controller完全可能把你的第一次single transfer下發(fā)出去,然后又下發(fā)第二次,然后又下發(fā)第三次,然后…由于DDR的讀取時(shí)序沒(méi)有那么簡(jiǎn)單,不是完全的流水式的,因此這中間就可以阻塞很多個(gè)周期。所以!突發(fā)傳輸和流水線的Single transfer是不一樣的!能用突發(fā)傳輸就用突發(fā)傳輸,不要用多次Single Transfer。
23.spi的相位和極性
??CPOL為1,第一個(gè)跳變沿為下降沿,CPOL為0 ,第一個(gè)跳變沿為上升沿。
??CPHA為1,取第二個(gè)跳變沿采樣,CPHA為0,取第一個(gè)跳變沿采樣。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-537101.html
24.低功耗設(shè)計(jì)的方法
??1.時(shí)鐘門(mén)控。 2.電源關(guān)斷技術(shù)。 3.Multi VDD(多電壓域):根據(jù)不同模塊的性能要求不同而采用不同的電源供電。4.Multi Vt(多閾值電壓):使用多闕值工藝可以在時(shí)序和漏電流之間進(jìn)行一些折中。5.狀態(tài)機(jī)編碼:格雷碼,可以減少翻轉(zhuǎn)的位數(shù)。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-537101.html
到了這里,關(guān)于FPGA知識(shí)點(diǎn)(不斷增加......)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!