數(shù)字電路中關(guān)鍵路徑的選取
所謂關(guān)鍵路徑就是,在電路中頻繁調(diào)用,而且延遲過長,或者產(chǎn)生意外的幾率比較大的線路。
本文引用地址:http://m.butianyuan.cn/article/282237.htm怎樣提取關(guān)鍵路徑:
1:組合電路中的關(guān)鍵路徑提?。?/p>
q=a&b&c|d&e&b;
因?yàn)閎的傳輸要兩級,
可以簡單的提取b作為一級的:
q=(a&c|d&e)&b;
2: always——block中的關(guān)鍵路徑提?。?/p>
always中關(guān)鍵路徑的提取一般用分步法提取,請看下面一個(gè)always——block,
always@(in)
begin
if(!a)
if(c&&(!b&&e))
out=out1;
else out=out2;
else if(b&&e) out =out1;
end
這里面e是關(guān)鍵路徑,我們可以分兩個(gè)步驟提取關(guān)鍵路徑
(1) 當(dāng)e=1的時(shí)候有:
if(!a)
if(c&&(!b))
out=out1;
else out=out2;
(2)當(dāng)e=0的時(shí)候有:
if(!a) out=out2;
因此這個(gè)always可以寫成這個(gè)樣子:
always@(in)
begin
if(e)
if(!a)
if(c&&(!b))
out=out1;
else out=out2;
else if(!a) out=out2;
end
這是中間形式,還要寫成最終形式:
定義兩個(gè)臨時(shí)變量,為了在綜合時(shí)候不被綜合掉,要定義他們?yōu)檩敵龆丝?output)——切記!!!
output out_temp1,out_temp2;
out_temp1=a?out:(c&&(!b))?out1:out2;
out_temp2=a?out:out2;
assign out=e?out_temp1:out_temp2;
3。FSM中的關(guān)鍵路徑的提?。宏P(guān)于狀態(tài)機(jī),這是FPGA設(shè)計(jì)必備的基礎(chǔ),編碼方式有很多中比如:one——hot,or one--cool
還有就是組合電路和時(shí)序 電路的寫法,這里主要講關(guān)鍵路徑的提取至于狀態(tài)機(jī)的寫法,還是查閱一下資料啊!
FSM中關(guān)鍵路徑的提取方法一般是先將要提取的關(guān)鍵路徑去掉
然后將原來FSM中的next-state用另外一個(gè)符號(hào)代替,作為次FSM 的輸入,即有主從兩個(gè)FSM。
來看一下這個(gè)簡單的狀態(tài)機(jī)啊:
parameter s0=0;
parameter s1=1;
parameter s2=2;
parameter s3=3;
input in1,in2,in3,set;
reg[1:0] nextstate,currentstate;
always@(in1 or in2 or in3 or currentstate)
begin
nextstate=s0;// start state
case(currentstate)
s0: if(in1&&!set)
nextstate=s1;
else if(set) nextstate=s2;
s1:if(in2&&set)
nextstate=s3;
else if(!set) nextstate=s2;
s2:if(set) nexstate=s3;
s3:if(in3) nextstate=s0;
default:nextstate=s0;
endcase
end
好,現(xiàn)在來看第一步,將狀態(tài)機(jī)中的關(guān)鍵路徑去掉,這里的關(guān)鍵路徑為set,試想如果狀態(tài)從s0一路到s3,都是set在起作用,如果有一個(gè)不小心的毛刺產(chǎn)生,就會(huì)執(zhí)行錯(cuò)誤的行為,所以這里的set為關(guān)鍵路徑。
提取后的狀態(tài)機(jī)如下:
reg[1:0]temp;
always@(in1 or in2 or in3 or currentstate)
begin
nextstate=s0;// start state
temp=s0;
case(currentstate)
s0: if(in1)
temp=s1;
s1:if(in2)
temp=s3;
s2: temp=temp;
s3:if(in3) temp=s0;
default:temp=s0;
endcase
end
第二步:
always2(temp or currentstate or set)
begin
case(currentstate)
s0:if(!set)
nextstate=temp
else nextstate=s2;
s1: if(set)
nextstate=temp;
else nextstate=s2;
s2:if(set) nextstate=s3;
else nextstate=temp;
s3: nextstate=temp;
default:nextstate=temp;
endcase
end
數(shù)字濾波器相關(guān)文章:數(shù)字濾波器原理
評論