如何寫代碼減少邏輯單元的使用數(shù)量?
以下都是我在編程時發(fā)現(xiàn)的問題,總結(jié)一下,怕以后忘了,以我目前的水平不明白類似關(guān)鍵路徑,組合數(shù)目什么高深理論,這都是我從實際中學(xué)到的,比看書學(xué)的印象深刻得多.慢慢來吧,我想我以后也會明白那些高級的東西了!
本文引用地址:http://m.butianyuan.cn/article/201710/365669.htm一....盡量不要使用大于小于這樣的判斷語句, 這樣會明顯增加使用的邏輯單元數(shù)量 .看一下報告,資源使用差別很大.
例程:always@(posedge clk)
begin
count1=count1+1;
if(count1==10000000)
feng=1; //no_ring
else if(count1==90000000)
begin
feng=0; //ring
count1=0;
end
end //這么寫會用107個邏輯單元
// 如果把這句話if(count1==10000000)改成大于小于,報告中用了135個邏輯單元
二.....一定要想盡辦法減少reg寄存器的長度
上次把[30:0]改到[50:0],報告里邏輯單元從100多直升到2000多!!!太嚇人了,至于為什么我就不知道了哈!
三....case語句里一定要加default if一定要加else
如果是組合邏輯的設(shè)計,不加default或else的話,不能保證所有的情況都有賦值,就會在內(nèi)部形成一個鎖存器,不再是一個純粹的組合邏輯了,電路性能就會下降.
例如:case({a,b})
2b11 e=b;
2b10 e=a;
endcase
//不加default,雖然只關(guān)心a=1時的結(jié)果,但是a=0的時候,e就會保存原來的值,直到a變?yōu)?
//那么e要保存原來的值,就要在內(nèi)部生成鎖存器了.
四....盡量使用Case語句 而不是if--else語句
復(fù)雜的if--else語句通常會生成優(yōu)先級譯碼邏輯,這將會增加這些路徑上的組合時延
用來產(chǎn)生復(fù)雜邏輯的Case語句通常會生成不會有太多時延的并行邏輯
五...組合邏輯的always塊中,要注意所有的輸入全部放入敏感變量表里
比如:always@(a or b)
begin
out=(abc);
評論