第七章設(shè)計(jì)技巧課件_第1頁
第七章設(shè)計(jì)技巧課件_第2頁
第七章設(shè)計(jì)技巧課件_第3頁
第七章設(shè)計(jì)技巧課件_第4頁
第七章設(shè)計(jì)技巧課件_第5頁
已閱讀5頁,還剩59頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

第七章設(shè)計(jì)技巧

7.1VHDL編碼風(fēng)格

■VHDL設(shè)計(jì)是行為級的設(shè)計(jì),所帶來的問題是設(shè)計(jì)

者的設(shè)計(jì)思考與實(shí)際電路結(jié)構(gòu)是相脫節(jié)的。設(shè)計(jì)

者主要是根據(jù)VHDL的語法規(guī)則,對系統(tǒng)目標(biāo)的邏

輯行為進(jìn)行描述,然后通過綜合工具進(jìn)行電路結(jié)

構(gòu)的綜合、編譯、優(yōu)化,通過仿真工具進(jìn)行邏輯

功能仿真和系統(tǒng)時延的仿真。

■實(shí)際設(shè)計(jì)過程中,由于每個設(shè)計(jì)工程師對語言規(guī)

貝人對電路行為的理解程度不同,每個人的編程

風(fēng)格不同,往往同樣的系統(tǒng)功能,描述的方式是

不一樣的,綜合出來的電路結(jié)構(gòu)更是大相徑庭。

■因此,即使最后綜合出的電路都能實(shí)現(xiàn)相

同的邏輯功能,其電路的復(fù)雜程度和時延

特性都會有很大的差別,甚至某些臃腫的

電路還會產(chǎn)生難以預(yù)料的問題。

■從這些問題出發(fā),很有必要深入討論在

VHDL設(shè)計(jì)中如何簡化電路結(jié)構(gòu),優(yōu)化電路

設(shè)計(jì)的問題。

7.1-1描述方法對電路結(jié)構(gòu)的影響

■用VHDL進(jìn)行設(shè)計(jì),最終綜合出的電路的復(fù)雜程度,

除取決于設(shè)計(jì)要求實(shí)現(xiàn)的功能的難度外,還受設(shè)

計(jì)工程師對電路的描述方法和對設(shè)計(jì)的規(guī)劃水平

的影響。

■最常見的使電路復(fù)雜化的原因之一是在設(shè)計(jì)中存

在許多本不必要的類似LATCH的結(jié)構(gòu)。而且由于

這些結(jié)構(gòu)通常都由大量的觸發(fā)器組成,不僅使電

路更復(fù)雜,工作速度降低,而且由于時序配合的

原因會導(dǎo)致不可預(yù)料的結(jié)果。

L不必要的鎖存

以下有2段設(shè)計(jì),如果單從語法上來看是沒有任何錯誤的,而且編譯

時都可以通過,但是如果從電路結(jié)構(gòu)上考慮,它們都存在問題。

Examl:Process(A,B)

Begin

IfA=,l,then

Q<=B;暗指鎖存

Endif;

Endprocess;

Exam2:process(C)

Begin

CaseCis

WhenO=>Qv=1;

Z<=O;

WhenT=>Qv=O;缺少Z的值

Endcase;

Endprocess;

4仔細(xì)觀察,在Examl和Exam2進(jìn)程中的語句

都有同一個毛病。Examl進(jìn)程中的if語句僅僅指

明了A在高電平(1)的時候?qū)的值傳到Q端,

并沒有指明A在低電平(0)的時候Q端應(yīng)該是什

么值。綜合工具在綜合時,發(fā)現(xiàn)這杯不完全的狀

態(tài)描述,會將其綜合為鎖存(latch)。

在ISE中,綜合工具XST會發(fā)出一個警告:

Found1-bitlatchforsignal<q>鎖存是由與或

非邏輯組成的,而這種嘉構(gòu)在系統(tǒng)o中多半會埋下

不穩(wěn)定的種子。

再看看Exam2進(jìn)程,有兩個輸出信號,信號

的值在Case語句中被決定,但是Z的值只在C為

’0’時有明確的說明,當(dāng)C為高T'時設(shè)計(jì)者并沒

有明確指出。所以同樣會使綜合工具理解為鎖存。

Q*data*gate+data*gate=Q

圖7.L1采用門電路的鎖存器原理圖

2.描述寄存器代替鎖存

既然鎖存存在不穩(wěn)定,那么有必要找

到一個好的替代,那就是寄存器。寄存器

由時鐘觸發(fā),很大程度上抑制了毛刺。所

以,盡可能的使用寄存器而避免鎖存。

下面是不同的D觸發(fā)器的VHDL描述:

DFF:process(clk)--D觸發(fā)器

Begin

Ifrising_edge(clk)then

Q<=A;

Endif;

Endprocess;

ID觸發(fā)器的VHDL描述:

DFF_AR:process(clk,reset)--帶異步復(fù)位的D觸發(fā)器

Begin

Ifreset=,1,then

Qv=U;

Elseifrising_edge(clk)then

Q<=A;

Endif;

Endprocess;

DFF_AS:process(clk,preset)--帶異步置位的D觸發(fā)器

Begin

Ifpreset=5rthen

Qv=T;

Elsifrising_edge(clk)then

Q<=A;

Endif;

Endprocess;

DFF_SS:process(clk,preset)-帶同步置位的D觸發(fā)器

Begin

ifrising_edge(clk)then

Ifpreset=5Tthen

Qv=T;

else

Q<=A;

Endif;

Endif;

Endprocess;

3-使用括號描述想要的結(jié)構(gòu)

■從上面的例子可以了解到不同的描述對

電路結(jié)構(gòu)的影響,在下面的一個例子中,

有兩種不同的加法描述,其電路結(jié)構(gòu)也

是不同的。

(1)Outl<=Il+I2+I3+I4;

其電路結(jié)構(gòu)如圖7.L2所示。

114I

12

13E)-----------OUTl

14T>

(2)Out2V=(11+12)+(13+14);

iiD

OUTl

e-

13E>

14舟

從結(jié)構(gòu)上看,第一種描述中沒有使用括號,

電路結(jié)構(gòu)為三層,加法一級一級的進(jìn)行。它的特

點(diǎn)是,四個輸入II,12,13,14到達(dá)加法器的路徑不

相等。第二種描述中的使用了括號,電路結(jié)構(gòu)分

為兩層,顯然它的特點(diǎn)是四個輸入信號到達(dá)加法

器的路徑是相等的。這里并不能簡單的評論兩種

結(jié)構(gòu)的優(yōu)劣,必須根據(jù)實(shí)際應(yīng)用情況分析。

北上結(jié)構(gòu)

■在VHDL語言描述中,進(jìn)程中的語句是順序

執(zhí)行的。如果要設(shè)計(jì)一個并行的電路,不

要使用順序語句,而要使用并行語句。

方法1.Process—,B,C)

begin

ifC=Wien

Y<=A;

日se

Y<=B;

Endif;

Endprocess;

方法2.Y<=AwhenC=,O,elseB;

如果電路結(jié)構(gòu)是并行的,那么使用方法

2描述要比方法1好。

45.資源共享

■如果有可能的話,盡量使資源共享。一塊FPGA

芯片中的資源是有限的。如果不有效利用僅有

的資源,將會導(dǎo)致資源不夠,系統(tǒng)冗余過多,

穩(wěn)定性也變會差。

■Casesis

■Whent0,=>Z<=a+b;

■When{T=>Z<=a+c;

Casesis

(a)(b)

圖7.L4加法器的資源共享

加法器的資源共享

在圖中7.L4框圖中加法器的輸出Z是A加上C

或者B,A與C、B哪個輸入相加由選擇信號S決定,

由于在設(shè)計(jì)中采用了多路選擇器(Mux),在結(jié)

構(gòu)上可以得到兩種形式。圖(b)的框圖采用了

兩個16位的加法器,兩個加法器的結(jié)果通過MUX

由S選擇輸出。而圖(a)的框圖中只采用了一個

加法器,它將C、B信號通過MUX后的輸出送到加

法器的一端,另一端連接A。兩種結(jié)構(gòu)都能達(dá)到

設(shè)計(jì)的要求,顯然,圖(a)框圖中的設(shè)計(jì)占用

的資源要小些。

46.integer和std」ogic_vector

在VHDL中,信號一般都使用限制了位數(shù)的

stdjogic>std」ogic_vector類型,不使用

integer(整型)。如果使用integer,最分

在后面加上約束條件,例如:ainteger

range0to7;o

如果使用了integer而沒有對其進(jìn)行位

數(shù)的約束,那么在32位的PC機(jī)中,綜合后

將是一個32bit的信號,會造成大量的浪費(fèi)。

7.1.2不同的狀態(tài)機(jī)描述

■1.狀態(tài)機(jī)的選型

■2.狀態(tài)編碼

-3.多進(jìn)程狀態(tài)機(jī)

-4.單進(jìn)程狀態(tài)機(jī)

1.狀態(tài)機(jī)的選型

按狀態(tài)機(jī)的輸出方式分類,有限狀態(tài)機(jī)可分為

Mealy型和Moore型。從輸出時序上看,Mealy型

狀態(tài)機(jī)的輸出是當(dāng)前狀態(tài)和所有輸入信號的函數(shù),

它的輸出是在輸入變化后立即發(fā)生的,不依賴時

鐘的同步。Moore型狀態(tài)機(jī)輸出則僅為當(dāng)前狀態(tài)

的函數(shù),狀態(tài)機(jī)的輸入發(fā)生變化還必須與狀態(tài)機(jī)

的時鐘同步。

"由于Me小狀態(tài)機(jī)的輸出不與時鐘同步,所以

當(dāng)在狀態(tài)譯碼比較復(fù)雜的時候,很容易在輸出端

產(chǎn)生大量的毛刺,這種情況是無法避免的。在

些特定的系統(tǒng)中,這些毛刺可能造成不可預(yù)料的

結(jié)果。

但是,由于輸入變化可能出現(xiàn)在時鐘周期內(nèi)

的任何時刻,這就使得Mealy狀態(tài)機(jī)對輸入的響應(yīng)

可以比Moore狀態(tài)機(jī)對輸入的晌應(yīng)要阜一個時鐘

周期。Moore狀態(tài)機(jī)的輸出與時鐘同步,可以在

一定程度上剔除抖動。從穩(wěn)定性的角度來講,建

議使用Moore狀態(tài)機(jī)以提高系統(tǒng)的穩(wěn)定性。

在實(shí)際工程中,具體電路有具體的設(shè)計(jì)要求,可

能適應(yīng)于Moore或Mealy狀態(tài)機(jī),也可能兩種都可

以實(shí)現(xiàn)設(shè)計(jì),所以設(shè)計(jì)者必須根據(jù)實(shí)際情況和經(jīng)

驗(yàn)綜合決定采用哪種狀態(tài)機(jī)。

2.狀態(tài)編碼

狀態(tài)編碼,是指定義狀態(tài)機(jī)現(xiàn)態(tài)和次態(tài),一般有

3種方式:

(1)方式1

signalcurren_state:std_logic_vector(1downto0)

signalnext_state:std_logic_vector(1downto0)

方式1定義而狀態(tài)有正較多山毛病。首先,這種方

式定義的狀態(tài)為邏輯向量,缺乏具體的狀態(tài)含義,程

序的可讀性較差,更重要的是,設(shè)計(jì)后期調(diào)試修改比

較麻煩。

2)方式2

Typemystateis(st0,stl,st2,st3);

Signalcurren-state,next-state:mystate;

采用方式2定義的狀態(tài)有具體的狀態(tài)含義,可讀

性好,易于調(diào)試和修改。

(3)方式3

Signalcurren_state,next_state:std_logic_vector(ldownto0);

ConstantstO:std_logic_vector(1downtoO):=,5OO,5;

Constantst1:sta_logic_vector(1donwot0):=,,0t,;

Constantst2:sta_logic_vector(1donwotO):=,51O55;

Constantst3:sta_logic_vector(1donwot

方式3比方式1要好,因?yàn)榉绞?的可讀性比方式

1要好。但是方式3的修改沒有方式2方便。

■狀態(tài)機(jī)的編碼在ISE中有6種,其中常用的

是順序編碼和一位熱碼。在ISE中可以通過

修改綜合約束來指定狀態(tài)機(jī)的編碼。方法

如下:

■①綜合前,在Processforcurrentsources

窗口中選中Synthesize,單擊鼠標(biāo)右鍵,彈

出下拉菜單,選中Properties(屬性)。如圖

7?1,5所示。

圖7.1.5綜合Properties(屬性)

②在彈出的菜單中有3個選項(xiàng)¥,選中HDL

options選項(xiàng)欄,如圖7.L6所示。在Properties

name(屬性名)下的第一項(xiàng)便是FSMEncoding

Algorithm(有限狀態(tài)機(jī)編碼算法),在Value中打開

下拉菜單,可以看到幾種編碼方式。其中Auto(自

動)為ISE的缺省值,在一般情況下,如果目標(biāo)芯

片是FPGA,那么XST會將狀態(tài)機(jī)編碼為One-

Hot(一位熱碼)。使用One?Hot(一位熱碼)的好處

是,狀態(tài)轉(zhuǎn)換快,狀態(tài)譯碼簡單。

?采用Sequential(順序編碼)的好處是,所需要的寄

存器少,冗余狀態(tài)相對要少,系統(tǒng)進(jìn)入其他狀態(tài)

的機(jī)會就更少。

-還有一個比較常用的編碼方式,User(用戶)編

碼方式。設(shè)計(jì)者是可以手動編碼的,只要加上

Attribute語句便可。

■需要提醒大家注意的是,HDLOptions中

的設(shè)置的優(yōu)先級要高于用戶的attribute屬

性。也就是說,如果使用了attribute語句

進(jìn)行了手動編碼,但是在FSMEncoding

Algorithm中選擇的是Gray(格雷)碼,

那么實(shí)際綜合的效果是Gray(格雷)編

碼。

例子:

typeSTATE_TYPEis(SI,S2,S3,S4);

attributeENUMENCODING:STRING;

attributeENUM_ENCODINGofSTATE_TYPE:type

isn1110110110110111”;

上面的四個狀態(tài)SI,S2,S3,S4其實(shí)也是一位熱碼,是

用‘0’作為熱碼。選擇User編碼,那么綜合后的實(shí)

際狀態(tài)機(jī)編碼就是設(shè)計(jì)者在attribute中描達(dá)的快態(tài)

碼字。

ProcessProperties區(qū)

SynthesisOptionsHDLOptions|XilinxSpecificOptions!

PropertyHaae▼alue

:FSMEncodingAlcorithm.Auto▼

KAMExtraction|Auto-

RAXStyle

CompactL\

ROMExtractionSequential飛

RDMStyleGray

MuxExtractionJohnson

MuzStyleNone

DecoderEztractionp

PriorityEncoderExtractionYes

ShiftRegisterExtractionP

LogicalShifterExtractionK7

確定Dtfault幫助1

圖7.1.6編碼方式的設(shè)定

3,多進(jìn)程狀態(tài)機(jī)

在狀態(tài)機(jī)的描述中,經(jīng)典的應(yīng)該屬于3進(jìn)程

狀態(tài)機(jī),基本結(jié)構(gòu)可以由下面的模型描述:

SYNC_PROC:process(CLOCK,RESET)--同步進(jìn)程

begin

if(RESET=T)then--現(xiàn)態(tài)v=初始狀態(tài);

elsif(CLOCK^ventandCLOCK=fr)then

一現(xiàn)態(tài)<=次態(tài);

endif;

endprocess;

>-------------------------------------

COMB_PROC1:process(--現(xiàn)態(tài),輸入信號)-狀態(tài)轉(zhuǎn)化進(jìn)程

begin

case現(xiàn)態(tài)is

when初始狀態(tài)二>

if(一轉(zhuǎn)換條件)then

--次態(tài)賦值

endif;

--其他所有狀態(tài)轉(zhuǎn)換的描述

endcase;

endprocess;

>------------------

C0MB_PR0C2:process(現(xiàn)態(tài),輸入端)--輸出描

述進(jìn)程

Begin

Case現(xiàn)態(tài)

When初始狀態(tài)=>

if(輸入端的變化)then

一輸出賦值

--其他所有狀態(tài)下輸出的描述

endcase

endprocess;

或者:

COMB_PROC2:process(現(xiàn)態(tài))--輸出描述進(jìn)程

Begin

Case現(xiàn)態(tài)

When初始狀態(tài)=>--輸出賦值

-其他所有狀態(tài)下輸出的描述

endcase

endprocess;

-以上模型描述的3進(jìn)程狀態(tài)機(jī)中的各個進(jìn)程分工

相當(dāng)明確。SYNC_PROC進(jìn)程完成狀態(tài)的同步描

述和狀態(tài)機(jī)的初始化,COMB_PROC1進(jìn)程完成對

狀態(tài)轉(zhuǎn)換的描述,COMB_PR(元2完成對輸出的描

述。3個進(jìn)程各負(fù)責(zé)一個工作互不擾,第一個進(jìn)

程的電路是時序邏輯,第二,三進(jìn)程的電路是組

合邏輯。C0MB_PR0C2進(jìn)程中可能出現(xiàn)兩種描述。

第一種描述,輸出端是現(xiàn)態(tài)和輸入的函數(shù),是

Mealy狀態(tài)機(jī)。第二種描述,輸出端是僅為現(xiàn)態(tài)

的函數(shù),是Moore狀態(tài)機(jī)。

1.4,單進(jìn)程狀態(tài)機(jī)

k在實(shí)際的設(shè)計(jì)中,在輸入端引入噪聲是難免。

如果使用的是Mealy狀態(tài)機(jī),噪聲很容易傳到輸出

端口,在輸出端口出現(xiàn)毛刺,如果這個狀態(tài)機(jī)的

輸出要被用于作為其他模塊的同步信號的話,系

統(tǒng)設(shè)計(jì)很有可能會失敗。那么在這種情況下,最

好采用Moore狀態(tài)機(jī)。但是,在3進(jìn)程狀態(tài)機(jī)中,

輸出信號是由狀態(tài)譯碼得來的,輸出進(jìn)程描述的

電路是組合邏輯,組合邏輯沒有抑制毛刺的能力。

所以3進(jìn)程的Moore狀態(tài)機(jī)只是相對3進(jìn)程的Mealy

狀態(tài)機(jī)有一定的抗干擾能力。

■為了使系統(tǒng)更加穩(wěn)定,可以在輸出組合邏輯

后面在加一級寄存器,采用時鐘邊沿觸發(fā),

這樣,可以在很大程度上剔除毛刺,抑制噪

聲的干擾。

■采用單進(jìn)程的狀態(tài)機(jī)也可以達(dá)到設(shè)計(jì)目的。

(1)單進(jìn)程狀態(tài)機(jī)的基本結(jié)構(gòu)模型

單進(jìn)程狀態(tài)機(jī)的基本結(jié)構(gòu)可以由下面的模型

描述:

SYNC_PROC:process(CLOCK,RESET)--同步進(jìn)程

begin

if(RESET二T)then

--現(xiàn)態(tài)〈二初始狀態(tài);

elsif(CLOCK'eventandCLOCK='1')then

--現(xiàn)態(tài)〈二現(xiàn)態(tài);

case現(xiàn)態(tài)is

when初始狀態(tài)=>if(--轉(zhuǎn)換條件)then

--現(xiàn)態(tài)賦值

endif;

if(--一換條件)then

-輸出賦值

endif;

-其他所有狀態(tài)轉(zhuǎn)換的描述

-其他所有狀態(tài)下輸出的描述

endcase;

endprocess;

可以看出,由于狀態(tài)機(jī)的所有工作都是

在時鐘上升沿觸發(fā)下完成的,所以,輸

出組合邏輯的后面必定產(chǎn)生了一組寄存

器,從而抑制了毛刺的產(chǎn)生。

■(2)狀態(tài)機(jī)的比較

下面以一個簡單的狀態(tài)機(jī)為例,驗(yàn)證上面

的分析。其中EXAM1是2個進(jìn)程的狀態(tài)機(jī),

分為時序進(jìn)程和組合進(jìn)程;EXAM2是單進(jìn)

程狀態(tài)機(jī)。這里不對狀態(tài)機(jī)的工作做介紹,

僅僅表現(xiàn)是兩種方法描述同一個功能的狀

態(tài)機(jī)的差異。

①2個進(jìn)程的狀態(tài)機(jī)設(shè)計(jì)例

EXAMI:-EXAM1是2個進(jìn)程的狀態(tài)機(jī),分為時序進(jìn)程和組合

進(jìn)程。

entitystatemachine2is

Port(ini:instdjogic;

in2:instdjogic;

reset:instdjogic;

elk:instdjogic;

outl:outstdjogic;

out2:outstdjogic);

endstatemachine2;

architectureBehavioralofstatemachine2is

Typemystateis(st0,stl,st2,st3);

Signalcurrent_state,next_state:mystate;

begin

process(elk,RESET)

begin

if(RESET=,1,)then

currentstate<=stO;

elsifrising_edge(clk)then

currentstate<=nextstate;

endif;

endprocess;

process(inl,in2,current_state)

begin

casecurrent_stateis

whenstO=>ifinl=Tthen

next_state<=stl;

endif;

outl<=,0,;

out2<=,0,;

whenstl=>ifin2=Tthen

nextstate<=st2;

endif;

outl<=*r;

out2<=,0,;

whenst2=>ifinl='O'andin2=Tthen

nextstate<=st3;

endif;

outl<=,0,;

out2<=,l,;

whenst3=>ifinl=Uandin2=,0,then

nextstate<=stO;

endif;

outl<=fr;

out2<=,l,;

whenothers=>nextstate<=stO;

endcase;

endprocess;

endBehavioral;

②單進(jìn)程狀態(tài)機(jī)設(shè)計(jì)例

EXAM2;-EXAM2是單進(jìn)程狀態(tài)機(jī)

entitystatemachineis

Port(ini:instdjogic;

in2:instdjogic;

reset:instdjogic;

elk:instdjogic;

outl:outstdjogic;

out2:outstdjogic);

endstatemachine;

②單進(jìn)程狀態(tài)機(jī)設(shè)計(jì)例

architectureBehavioralofstatemachineis

Typemystateis(stOzstl,st2,st3);

Signalcurrent_state:mystate;

begin

process(elk,RESET,inlzin2)

begin

if(RESET='l')then

current_state<=stO;

elsifrising_edge(clk)then

currentstate<=currentstate;

casecurrent_stateis

whenstO=>ifinl=Tthen

current_state<=stl;

endif;

outl<=,0,;

out2<=,0,;

whenstl=>ifin2=,l,then

current_state<=st2;

endif;

outl<=,l,;

out2<=,0,;

whenst2=>ifinl=Uandin2=,l,then

currentstate<=st3;

endif;

outl<=,0,;

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論