1俊扭、在綜合過(guò)程中,對(duì)于代碼需要考慮
①數(shù)據(jù)類型如何轉(zhuǎn)換為硬件
②常量如何映射成邏輯值
③語(yǔ)句如何轉(zhuǎn)變?yōu)橛布?/p>
2休偶、確保verilog語(yǔ)法寫(xiě)出來(lái)的模型是可以綜合的
寄存器類型里:reg和integer類型可綜合芭挽,time和real不可綜合
在綜合過(guò)程中:delay或者#10這種操作是無(wú)法綜合的,會(huì)被忽略
3困乒、連續(xù)賦值的綜合過(guò)程寂屏,往往是將每一位綜合出一個(gè)對(duì)應(yīng)的門電路,有著一一對(duì)應(yīng)的關(guān)系娜搂。
4迁霎、支持常量的部分選取,不支持非常量的部分選取涌攻,對(duì)于非常量下標(biāo)會(huì)綜合成多路選擇器欧引。
5、always語(yǔ)句中應(yīng)包含所有讀取的變量恳谎,否則綜合出來(lái)的網(wǎng)表和實(shí)際功能不一致芝此。
always@(A)
Z=A&B,
那么綜合的結(jié)果是一個(gè)與門因痛,A或B值變化結(jié)果都會(huì)變化婚苹,但是觸發(fā)條件只有A,所以就少了B事件發(fā)生而觸發(fā)Z值發(fā)生變化的情況鸵膏,應(yīng)該為always@(A or B)
6膊升、鎖存器的產(chǎn)生:(為什么產(chǎn)生的是鎖存器,因?yàn)殒i存器是電平敏感的)
①變量未能在always中所有可能的過(guò)程中被賦值(比如if語(yǔ)句中有else分支未對(duì)其賦值)谭企,就會(huì)推導(dǎo)出鎖存器廓译。
②局部變量未在所有分支中被賦值,也會(huì)產(chǎn)生鎖存器债查。
③賦值前被引用非区,同樣會(huì)產(chǎn)生鎖存器。
避免鎖存器的產(chǎn)生:
①通過(guò)full_case或者default指令來(lái)避免鎖存器的產(chǎn)生盹廷,或者在case語(yǔ)句之前給變量進(jìn)行默認(rèn)賦值征绸。
②當(dāng)case各語(yǔ)句互斥時(shí),通過(guò)使用parallel_case指令來(lái)避免優(yōu)先級(jí)邏輯(潛逃可能會(huì)很深),而是綜合成譯碼邏輯管怠,各分支是并行的淆衷。
7、循環(huán)語(yǔ)句渤弛,包括for祝拯、repeat、while暮芭、forever鹿驼,綜合過(guò)程是對(duì)循環(huán)變量的每一個(gè)取值,復(fù)制for循環(huán)內(nèi)的所有語(yǔ)句一次辕宏。
8畜晰、時(shí)序邏輯建模時(shí)使用非阻塞賦值(除非使用中間變量時(shí)可以使用阻塞賦值),組合邏輯建模時(shí)使用阻塞賦值瑞筐,當(dāng)變量在時(shí)鐘沿變化時(shí)被賦值就會(huì)產(chǎn)生觸發(fā)器凄鼻,觸發(fā)器個(gè)數(shù)與變量位數(shù)相同。
但是有一個(gè)例外聚假,如果變量的賦值和引用出現(xiàn)在同一條語(yǔ)句中块蚌,則該變量被視為中間變量,不會(huì)產(chǎn)生觸發(fā)器膘格。
9峭范、 ? ?多個(gè)時(shí)鐘時(shí),不同時(shí)鐘控制的always語(yǔ)句內(nèi)不能對(duì)同一個(gè)變量多次賦值瘪贱,即對(duì)變量的賦值不能由多個(gè)時(shí)鐘(也包括同一時(shí)鐘的不同時(shí)鐘沿即posedge和negedge)控制纱控。
10、當(dāng)產(chǎn)生觸發(fā)器時(shí)菜秦,阻塞賦值和非阻塞賦值的綜合是不一樣甜害。
always@(posedge clk)
begin
? ? ? ? B=A; ? //阻塞賦值
? ? ? ? C<=B球昨; ?//非阻塞賦值
? ? ? ? D<=C尔店; ?//非阻塞賦值
end
那么會(huì)映射出B、C主慰、D各一個(gè)上升沿觸發(fā)器嚣州,由于B=A采用的阻塞賦值,C<=B使用的是B的新值共螺,這意味著B(niǎo)觸發(fā)器的數(shù)據(jù)輸入端應(yīng)該通過(guò)門電路連接到C觸發(fā)器的數(shù)據(jù)輸入端避诽,而D<=C使用的是C的老值,因此應(yīng)將C觸發(fā)器的輸出端連接D觸發(fā)器的數(shù)據(jù)輸入端璃谨。
11、函數(shù)調(diào)用實(shí)在組合邏輯中直接插入函數(shù)代碼,函數(shù)內(nèi)部的變量都視為臨時(shí)變量來(lái)處理佳吞,這些變量都會(huì)被綜合為一條連線拱雏。
12、任務(wù)調(diào)用可以表達(dá)組合邏輯底扳,也可以表達(dá)時(shí)序邏輯铸抑,這取決于調(diào)用的上下文。
13衷模、X值和Z值
如果在case或者fi語(yǔ)句中鹊汛,使用了X值或Z值,則該分支在綜合時(shí)不會(huì)被執(zhí)行阱冶,此時(shí)出現(xiàn)功能不一致刁憋,應(yīng)避免在case語(yǔ)句中使用x值或Z值。
Z值可以用于產(chǎn)生三態(tài)門(有0木蹬、1至耻、高阻即Z三種狀態(tài))。
14镊叁、模塊實(shí)例化語(yǔ)句在綜合過(guò)程中被視為黑盒尘颓,只有輸入輸出等接口,內(nèi)部邏輯結(jié)構(gòu)不可見(jiàn)晦譬。
15疤苹、采用參數(shù)化設(shè)計(jì),在修改模塊功能時(shí)較為方便敛腌。
16卧土、Moore狀態(tài)機(jī)的輸出只與狀態(tài)有關(guān),與輸入無(wú)關(guān)迎瞧。
描述:always語(yǔ)句中使用case語(yǔ)句夸溶。
Mealy狀態(tài)機(jī)的輸出既與機(jī)器狀態(tài)有關(guān),也取決于輸入凶硅。
描述:兩條always語(yǔ)句缝裁,一條描述時(shí)序邏輯,一條描述組合邏輯足绅。
狀態(tài)編碼可以使用整數(shù)或者參數(shù)進(jìn)行賦值捷绑,使用參數(shù)的話易于修改,比較方便氢妈。
17粹污、移位寄存器的作用:左移、右移首量、保存值壮吩、值的載入进苍。
18、格雷碼計(jì)數(shù)器的第一位和二進(jìn)制第一位相同鸭叙,從第二位開(kāi)始每一位都是二進(jìn)制的當(dāng)前位和前一位的異或結(jié)果觉啊。
19、優(yōu)化一般有兩個(gè)方向:降低時(shí)延沈贝、減小面積杠人。
優(yōu)化方式:資源分配、公共子表達(dá)式宋下、代碼移位嗡善、公因子提取、交換律和結(jié)合律
可以通過(guò)將always語(yǔ)句分割為兩個(gè)always語(yǔ)句來(lái)實(shí)現(xiàn)消除觸發(fā)器
對(duì)于鎖存器学歧,可以在所有分支中對(duì)變量賦值或者初始化賦值來(lái)消除罩引。
20、