4-1專題製作一:掃描顯示計頻儀
利用前章所述之四位數除十計數具栓鎖控制及七段LED掃描顯示模組化電路作各種數位計數器是相當方便的,例如計頻儀、光學尺編碼定位器等等,但前述模組之重設控制為同步於脈衝波CLOCK輸入,因此作計頻儀時其在單位時間內對應輸入脈衝予以計數後必需將計數值栓鎖輸出後再對計數器作直接的清除,以便在下一個單位時間又作計數,栓鎖顯示及計數器之清除等連續對外部輸入脈衝作頻率計數。
首先將除頻計數器改成如圖4-1電路,將D型正反器之直接清除端CLRN予以並聯成直接清除DCLR端,保留同步清除輸入端以便作為N模數計數回授清除控制,圖4-2具資料栓鎖控制同步除十計數器電路,此與前章所述不同是具有直接清除控制端,同樣將其組成四位十進位同步計數器並以四個多工器及2對4解碼以多工方式接到七段LED解碼器作掃描輸出,圖4-2組成4DDLRSCN7模組電路,與前章所介紹電路不同是此含直接清除CLR控制方便作計頻儀控制應用。
完整之計頻儀如圖4-4,輸入頻率經一個除1000除頻器預除,使用前述4對1多工選擇器選擇直接輸入,或除10或除100或除1K等由FRQS1﹐FRQS0作輸入設定,故此計頻儀最高可量測到10K×1K=10M之最高頻率,除1K之各除十皆由D端輸出電路則如圖4-5所示。
圖4-1 具有直接清除控制之四位元計數電路(4bsprct.gdf)
圖4-2 輸出資料及直接清除並具有栓鎖控制之四位元除十計數器之電路(4dlprct.gdf)
圖4-3 四位數除十計數具栓鎖直接清除及七段LED顯示掃描解碼電路(4dlrscn7.gdf)
圖4-4 取樣一秒之四位數七段LED顯示掃描解碼計頻儀(FRQCNT2.gdf)
圖4-5 含各除十位階輸出之除1000除頻器(divik.gdf)
單位時間計數控制為計頻儀控制精度主要中心,此區段時間的控制是需要極精確的,圖4-4中採用20MHz石英晶體振盪子輸入經一個T型正反器除2成10MHz後再經DIV1K除1000電路模組除頻成10kHz後又經過一個DIV10K除10000電路模組除頻成1Hz後再經一個T型正反器除2使成為HI/LOW各為1秒之脈衝波加到四位數計數器4DLRSCN7模組電路之計數控制CKEN端控制在脈衝HI=1秒鐘內對應輸入頻率作計數,成為單位時間一秒內有多少個輸入脈衝計數之頻率計數器,此0.5Hz之CNTD訊號經倒向閘NOT倒向後加入4D LRSCN7模組電路之計數資料栓鎖控制LTCH端控制將在一秒鐘內所計數到之脈衝數值即CNTD之正緣轉負緣經倒向為LOW轉HI之正緣端LTCH訊號將資料栓鎖入4DLRSCN7模組內四個四位元栓鎖D型正反器內,由DIV1K模組電路D1K端之10kHz輸出頻率予以輸入多工器掃描頻率C輸入端作D型正反器資料多工掃描加入七段LED解碼顯示驅動電路端輸出,四位數之陰極驅動掃描訊號為SC0 SC1 SC2 SC3等,其次將DIV10K端1Hz之十進位除頻之D端輸出訊號與CNTD倒向訊號作NAND閘組合控制輸出LTRS訊號作4DDLRSCN7模組電路之直接清除NCLR,控制其計數器直接予以清除以等待下一個1秒鐘CNTD脈衝來臨作新的一個脈衝頻率計數。
注意!資料栓鎖為正緣端,資料清除為準位LOW=0之直接清除,CNTD﹐LTCH﹐LTRS
等訊號相關波形如下所示:
上列時序中可見資料栓鎖latch是在閘控制計數完後之負緣即latch之正緣發生,此latch訊號與1Hz計數除頻之D10K輸出2對8之HI脈衝作NAND閘控制輸出在latch訊號之負緣訊號前2個時序0.2秒之LOW期間之內部計數器清除為0,但栓鎖資料仍保留原值不變而繼續顯示。
圖4-6 取樣0.1秒及單位顯示之四位數七段LED顯示掃描解碼計頻儀(frqcnt3.gdf)
圖4-6中計頻儀之時基利用2對1之多工選擇器MUX2電路模組由FRQS2選擇DIV1K之輸出為D100或D1K輸出端之脈衝,即為100kHz或10kHz之時基頻率加到DIV10K端除10000而得1Hz或10Hz頻率作為計頻儀0.1秒或1秒之計數時間,使用0.1秒時基時其最小單位脈衝為10Hz,但顯示取樣速度若為0.1秒時間反應速度會比較快且不需等1秒後才可量測到正確頻率值,應注意到此時所量測到之頻率值都應再乘以10倍才對,若要解析度達1Hz時就必需以1秒作時基才可以。
對應FRQS0﹐FRQS1﹐FRQS2等三個計頻儀時基之選擇及輸入待測之頻率預除等控制會顯得輸出顯示之量測單位值相當混亂,因此使用一
個3對8解碼器之。TDF
模組電路予以解碼輸出DP0﹐DP1﹐DP2﹐DP3等控制四位七段LED顯示器之各別小數點端對應以小數點Hz﹐kHz﹐MHz單位予以顯示計頻儀輸出值之單位及小數點標示,計頻儀單位顯示解碼器之HDL描述語如圖4-7。
圖4-7 儀之單位及小數點顯示解碼控制之HDL描述語
圖中應注意到計頻儀之溢位計數顯示控制,當4DD
LRSCN7電路模組之同步計數高位數計數達9時便由OVF端輸出一個HI電位,此時將OVF輸出接到一個D型正反器D輸入端,而其CLOCK脈衝輸入端並接於模組電路CLK輸入端,當四位數計數到9999值時在下一個輸入待測頻率
脈衝來臨時將此D=1之資料予以栓鎖入D型正反器之Q輸出端,而在LTCH計數器之栓鎖脈衝來臨時將此溢位之Q資料栓鎖輸出驅動LED顯示告知。
將上述圖4-6的完整單一CPLD製作完成的高速計頻器轉成電路模組如圖4-8則零件庫中又的了一顆高功能IC,甚至可製作成ASIC晶片來販賣.
圖4-8 轉成一顆LSI的四位數七段LED顯示掃描解碼計頻儀電路麼模組
以上所繪之計頻儀電路是相當完整且僅使用一顆CPLD而已,實在是精簡極了,不但省電、價廉,故障率低外、體積之小更不用說了。
4-2 HDL之狀態機構描述應用
在進行時序邏輯電路之分析及設計前,必需先適切的觀察基本時序電路模組及一些相關之邏輯關係式,例如計數器,移位暫存器等,但可觀察出所有關係式不是直接之輸入對應輸出或對應每個時序段皆有不同之輸出與輸入關係函數,因此在進行規劃此種每一時段皆有不同關係函數時有著比較特別分析法,稱之為狀態機構法,分別介紹如下:
4-2-1時序邏輯的模型
圖4-9為數位邏輯電路的模型,X為輸入,Y為輸出,意即輸出為輸入之函數。依此模型,數位邏輯電路可分為兩大類:組合邏輯與序向邏輯,對於組合邏輯,函數f單純為Y與X之關係,即Y=f(X);時序邏輯則除了X外,Y仍為時間t之函數,即Y=f(X﹐t)。分析上,Y=f(X﹐S(t)),S(t)是電路內部隨時間改變的狀態。
圖4-9 數位邏輯電路的模型,X為輸入,Y為輸出。
圖4-10為時序邏輯的模型,或稱作狀態機構,X為輸入,Y為輸出,S稱現狀態,S'稱次狀態。Y除為X的函數外,亦為現狀態S之函數,即Y=f(X﹐S),意即輸出Y不但隨輸入X而改變,亦會根據現在所處的狀態而有不同的輸出。現狀態S為次狀態S'的前次記憶,此記憶結構即是時序邏輯與組合邏輯的區別所在,這結構使時序邏輯記得電路目前處於何種狀態;而在任一時刻,即使對於相同的輸入X,輸出Y也會因現狀態S的不同而可能有所不同。而更重要的是次狀態S'亦是X及S之函數,即S'=g(X﹐S),意即即使對於相同的輸入X,也會因現狀態S的不同而可能進入不同的次狀態S',狀態的改變稱轉態。這一組合邏輯與記憶的結合,使數位邏輯電路的變化與功能躍進,不再只是組合邏輯般的簡單輸入與輸出對應。
圖4-10 時序邏輯的模型,X為輸入,Y為輸出。
圖4-11 同步時序邏輯模型,記憶是為一組有相同clock的正反器
依此記憶的結構不同,又可將時序邏輯分為同步與非同步:同步時序邏輯的記憶為一組有相同clock(此即之所以名為同步)的正反器(圖4-11);非同步時序邏輯則沒有共同的clock,而是由非同步set、reset或j、
k作為輸入的正反器、或根本沒有正反器,而僅由結構中組合邏輯的時間延遲所構成的記憶。同步時序邏輯的現狀態(即正反器的輸出)只有在clock的正緣(或負緣)才會改變,並且是整組正反器的輸出同步地改變;非同步序向邏輯的現狀態則隨時可因輸入變化而改變。同步時序邏輯的問題較單純,應用亦較廣泛,故本章先討論同步時序邏輯。
另外,依輸出函數Y的型態,可將同步或非同步邏輯分成兩種模型:當Y=(X﹐S)時,圖4-11稱梅利模型,或稱為梅利機(Mealy);當Y=(S)時,則稱作摩爾(Moore)模型或摩爾機。
4-3-1範例一:
設計一同步摩爾機,當輸入x出現任何101順序時,輸出y為1,否則,y=0。
解:
首先繪出狀態圖4-12,假設電路狀態初始值S=00:
圖4-12 同步時序同步摩爾機之狀態轉移圖
接著依此狀態圖繪轉態表:
S'
x=0
x=1
S=00,y=0
00
01
S=01,y=0
11
01
S=11,y=0
00
10
S=10,y=1
11
01
以卡諾圖方式簡化可得:
S'[0]= x&!S[1]
# !S[1]&S[0]
# S[1]&!S[0]
= x&!S[1]
# S[1]$S[0]
S'[1]=!x&!S[1]&S[0]
# x&S[1]&S[0]
# !x&S[1]&!S[0]
= !x&(S[1]$S[0])
# x&S[1]&S[0]
y = S[1]&!S[0]
圖4-13 所設計得之電路架構(Figl010)
其電路如圖4-13。直接以AHDL描述狀態圖如下:
SUBDESIGN
seqdetect
( x,sclock
: INPUT;
y : OUTPUT;)
VARIABLES
S[1..0]
: DFF;
BEGIN
S[].CLK=sclock;
CASE S[]
IS
WHEN B"00"
=>
IF x==B"1"
THEN
S[]=B"01";
ELSE
S[]=B"00";
END IF;
WHEN B"01"
=>
IF x==B"0"
THEN
S[]=B"11";
ELSE
S[]=B"01";
END IF;
WHEN B"11"
=>
IF x==B"1"
THEN
S[]=B"10";
ELSE
S[]=B"00";
END IF;
WHEN B"10"
=>
IF x==B"0"
THEN
S[]=B"11";
ELSE
S[]=B"01";
END IF;
END CASE;
y=(S[]==B"10");
END;
至此,有幾點是值得討論的:
1. 繪出狀態圖後,發現共四個狀態,由於使用的D正反器本身有兩個狀態,因此最少須log24=2個正反器。
2. 除了D正反器,亦可使用其它型正反器,如JK或T型,或混合使用,只是轉態表須做轉換。
3. 對各狀態指定一值的動作叫狀態指定。狀態指定是可以任意的,不同的指定方式會造成不同的結果電路,經一定程序可得到設計者所需的"最佳"狀態指定。上例是對主要轉態路逕做葛雷碼編碼,即所謂最少變化指定。
4. 以正反器的輸出直接作為狀態機的輸出,則可得到更短的tco(clock
to output time)。做法如下:
SUBDESIGN
seqdetect
(
x,sclock
: INPUT;
y : OUTPUT;
)
VARIABLES
S[1..0],yy
: DFF;
BEGIN
(S[],yy).CLK=sclock;
CASE S[]
IS
WHEN B"00"
=>
yy=B"0";
IF x==B"1"
THEN
S[]=B"01";
ELSE
S[]=B"00";
END IF;
WHEN B"01"
=>
yy=B"0";
IF x==B"0"
THEN
S[]=B"11";
ELSE
S[]=B"01";
END IF;
WHEN B"11"
=>
IF x==B"1"
THEN
S[]=B"10";
yy=B"1";
ELSE
S[]=B"00";
yy=B"0";
END IF;
WHEN B"10"
=>
yy=B"0";
IF x==B"0"
THEN
S[]=B"11";
ELSE
S[]=B"01";
END IF;
END CASE;
y=(S[]==B"10");
END;
仔細分析上面的程式,可發現其仍是一摩爾機。其實可直接改變狀態指定:
(0,0)-->(0,0,0),(0,1)-->(0,0,1),(1,1)-->(0,1,1),(1,0)-->(1,1,0),程式如下:
SUBDESIGN
seqdetect
(
x,sclock
: INPUT;
y : OUTPUT;
)
VARIABLES
S[2..0]
: DFF;
BEGIN
S[].CLK=sclock;
CASE S[]
IS
WHEN B"000"
=>
IF x==B"1"
THEN
S[]=B"001";
ELSE
S[]=B"000";
END IF;
WHEN B"001"
=>
IF x==B"0"
THEN
S[]=B"011";
ELSE
S[]=B"001";
END IF;
WHEN B"011"
=>
IF x==B"1"
THEN
S[]=B"110";
ELSE
S[]=B"000";
END IF;
WHEN B"110"
=>
IF x==B"0"
THEN
S[]=B"011";
ELSE
S[]=B"001";
END IF;
END CASE;
y=S[2];
END;
由此例中可看出此種沒有規則性,不像如上下計數器,移位暫存器等之設計較有思考性及有規律可循而加以設計,而此種時序邏輯設計就比較繁雜麻煩,若依前面第一種之狀態圖轉換表列出輸出入間之關係式再予以卡諾圖化簡後再設計繪出圖10-10電路實在是繁雜而辛苦的,最簡潔的方法就是以HDL語法來描述此種狀態機是再也方便不過了,因此在時序電路中依控制需要規劃出狀態圖後便可依此狀態圖來編寫HDL之狀態機語法是迫切需要的.
依圖4-13電路予以繪製或以HDL語法之描述將CPLD予設定及組譯後依序由x輸入端輸入各種順序值時檢測輸出y之對應值如何?此種時序判別偵測控制在資料檢測或比較或抓取控制時是相當重要的一種控制應用.
4-3-2範例二:
設計一同步摩爾機,當輸入x(按鍵壓放輸入)時自動產生一個同步輸入之時脈。
解:
首先繪出狀態圖4-14,假設電路狀態初始值S=00:
圖4-14 壓按鍵自動產生一個同步輸入之時脈之狀態轉移圖
狀態圖標示著當按鍵KEY=0未壓下時狀態處於原S0=00態,若按鍵壓下時KEY=1因此在clock來臨時轉態成S1=01態,但此狀態在下個clock來臨時要自動轉成S2=10
態以便由S[1..0]之S[0]輸出HI=1一個clock之0>1>0脈衝波,接著要一直等著按鍵KEY放開=0即當KEY=1時仍維持於S2=10態使得不會連續產生clock脈衝直到KEY=0放開後回到S0=00態又等待新的按鍵輸入之KEY=1起始態,注意!此為三種狀態需使用二個D正反器,另一個S3=11態是不合理存在的,故需立即由clock轉移到起始態S0=00.
根據上列之狀態圖作HDL語法描述如下:
SUBDESIGN
keypuls
(
sysclk,btna:
INPUT;%輸入端為系統脈衝及調整時間按鈕
PS: OUTPUT;%輸出為stka[0].q
%
)
VARIABLE
% 宣告變數參數 %
stka[1..0]:
DFF; %調整時間之二個雙態DFF及設定模式計數器等陣列%
BEGIN
%描述動作開始%
stka[].clk=sysclk; %D型正反器為同步式接到輸入sysclk之輸入端%
CASE stka[]
IS %按鍵stka為二個D型正反器記載輸入設定四個功能模式%
WHEN B"00"
=> %當按鍵stka計數器輸出為00態時%
IF(btna==1)
THEN %按鍵btna壓下時btna=HI則令stka轉為01%
stka[]=B"01";
ELSE
%否則若按鍵btna沒被壓下時btna=LOW令stka維持00%
stka[]=B"00";
END IF;
%此即stka[]=00之狀態變化描述完畢%
WHEN B"01"
=> %當按鍵stka計數器輸出為01態時應轉成10態%
stka[]=B"10";
%此輸出10態即產生一個sysclk之單一脈衝輸出%
WHEN B"10"
= > %當按鍵stka計數器輸出為10態時需等待其放開%
IF(btna==0)
THEN %若btna=0即調整時鐘值之輸入按鍵脈沖放開則%
stka[]=B"00";
%令按鍵a計數器輸出轉回00原值之按鍵放開態%
ELSE
%否則若按鍵btna仍被壓下時btna=HI則令stka維持10%
stka[]=B"10";
END IF;
%此即stka[]=01之狀態變化描述完畢%
WHEN B"11"
= >%按鍵stka計數器輸出為非正常11態時應轉成00態%
stka[]=B"00";
END CASE;
%結束按鍵a之調整計時之同步單一脈衝產生之電路描述%
PS=stka;
END;
若以繪圖法則如圖4-15所示,此圖必需由轉態表加以化簡得輸入及輸出之邏輯關係而得.
圖4-15 為按鍵產生單一clock脈衝電路
注意!到圖4-15電路中加入了直接非同步清除控制就成為梅利機,讀者試著重畫狀態圖及HDL描述並予以實驗測試記錄討論.
HDL語法描述狀態機構只是描述各正反器之資料D輸入端與輸出端Q之對應下一個時序clock來臨時所需處置之狀態以便clock來臨時即轉態時轉達到所預設定之D資料值,此種描述並非僅為CASE﹐WHEN﹐IF﹐ELSE﹐ELSEIF等指令描述而已,其它如TABLE等轉移表方式也極方便使用.
4-3-3 範例三:
以ALTERA之HDL語法描述一個0
- 9之同步計數器但其計數序卻不為0-9等輸出循環序而是為1﹐9﹐7﹐6﹐4﹐8﹐5﹐2﹐0﹐3等亂序時,要以繪圖法繪其電路時將顯得很麻煩,卡諾圖繪製化簡再列其組合函數邏輯實在耗時,以HDL之機構描述顯然簡易多了,簡化的工作就由電腦來處理不用我們來煩心,為同步式以STATE
MACHINE描述如下:
類同於前述之步進馬達控制構仍以PHASE[3..0]隨同狀態序輸出,輸入具重設RESET控制,並可作往上或往下之UD選擇計數序,另有計數致能HLD之輸入控制,其格式極類同於步進馬達之正逆轉CW及停HLD之輸入控制.
下列為十個狀態機構之上下任意輸出時序之計數器HDL描述語,任意不同之輸出及對應狀態序可予以隨所需而設定編序,故此種同步時序計數器使用這種摩爾機或梅利機作HDL語描述是相當簡易且有規則性可循,當然其它之有關時序控制都可以此種狀態機構予以描述.
SUBDESIGN
udcntr
(
clk ,reset :INPUT;
hld,ud :INPUT;
phase[3..0] :OUTPUT;
)
VARIABLE
ss:MACHINE OF BITS (phase [3..0])
WITH STATES (
s0 = B"0001", %1 %
s1 = B"1001", %9 %
s2 = B"0111", %7 %
s3 = B"0110", %6 %
s4 = B"0100", %4 %
s5 = B"1000", %8 %
s6 = B"0101", %5 %
s7 = B"0010", %2 %
s8 = B"0000", %0 %
s9 = B"0011");%3 %
BEGIN
ss.clk = clk;
ss.reset = reset;
TABLE
ss, hld, ud => ss ;
s0, 0, x => s0 ;
s0, 1, 1 => s1 ;
s0, 1, 0 => s9 ;
s1, 0, x => s1 ;
s1, 1, 1 => s2 ;
s1, 1, 0 => s0 ;
s2, 0, x => s2 ;
s2, 1, 1 => s3 ;
s2, 1, 0 => s1 ;
s3, 0, x => s3 ;
s3, 1, 1 => s4 ;
s3, 1, 0 => s2 ;
s4, 0, x => s4 ;
s4, 1, 1 => s5 ;
s4, 1, 0 => s3 ;
s5, 0, x => s5 ;
s5, 1, 1 => s6 ;
s5, 1, 0 => s4 ;
s6, 0, x => s6 ;
s6, 1, 1 => s7 ;
s6, 1, 0 => s5 ;
s7, 0, x => s7 ;
s7, 1, 1 => s8 ;
s7, 1, 0 => s6 ;
s8, 0, x => s8 ;
s8, 1, 1 => s9 ;
s8, 1, 0 => s7 ;
s9, 0, x => s9 ;
s9, 1, 1 => s0 ;
s9, 1, 0 => s8 ;
END TABLE;
END;
圖4-16 為UDCNTR.TDF之任意數上下計數器使用CPLD之LE狀況
因有0 - 9等十個狀態序,故此MOORE機需使用24
= 16 >=10即四個正反器並搭配其對應LE內之LUT邏輯組合元件而成,但因組合邏輯輸入條件超過四個,且每個LE僅有一個暫存器,因此可見此邏輯電路控制將不止使用四個LE,其邏輯組合結構電路可由組譯後之.RPT加以觀察組合而成.
由圖4-16由輸入時脈clk端接線到LE配置網線圖可見使用四個LE之暫存器,其它之LE則作為組合邏輯之接線控制用,更詳細之使用情形可由組譯完成後之UDCNTR.RPT檔案中可予觀察記錄出.
4-4 使用ALTERA進階版之時序模擬及測試應用
ALTERA公司更高級版對應所設計組譯完成之所有檔案提供有時序模擬功能,故對應輸入埠點及輸出埠點以及所有結點都可對應時序間隔作輸入設定其狀態如HI=1或LOW=0或三態高阻抗等等或為脈衝或為連續之脈衝波頻率等,對應各輸入埠設定狀態及模擬時間間隔等編序完成後,可由SIMULATION功能予以模擬出對應輸出態,觀察輸入輸出對應時序態之觀測幕可予移位,放大縮小並以游標移動標示檢測各時序對應關係,因此在沒有對應電路之結構位元資料載入測試時可以此種時序模擬方式予以觀測.
ALTERA公司同時提供有時序輸入作數位邏輯電路之設計模式,但此模式必需對應各輸入及輸出或結點之狀態作詳全之描繪才可正確得到電路架構,因編幅關係在此不予討論.
電路之模擬方法相當簡易其步驟歸納說明如下:
1. 若已建立好模擬檔則可讀取.scf檔直接同其它檔案一樣予以編輯。
2. 若組譯好後之檔案由主控器Maxspuls
II之Waveform Editor功能項作此檔案之模擬編輯,如圖4-17所示:
3. 然後再由File之Size選項中作整個編輯時序大小,如圖4-18及圖4-19作編輯設定大小為10.0US,此大小需視需要予以設定調整.
4. 由NODE之選項功能中之Enter
Node From SNF項目中將由檔案中選擇輸出入埠及結點作編輯模擬,圖4-18為功能選擇,圖4-19則為
檔案UDCNTR.TDF中功能項由"LIST"表列之各接腳圖將依次選項以
"=>"予移入標示要模擬之接腳或結點或以"<="符號標示退出不予模
擬之選項,並作各種型態TYPE如輸出入、結點及組合、群體、暫
存器等模擬設定.
圖4-16 作波形圖之編輯選項
圖10-17 編輯時間之大小選項
圖10-18 編輯時間之大小之設定輸入
圖4-19 為由.SNF檔案中讀取結點及輸出入端埠作波形時序模擬
圖4-20 檔案中結點及輸出入端埠作選項搬移及各種型態TYPE之設定
5. 各接腳及結點設定模擬好後各接腳結點將出現在編輯模擬圖面上,各接腳及結點排序可如同CPLD之接腳設定拖拉予以排序,各個輸出入端及結點之輸入設定共分成三個區段,如圖4-20所示第一區段為輸入輸出及結點名稱和其型態區,第二區段為移動游標所在區之垂直各點之邏輯狀態標示值區,第三區即為波形及邏輯狀態標示設定或對應輸出顯示區.
6. 各個要模擬之輸出輸入端,結點,暫存器,組合邏輯及組群等選項排序設定好後,各接腳及結點將依次以滑鼠予以壓滑設定,若要整行時應在此接腳行之標示第二區起始端予以壓放設定,例如時鐘Clock之連續脈衝則需整行設定,當區域已以黑色區塊標示好後,由Edit功能項如圖4-21所示以Overwrite選項後之"Counter
Value"功能項中予以設定,其頻率之設定可由"Option"之"Gride Size"選項功能中加以設定其每格對稱時序之半週期時間如25ns(20MHZ)或50ns(10MHZ)予以設定.
若要設定整個波形區(第三區)全為High(1)或為Low(0)常態時同樣壓放選定整行,再以"Overwrite"選項之"High(1)"或"Low(0)"等功能予以設定全為HI或LOW之常態輸出入,若不要整區可在任意第三區內以滑鼠在任一行之任一起始點壓著拖拉到終點放開後此顯示區將全黑標示,後再由"Overwrite"
選項作"Clock Value"或"High=1"或"Low=0"等標示著墨區予以疊加設定,例如連續脈衝波Clock設定輸入為全為固定之連續脈衝波或也可分段設定於不同之脈衝波,而如致能控制en則正常時需為HI故以全區設定為HI=1態後再於某區段予以設定為LOW=0以便觀察其LOW時之計數器是否停止計數,另外重設清除Clear之控制為LOW=0動作清除而其餘應處於HI=1態,因此在en及clear輸入模態應設定為常HI=1態再分別於各重點測試區予設定小的動作LOW=0態予以偵測.
"Align to
Grid"為設定將所選取波形資料狀態與Grid格線對齊,以便設定正確同步時序,其它尚有Undo(復原)、Cut(剪下)、Copy(拷貝)、Paste(貼上)、刪除(Delete)及插入(Insert)、橫向伸縮(Grow
or Shrink)等編輯功能.
圖4-21 各輸出輸入及結點之狀態選擇設定
7. 接著由"Option"選項中之選擇"Snap
to Gride"及"Show Grid Ctrl +Shift+G"並選定顯示工具圖格(Show Toolbar)及工具圖格之狀態(Show
Statuss Bar)等設定顯示幕之狀態模式,並由(Grid Size)選項作標格之大小時間間距如25ns或50ns等設定以便觀測.
圖4-22 顯示幕之"Option"設定選項及標格(Grid)大小設定
8. 當輸入及結點狀態設定好後,應先予以"SAVE"存檔成.SCF附屬檔名後才可由主功能群如圖4-16之"Compiler"選項功能中之"Processing"分項中之"Function SNF Extractor"選定預備作初步功能模擬之簡單編譯,若有錯誤則根據錯誤訊息予以修正更改,若沒錯誤則由主功能群之"Simulator"如圖4-16選項功能中將出現模擬功能之設定選項如圖4-22應注意!先將前面所設定之輸入及結點態予以存.SCF檔後圖中亦應標示此相同的主檔名,並作編譯模擬過程中所發現之錯誤,及警告等訊息告知如因回授引起之振盪"Oscillation"或電路之訊隔"Glitch"或使用CPLD型號"Use Device"等不當設定,以及要輸出測試結果如"Setup/hold "穩定保持時間以及輸出檢測"Check Output"等標示輸出,此並可設定要組譯之時間區如"Start Time:"及終止區"End Time:"等範圍,壓下START圖示功能便開始編譯,圖4-24,25為步進馬達控制檔案UDCNTR.TDF之時序設定模擬及其對應輸出結果:
圖4-23 開始作時序模擬(Simulation)編譯之設定選項
9. 觀測所編譯完成之時序圖時可更改圖4-22之標格"Grid
Size"予以設定及圖幕之移位觀測,並可將觀測游標下之小按鈕以滑鼠壓著移動到圖形各區予以觀測各區垂直各點之時間值,並由圖幕左下方之"Time:"予以標示,同時也可移動參考時基之游標線,同樣壓按其下方之小按鈕則可予移位標示,以圖幕中下方之"Ref:"標示值,同時在右下方之"Interval:'標示著游標線及參考時基游標線間之時間間隔用以量測波形及狀態點間之時距,圖4-25標示著參考時基游標為5.0us而時間游標為4.95us故其時間間個隔為Time-
Ref = 4.95us - 5.0us= - 50ns,波形幕面可由圖內之放大鏡予以放大或縮小功能標示予以選擇壓放即可改變.
以放大縮小鏡設定圖幕面之放大縮小後要分析觀察任一點之狀態時可利用滑鼠咬住下方之游標或點放左右移動之箭頭予以移動,幕面之波形便可到任意點去觀測詳細波形變化情形或"Glitch"發生狀態予以分析記錄下來,並如同示波器之水平放大功能一樣,要量測任一點之時間可將時間之游標移到要觀測點予以觀測,或將參考點之游標移到與時間游標點間便可觀測任二點區間之時間,如圖4-25所示.
圖4-24 為任意四位元同步上下計數器及en﹐clear等控制模擬電圖
圖4-25 任意四位元同步上下計數器之游標移位量測波形區間之圖示
10. 若想將輸入狀態改變或時間大小再予拉長時,需注意!若有更改則需重新回到步驟8再予以編譯設定才可得新的模擬時序,此模擬完成之時序圖可自動存於"Save"同檔名之.SCF附屬檔,也可以"Save
As"存於不同路徑之不同檔名,此種模擬時序也可以當作時序圖法反過來將其組譯成電路結構資料檔作為原始設計檔案.
根據上述十種規化模擬圖形法則,將前面所設計實驗過之任何.TDF文字檔或.GDF圖形檔都可予以模擬測試觀察記錄討論.
另外將除60之同步計數除頻器SMINCNT.GDF根據上述十個步驟予以輸出入及結點設定後模擬編譯在不同標格下之圖形如圖4-26及27所示:
圖4-26 除60之同步計數除頻器及en﹐clear等控制模擬電圖
圖4-27 除60之同步計數除頻器及en﹐clear等控制模擬放大標示圖
圖4-28為較新版本所模擬除60之同步計數除頻器(SMINCNTR)及en,clear等控制時序圖,圖中可觀察出在每次除
6之計數達101=5時會產Glitch波,故將圖予以放大並將幕面移動後拉游標到Glitch點上如圖4-29便可觀測此點之對應時序,同時可分析到此Glitch發生在脈衝波輸入之HI端而非在轉態之0到1正緣觸發端,故對應電路並不會產生錯誤之計數,Glitch之脈波寬可由Option選項中之"Grid Size"設定如圖4-23標示予以設定為5ns後就可量測得其時寬約為5ns.
圖4-28 除60之同步計數除頻器及en﹐clear等控制新版本之模擬時序圖
圖4-29 幕面放大及移動水平座標作觀測Glitch對應時序及脈衝寬
另外我們再以乘法器電路中之按鍵輸入產生一個同步脈衝週期之單一脈衝控制產生電路,如圖4-30予以設定組譯完成後,根據前述之十個模擬設定規劃步驟予以操作設定,作時序模擬測試組譯可得如圖4-31時序脈衝產生器之對應輸入按鍵KEY壓放後產生單一輸入時脈C之週期寬脈衝,由時序模擬圖中可見,將於按鍵壓上時的脈衝觸發正緣端才令輸出觸發轉態為HI,而在第二個C時脈來臨時輸出不管KEY是否壓著之HI態將於此正緣端觸發令輸出轉回HI 態,但對照圖4-30電路可觀察出動作時序中輸出pulse並沒有於c之時脈正緣觸發輸出?為十麼呢!注意到我們設定輸入之時脈週期為25ns而HI之區間則為12.25ns,再來看看此電路之正反器執行延時測試如圖10-28含時脈卻達12.1ns,難怪由時序分析圖中看起來好像D正反器是負緣觸發,若將時脈改成200ns再予以組譯分析時序則如圖4-33所示,可見輸出對應時脈是在正緣觸發而非負緣,故此在分析時脈波及模擬時,各種時鐘波之頻率週期大小,邏輯執行之延時等都要列入考慮才不會導致錯誤分析及發展.
圖4-30 對應按鍵壓放產生單一時脈之電路圖
圖4-31 對應按鍵壓放產生單一時脈之時序模擬波形圖
圖4-32 對應按鍵壓放產生單一時脈之延時時序圖
圖4 -33 對應按鍵壓放產生單一時脈之寬時序模擬波形圖