




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
任務(wù)6.1表決器設(shè)計(jì)
任務(wù)6.2計(jì)數(shù)器設(shè)計(jì)
任務(wù)6.3分頻器設(shè)計(jì)
任務(wù)6.4流水燈控制器設(shè)計(jì)
任務(wù)6.5交通燈控制器設(shè)計(jì)
任務(wù)6.6序列檢測(cè)器設(shè)計(jì)
任務(wù)6.7漢字顯示設(shè)計(jì)
任務(wù)6.8梯形波設(shè)計(jì)
任務(wù)6.9數(shù)字鐘設(shè)計(jì)
任務(wù)6.10信號(hào)發(fā)生器設(shè)計(jì)
任務(wù)6.1表決器設(shè)計(jì)一、設(shè)計(jì)要求基本要求:設(shè)計(jì)實(shí)現(xiàn)一個(gè)3人判決電路,若有2人或者超過2個(gè)人同意,則表決結(jié)果為通過,否則表決結(jié)果不通過。拓展要求:讀者可以在基本要求的基礎(chǔ)上嘗試完成一些拓展,如N人表決器、其他任意組合邏輯電路等。本任務(wù)涉及的知識(shí)點(diǎn)有行為建模、數(shù)據(jù)流建模、結(jié)構(gòu)建模、選擇語句。下面對(duì)這些知識(shí)點(diǎn)進(jìn)行說明。(1)各種建模方法得出的電路圖不盡相同,但最終仿真結(jié)果完全相同。也就是說,雖然最終的實(shí)現(xiàn)電路不同,但功能相同。(2)行為建模方式的典型特征是使用了always語句;數(shù)據(jù)流建模方式的典型特征是使用了assign語句;結(jié)構(gòu)化建模的典型特征是使用了例化語句,包括門級(jí)原語例化。在一個(gè)模塊中,可以采用以上三種建模方式中的任一種方式建模,也可以采用多種方式混合建模。(3)在可綜合的設(shè)計(jì)中,條件語句if、多路分支語句case只能用在always語句塊中,也就是只能用在行為建模中。(4)從本任務(wù)中也可以看出,從門級(jí)建模到數(shù)據(jù)流建模再到行為建模,建模抽象程度越來越高,距離電路的具體實(shí)現(xiàn)越來越遠(yuǎn),但是也越來越接近設(shè)計(jì)人員解決問題的思維。二、設(shè)計(jì)分析3人判決電路是一道經(jīng)典的數(shù)字電路例題,下面我們來看一下數(shù)字電路中對(duì)該問題的求解過程。(1)理解題意。設(shè)a、b、c分別代表3個(gè)人,同意用1表示,不同意用0表示,y代表表決結(jié)果,1表示通過,0表示不通過。根據(jù)題意有,當(dāng)a、b、c三個(gè)中有2個(gè)為1,或者3個(gè)均為1時(shí),y為1;否則,y為0。(2)根據(jù)題意列真值表,如表6-1所示。(3)根據(jù)真值表列輸出方程如下:y=a'bc+ab'c+abc'+abc(4)采用代數(shù)化簡法或者卡諾圖化簡法化簡方程,如圖6-1所示?;喓蟮姆匠虨閥=ab+bc?+?ca。(5)根據(jù)化簡后的方程畫出電路圖,如圖6-2所示。三、設(shè)計(jì)與仿真對(duì)于設(shè)計(jì)實(shí)現(xiàn)一個(gè)3人判決電路的五個(gè)步驟,也可以采用VerilogHDL語言進(jìn)行數(shù)字電路建模,建模代碼見例6-1,仿真代碼見例6-2?!纠?-1】
設(shè)計(jì)代碼。下面對(duì)上述電路設(shè)計(jì)進(jìn)行說明。(1)?y1、y2、y3、y4、y5為設(shè)計(jì)的5個(gè)輸出,分別對(duì)應(yīng)著設(shè)計(jì)分析中的5個(gè)步驟的輸出結(jié)果,其實(shí)現(xiàn)方法與步驟中的說明是完全吻合的。(2)每個(gè)輸出都分別對(duì)應(yīng)著一個(gè)獨(dú)立的組合邏輯電路,由一個(gè)assign語句或者一個(gè)always語句實(shí)現(xiàn)。(3)每個(gè)輸出根據(jù)是在assign語句中還是在always語句中被賦值,被定義成了wire或reg類型。在assign語句中被賦值時(shí),需要定義成wire類型;在always語句中被賦值時(shí),需要定義成reg類型。(4)使用Vivado軟件綜合的結(jié)果如圖6-3所示?!纠?-2】
仿真代碼。下面對(duì)上述仿真代碼進(jìn)行說明。(1)?a、b、c三個(gè)輸入被拼接成一個(gè)信號(hào),再通過加1賦值,代碼如下:forever#5{a,b,c}={a,b,c}+1;這是一種常用的產(chǎn)生組合邏輯電路的激勵(lì)的方法,該法簡潔、實(shí)用。(2)五步求解方法對(duì)應(yīng)著不同的建模方法,但其仿真波形都是相同的,如圖6-4所示。從圖6-4所示的仿真波形中可以看出,以上五種不同的建模方法均實(shí)現(xiàn)了判決功能,都是問題的解決方法。任務(wù)6.2?計(jì)
數(shù)
器
設(shè)
計(jì)計(jì)數(shù)器是由基本的計(jì)數(shù)單元和一些控制門所組成的,計(jì)數(shù)單元?jiǎng)t由一系列具有存儲(chǔ)信息功能的觸發(fā)器構(gòu)成。計(jì)數(shù)器在數(shù)字系統(tǒng)中的應(yīng)用廣泛。例如,在電子計(jì)算機(jī)的控制器中對(duì)指令地址進(jìn)行計(jì)數(shù),以便順序取出下一條指令;在運(yùn)算器中作乘法、除法運(yùn)算時(shí)記下加法、減法次數(shù);在數(shù)字儀器中對(duì)脈沖進(jìn)行計(jì)數(shù);在實(shí)際應(yīng)用中可以記錄已經(jīng)完成的工時(shí)數(shù)、產(chǎn)品數(shù);等等。計(jì)數(shù)器在數(shù)字系統(tǒng)中主要用于對(duì)脈沖的個(gè)數(shù)進(jìn)行計(jì)數(shù),以實(shí)現(xiàn)測(cè)量、計(jì)數(shù)和控制功能,同時(shí)兼有分頻功能。一、設(shè)計(jì)要求基本要求:設(shè)計(jì)實(shí)現(xiàn)一個(gè)模8加1計(jì)數(shù)器,計(jì)數(shù)值為0,1,2,3,4,5,6,7,0,…,依次循環(huán)。拓展要求:在基本要求的基礎(chǔ)上,讀者可以嘗試自行完成一些拓展,如模N計(jì)數(shù)器、任何計(jì)數(shù)器等。本任務(wù)涉及的知識(shí)點(diǎn)有行為建模、結(jié)構(gòu)化建模、狀態(tài)機(jī)建模、計(jì)數(shù)器、圖形化展示。下面對(duì)這些知識(shí)點(diǎn)進(jìn)行說明。(1)計(jì)數(shù)器。進(jìn)行計(jì)數(shù)器設(shè)計(jì)需要清楚加減條件和停止條件。對(duì)于本例,進(jìn)行0~7計(jì)數(shù),使用3位表示計(jì)數(shù)結(jié)果,因此對(duì)加1條件以及停止條件都不需要進(jìn)行額外處理。(2)圖形化展示。當(dāng)設(shè)計(jì)實(shí)現(xiàn)的是信號(hào)波形時(shí),仿真波形可以用圖形化的形式展示,這樣既直觀易懂,也可以提高學(xué)生對(duì)本門課程的學(xué)習(xí)興趣。使用ModelSim進(jìn)行圖形化展開時(shí),需要在ModelSim軟件中將輸出設(shè)置成模擬信號(hào)并展示出來。例如,信號(hào)發(fā)生器的輸出通常使用仿真軟件直接顯示。二、設(shè)計(jì)分析實(shí)現(xiàn)計(jì)數(shù)器時(shí),可以采用數(shù)字電路設(shè)計(jì)步驟求解得到電路圖,然后使用HDL語言對(duì)電路圖建模。使用數(shù)字電路設(shè)計(jì)步驟可以得到電路圖,具體的設(shè)計(jì)步驟與HDL語言無關(guān),此處省略。此處僅給出使用傳統(tǒng)數(shù)字電路方法得到的電路圖,如圖6-5所示。對(duì)模8加1計(jì)數(shù)器進(jìn)行功能分析,可以得到圖6-6。圖6-6中的U1、U2、U3分別對(duì)應(yīng)著圖6-5中從上到下的3個(gè)D觸發(fā)器,各個(gè)觸發(fā)器的clk、q、q_bar均在圖中繪制了波形圖,3個(gè)D觸發(fā)器輸出的值連續(xù)為000、001、010、011、100、101、110、111、000,為加1計(jì)數(shù)的結(jié)果。圖6-6是分析電路圖后繪制的波形圖。對(duì)于計(jì)數(shù)器,除了上述采用傳統(tǒng)數(shù)字電路方法得到電路圖外,還可以直接使用HDL語言進(jìn)行行為建模,直接加1計(jì)數(shù),計(jì)數(shù)器的加減條件和終止條件都非常明確。計(jì)數(shù)器可以理解為一種狀態(tài)轉(zhuǎn)換,因此也非常適合使用狀態(tài)機(jī)建模來實(shí)現(xiàn)。計(jì)數(shù)器對(duì)應(yīng)的狀態(tài)圖如圖6-7所示。圖6-7的狀態(tài)圖對(duì)應(yīng)的狀態(tài)轉(zhuǎn)換不需要條件,次態(tài)只跟當(dāng)前狀態(tài)相關(guān)。三、設(shè)計(jì)與仿真依據(jù)上述設(shè)計(jì)分析可知,計(jì)數(shù)器可以通過三種方法實(shí)現(xiàn),下面分別進(jìn)行說明。第一種方法:采用傳統(tǒng)數(shù)字電路方法得到電路圖,對(duì)計(jì)數(shù)器進(jìn)行建模?!纠?-3】
用D觸發(fā)器構(gòu)成一個(gè)模8加1計(jì)數(shù)器,即直接使用電路圖建模。下面對(duì)上述電路設(shè)計(jì)代碼進(jìn)行說明。(1)該設(shè)計(jì)代碼依據(jù)的是電路圖。也就是說,首先要通過數(shù)字電路方法得到計(jì)數(shù)器的電路原理圖,再依據(jù)電路圖實(shí)現(xiàn)VerilogHDL代碼。(2)整個(gè)設(shè)計(jì)實(shí)現(xiàn)過程是:首先得到一個(gè)D觸發(fā)器dff,再依據(jù)電路圖中D觸發(fā)器的連接關(guān)系例化3次,得到3個(gè)D觸發(fā)器。(3)下面的3條例化語句生成了3個(gè)D觸發(fā)器。該例化語句使用了位置關(guān)系法。感興趣的讀者可自行改為名稱關(guān)聯(lián)。第二種方法:直接采用行為建模方法實(shí)現(xiàn)計(jì)數(shù)器?!纠?-4】
直接使用行為建模方法得到一個(gè)模8加1計(jì)數(shù)器。下面對(duì)上述電路設(shè)計(jì)代碼進(jìn)行說明。(1)直接使用行為描述,代碼簡潔、易懂。(2)如果設(shè)計(jì)一個(gè)最大值非全1的計(jì)數(shù)器,則需要進(jìn)行計(jì)數(shù)終止條件的判斷,并進(jìn)行相應(yīng)的處理。例如,實(shí)現(xiàn)一個(gè)模7加1計(jì)數(shù)器,代碼如下所示。(3)行為建模比使用電路圖建模簡單易懂,且不需要太多數(shù)字電路設(shè)計(jì)的知識(shí),整個(gè)設(shè)計(jì)過程都借助強(qiáng)大的EDA工具來完成,符合電路設(shè)計(jì)的趨勢(shì)。第三種方法:使用狀態(tài)機(jī)建模方法實(shí)現(xiàn)計(jì)數(shù)器?!纠?-5】
直接使用狀態(tài)機(jī)建模方法得到一個(gè)模8加1計(jì)數(shù)器。下面對(duì)上述電路設(shè)計(jì)代碼進(jìn)行說明。(1)直接使用狀態(tài)機(jī)建模,代碼簡潔、易懂。(2)如果設(shè)計(jì)一個(gè)最大值非全1的計(jì)數(shù)器,則需要在狀態(tài)數(shù)量和狀態(tài)編碼上進(jìn)行處理,且簡單、直觀。例如,實(shí)現(xiàn)一個(gè)模7加1計(jì)數(shù)器。(3)狀態(tài)機(jī)建模比使用電路圖建模簡單易懂,容易實(shí)現(xiàn),且不需要太多數(shù)字電路設(shè)計(jì)的知識(shí),整個(gè)設(shè)計(jì)過程都借助強(qiáng)大的EDA工具來完成,符合電路設(shè)計(jì)的趨勢(shì)。(4)對(duì)于已知狀態(tài)轉(zhuǎn)換圖的電路來說,該實(shí)現(xiàn)方法有模板,所以推薦使用。(5)該狀態(tài)機(jī)使用的編碼方法為直接輸出型編碼,當(dāng)前狀態(tài)即當(dāng)前輸出。使用QuartusⅡ軟件以三種方法實(shí)現(xiàn)的電路圖如圖6-8所示。將三種實(shí)現(xiàn)方法統(tǒng)一在一個(gè)testbench上進(jìn)行測(cè)試,并比較結(jié)果?!纠?-6】
模8加1計(jì)數(shù)器的測(cè)試代碼。
計(jì)數(shù)器的仿真波形如圖6-9所示。從仿真波形中可以看出,該設(shè)計(jì)完成了一位模8加1計(jì)數(shù)器的功能。需要指出的是,計(jì)數(shù)器也可以用來設(shè)計(jì)信號(hào)發(fā)生器。本計(jì)數(shù)器的仿真波形使用模擬信號(hào)展示,即鋸齒波,如圖6-10所示。因此,可以通過計(jì)數(shù)器來實(shí)現(xiàn)多種信號(hào)波形。任務(wù)6.3?分
頻
器
設(shè)
計(jì)在數(shù)字邏輯電路設(shè)計(jì)中,分頻器是一種基本電路,用來對(duì)某個(gè)給定頻率進(jìn)行分頻,以得到所需的頻率。假定系統(tǒng)工作頻率為f1,某器件正常工作頻率為f2(通常小于f1),此時(shí)就需要分頻,分頻比為f1/f2。例如,系統(tǒng)工作頻率為100MHz,而液晶顯示控制器工作頻率為25MHz,此時(shí)就需要對(duì)系統(tǒng)工作頻率進(jìn)行4分頻,得到液晶顯示控制器的工作頻率。本任務(wù)涉及的知識(shí)點(diǎn)有分頻器、偶數(shù)分頻、奇數(shù)分頻、占空比。下面對(duì)這些知識(shí)點(diǎn)進(jìn)行說明。(1)分頻器。分頻器就是一種計(jì)數(shù)器。只需設(shè)置好計(jì)數(shù)的加減條件以及終止條件即可。(2)偶數(shù)分頻。偶數(shù)分頻的方法可用于所有場合,可實(shí)現(xiàn)占空比為50%的任意頻率。(3)占空比。占空比是指在一個(gè)脈沖循環(huán)內(nèi),高電平時(shí)間相對(duì)于總時(shí)間所占的比例。對(duì)于分頻得到的信號(hào),通常要求占空比為50%。但如果沒有占空比的要求,只有分頻要求,那么,這個(gè)分頻信號(hào)就可以非常容易地使用計(jì)數(shù)器來實(shí)現(xiàn)。實(shí)際工作中,較常用的分頻是整數(shù)分頻,且分頻得到的信號(hào)占空比為50%。下面對(duì)整數(shù)分頻的偶數(shù)分頻、奇數(shù)分頻、2n分頻共3種情況進(jìn)行分別討論。一、偶數(shù)分頻偶數(shù)分頻是最簡單的一種分頻模式,可通過計(jì)數(shù)器計(jì)數(shù)實(shí)現(xiàn)。如果要進(jìn)行N倍偶數(shù)分頻,那么可由待分頻的時(shí)鐘觸發(fā)計(jì)數(shù)器計(jì)數(shù),當(dāng)計(jì)數(shù)器從0計(jì)數(shù)到N/2-1時(shí),輸出時(shí)鐘進(jìn)行翻轉(zhuǎn),并給計(jì)數(shù)器一個(gè)復(fù)位信號(hào),使得下一個(gè)時(shí)鐘從零開始計(jì)數(shù),以此循環(huán)。這種方法可以實(shí)現(xiàn)任意的偶數(shù)分頻。例6-7給出的是一個(gè)參數(shù)型偶數(shù)分頻電路,通過調(diào)用該模塊實(shí)現(xiàn)任意偶數(shù)分頻。【例6-7】
參數(shù)型偶數(shù)分頻。下面對(duì)上述電路設(shè)計(jì)代碼進(jìn)行說明。(1)偶數(shù)分頻采用加法計(jì)數(shù)的方法只是對(duì)時(shí)鐘的上升沿進(jìn)行計(jì)數(shù),這是因?yàn)檩敵霾ㄐ蔚母淖儍H僅發(fā)生在時(shí)鐘上升沿。例6-7中使用了一個(gè)計(jì)數(shù)器p對(duì)上升沿計(jì)數(shù),計(jì)數(shù)到一半時(shí),控制輸出時(shí)鐘的電平取反,從而得到需要的時(shí)鐘波形。(2)例6-7中“divf_even”模塊定義了一個(gè)參數(shù)化的偶數(shù)分頻電路,并實(shí)現(xiàn)了一個(gè)6分頻電路。讀者可以在其他設(shè)計(jì)中例化該模塊并修改參數(shù),實(shí)現(xiàn)任意偶數(shù)分頻。二、奇數(shù)分頻奇數(shù)分頻有多種實(shí)現(xiàn)方法,下面介紹常用的兩種方法:錯(cuò)位“異或”法和錯(cuò)位“或”法。對(duì)于實(shí)現(xiàn)占空比為50%的N倍奇數(shù)分頻,首先進(jìn)行上升沿觸發(fā)的模N計(jì)數(shù),計(jì)數(shù)到某一選定值時(shí)進(jìn)行輸出時(shí)鐘翻轉(zhuǎn),得到一個(gè)占空比為50%的N分頻時(shí)鐘clk1;然后在下降沿,經(jīng)過與上面選定時(shí)刻相差(N-1)/2時(shí),翻轉(zhuǎn)另一個(gè)時(shí)鐘,得到另一個(gè)占空比為50%的N分頻時(shí)鐘clk2;最后將clk1和clk2兩個(gè)時(shí)鐘進(jìn)行異或運(yùn)算,就得到了占空比為50%的奇數(shù)N分頻時(shí)鐘。【例6-8】
錯(cuò)位“異或”法實(shí)現(xiàn)參數(shù)型奇數(shù)分頻?!纠?-9】
錯(cuò)位“或”法實(shí)現(xiàn)參數(shù)型奇數(shù)分頻。下面對(duì)上述兩種電路設(shè)計(jì)代碼進(jìn)行說明。(1)兩種實(shí)現(xiàn)方法都定義了一個(gè)參數(shù)化的奇數(shù)分頻電路,并實(shí)現(xiàn)了一個(gè)3分頻電路。讀者可以在其他設(shè)計(jì)中例化該模塊并修改參數(shù),實(shí)現(xiàn)任意奇數(shù)分頻。(2)對(duì)于奇數(shù)分頻,由于輸出波形的改變不僅僅發(fā)生在時(shí)鐘上升沿,還會(huì)發(fā)生在下降沿,所以要在上升沿和下降沿分別處理兩個(gè)信號(hào)clk_p和clk_q。奇數(shù)分頻的兩種實(shí)現(xiàn)方法的比較如圖6-11所示。與圖6-11仿真波形相對(duì)應(yīng)的測(cè)試代碼如例6-10所示。【例6-10】
兩種奇數(shù)分頻方法比較的測(cè)試代碼。仿真測(cè)試代碼中的調(diào)用模塊修改例化了電路的參數(shù),請(qǐng)讀者掌握在調(diào)用模塊中修改例化電路參數(shù)的方法。(3)錯(cuò)位“異或”法中,當(dāng)在時(shí)鐘上升沿且p?=?N?-?1時(shí)clk_p取反,當(dāng)在時(shí)鐘下降沿且p?=?N?-?1時(shí)clk_q取反,然后通過組合邏輯assignclk_N?=?clk_p^clk_q實(shí)現(xiàn)奇數(shù)分頻;錯(cuò)位“或”法中,當(dāng)clk上升沿和下降沿時(shí),分別在p?=?N?-?1和p?=?(N?-?1)/2時(shí)得到clk_p和clk_q,然后通過組合邏輯assignclk_N?=?clk_p|clk_q實(shí)現(xiàn)奇數(shù)分頻。請(qǐng)讀者結(jié)合仿真波形,尤其是借助仿真波形中的中間變量clk_p和clk_q來理解設(shè)計(jì)方法。三、2n分頻2n分頻電路是偶數(shù)分頻電路的特例,雖然可以采用偶數(shù)分頻的方法進(jìn)行,但由于2n的特殊性,也可以采用更加便捷的方式,如例6-11所示。【例6-11】2n分頻例一。下面對(duì)上述電路設(shè)計(jì)代碼進(jìn)行說明。(1)?2n分頻利用計(jì)數(shù)器的特征,每一個(gè)時(shí)鐘都需要加1計(jì)數(shù)。(2)例6-11中“divf_2powN”模塊定義了一個(gè)參數(shù)化的2^n分頻電路,并實(shí)現(xiàn)了一個(gè)4分頻電路。讀者可以在其他設(shè)計(jì)中例化該模塊并修改參數(shù),實(shí)現(xiàn)任意2^n分頻。注意:讀者應(yīng)掌握在調(diào)用模塊中修改例化電路參數(shù)的方法。四、分頻器電路測(cè)試可以將任務(wù)6.3中的分頻統(tǒng)一進(jìn)行測(cè)試,代碼如例6-12所示。【例6-12】
分頻器測(cè)試代碼。下面對(duì)上述電路仿真代碼進(jìn)行說明:(1)本代碼將三種分頻的實(shí)現(xiàn)方式在同一測(cè)試臺(tái)進(jìn)行輸出結(jié)果對(duì)比。由于三種實(shí)現(xiàn)方式輸入激勵(lì)完全相同,因此,放在一起測(cè)試不會(huì)添加任何工作量,只需多增加兩個(gè)例化語句即可;同時(shí),輸出結(jié)果可以放在一起進(jìn)行比較。(2)測(cè)試代碼中,將偶數(shù)分頻參數(shù)修改為10、奇數(shù)分頻參數(shù)修改為5、2n分頻參數(shù)修改為3,仿真結(jié)果如圖6-12所示。從圖6-12的仿真結(jié)果可以看出,三種分頻設(shè)計(jì)分別實(shí)現(xiàn)了10分頻、5分頻、8分頻,且分頻結(jié)果正確。(3)對(duì)整數(shù)分頻的補(bǔ)充說明。如果對(duì)分頻得到的頻率沒有占空比為50%的要求,則任何整數(shù)分頻都可以統(tǒng)一實(shí)現(xiàn)。例如N分頻,對(duì)時(shí)鐘上升沿計(jì)數(shù),當(dāng)計(jì)數(shù)到N?-?1時(shí)信號(hào)翻轉(zhuǎn)一次,當(dāng)計(jì)數(shù)在0~N中間任何一個(gè)數(shù)時(shí)信號(hào)再翻轉(zhuǎn)一次,即可實(shí)現(xiàn)N分頻。如下面的例6-13所示?!纠?-13】
實(shí)現(xiàn)占空比為M/N的N分頻。例6-13中,M、N均為參數(shù),實(shí)現(xiàn)占空比為M/N的N分頻信號(hào)。當(dāng)p?=?M?-?1時(shí),clk_N為低電平;當(dāng)p?=?N?-?1時(shí),clk_N為高電平。(4)對(duì)2n分頻的補(bǔ)充說明。除了可以得到2的N次冪分頻外,還可以得到2的N?-?1,N?-?2,…,1次冪分頻。只需要多添加幾條assign語句,如例6-14所示。【例6-14】2n分頻例二。2n分頻用途較廣,在此對(duì)2n分頻得到的頻率值進(jìn)行匯總,如表6-2所示。如果后續(xù)項(xiàng)目用到2n分頻時(shí),可以查表6-2。表6-2中,clkdiv是一個(gè)計(jì)數(shù)器,clkdiv[n?-?1]是指這個(gè)計(jì)數(shù)器的第n?-?1位。根據(jù)實(shí)際項(xiàng)目需要,選定適用的頻率后,可通過查表6-2得到n,當(dāng)然也可以通過計(jì)算求出n。(5)當(dāng)分頻要求不高且分頻數(shù)N比較大時(shí),可以統(tǒng)一采用偶數(shù)分頻的方法來進(jìn)行整數(shù)分頻。這是因?yàn)閷?shí)現(xiàn)偶數(shù)分頻比實(shí)現(xiàn)奇數(shù)分頻簡單,同時(shí)又比2n分頻精確。在實(shí)際電路設(shè)計(jì)中,可能需要多種頻率值,用本節(jié)介紹的方法可以解決此問題,且在同一設(shè)計(jì)中也有可能需要綜合應(yīng)用以上多種分頻方法。任務(wù)6.4?流水燈控制器設(shè)計(jì)一、設(shè)計(jì)要求基本要求:4個(gè)LED燈連成一排。要求按照1、2、3、4的順序依次點(diǎn)亮所有燈,間隔時(shí)間為1s;再按1、2、3、4的順序依次熄滅所有燈,間隔時(shí)間為1s。拓展要求:在實(shí)現(xiàn)基本要求的基礎(chǔ)上,考慮任意一種流水燈模式并予以實(shí)現(xiàn)。例如,從左至右逐一點(diǎn)亮LED,直至所有LED全亮,再從右向左逐一熄滅LED,直到所有LED全滅,一直這樣循環(huán)下去。本任務(wù)涉及的知識(shí)點(diǎn)有狀態(tài)機(jī)建模和行為建模。下面對(duì)這些知識(shí)點(diǎn)進(jìn)行說明。(1)狀態(tài)機(jī)建模。狀態(tài)機(jī)建模時(shí)需要弄清楚狀態(tài)機(jī)編碼以及狀態(tài)轉(zhuǎn)換條件。(2)行為建模。行為建模時(shí)需要理解題意,并轉(zhuǎn)換成HDL語言實(shí)現(xiàn)。二、設(shè)計(jì)分析假設(shè)時(shí)鐘頻率為1Hz,則可以直接用該時(shí)鐘來控制LED燈的切換顯示。實(shí)際工作頻率為100MHz,如果實(shí)現(xiàn)1s切換一次LED的顯示,則需要分頻得到1Hz的頻率。根據(jù)分頻器的學(xué)習(xí),若要使計(jì)數(shù)值為CNT_MAX時(shí),對(duì)某信號(hào)翻轉(zhuǎn)即可得到1Hz的信號(hào),結(jié)合100MHz的工作頻率,則應(yīng)使CNT_MAX為49_999_999。要使4個(gè)LED循環(huán)點(diǎn)亮,可以根據(jù)LED亮/滅的特征,使用移位操作得到相應(yīng)的信號(hào),然后使用該信號(hào)控制LED即可。此時(shí),需要考慮從左向右時(shí)依次點(diǎn)亮和從左向右依次熄滅兩種情況,可添加變量flag來分別處理這兩種情況,思路清晰,編程方便。要使4個(gè)LED循環(huán)點(diǎn)亮,也可以使用狀態(tài)機(jī)建模。首先依次點(diǎn)亮到完全熄滅,共經(jīng)歷了8個(gè)狀態(tài),再結(jié)合之前的輸出型編碼,可以實(shí)現(xiàn)完成狀態(tài)機(jī)代碼。狀態(tài)圖如圖6-13所示。圖6-13的狀態(tài)圖中,狀態(tài)轉(zhuǎn)換不需要條件,次態(tài)只跟當(dāng)前狀態(tài)相關(guān)。三、設(shè)計(jì)與仿真依據(jù)上述設(shè)計(jì)分析可知,流水燈控制器可以通過兩種方法實(shí)現(xiàn),下面分別進(jìn)行說明。第一種方法:采用移位操作來實(shí)現(xiàn)?!纠?-15】
設(shè)計(jì)源碼—移位寄存器建模。下面對(duì)上述電路設(shè)計(jì)代碼進(jìn)行說明。(1)假定該設(shè)計(jì)工作頻率為1?Hz,不需要分頻,而實(shí)際工作頻率通常較高,就需要分頻。假定實(shí)際工作頻率為100?MHz,如果實(shí)現(xiàn)1s切換一次LED的顯示,則需要分頻得到1?Hz的頻率。根據(jù)分頻器的學(xué)習(xí),若要使計(jì)數(shù)值為CNT_MAX時(shí),對(duì)某信號(hào)翻轉(zhuǎn)即可得到?Hz的信號(hào),結(jié)合100?MHz的工作頻率,則應(yīng)使CNT_MAX為49_999_999。(2)計(jì)數(shù)變量cnt、兩種情況處理變量flag和輸出變量led都單獨(dú)進(jìn)行處理,一個(gè)變量僅使用一個(gè)always語句塊實(shí)現(xiàn),即可使代碼清晰、易懂、易維護(hù)。(3)計(jì)數(shù)變量cnt加1的條件是:每一個(gè)1?Hz信號(hào)的上升沿。(4)兩種情況處理變量flag改變狀態(tài)的條件是:計(jì)數(shù)值達(dá)到3。(5)輸出變量led要根據(jù)設(shè)計(jì)要求,結(jié)合計(jì)數(shù)變量和兩種情況處理變量進(jìn)行適當(dāng)?shù)馁x值。
第二種方法:采用狀態(tài)機(jī)建模方法實(shí)現(xiàn)?!纠?-16】
設(shè)計(jì)源碼—狀態(tài)機(jī)建模。下面對(duì)上述電路設(shè)計(jì)代碼進(jìn)行說明。(1)假定該設(shè)計(jì)工作頻率為1?Hz,不需要分頻,而實(shí)際工作頻率通常較高,就需要分頻。(2)狀態(tài)編碼使用直接輸出型,就可以省去輸出變量的處理。讀者也可以對(duì)代碼進(jìn)行改寫,使用直接狀態(tài)編碼,同時(shí)添加輸出變量賦值。(3)使用直接輸出型編碼時(shí),會(huì)出現(xiàn)狀態(tài)編碼一致的情況。例如,有6個(gè)狀態(tài)控制4個(gè)LED燈,燈的狀態(tài)依次為0001、0010、0100、1000、0100、0010,其中的第2個(gè)狀態(tài)和第6個(gè)狀態(tài)就完全一致了,此時(shí)可將狀態(tài)編碼擴(kuò)展為5位,即0_0001、0_0010、0_0100、0_1000、1_0100、1_0010,其中的最后5位只是用于將原來相同的狀態(tài)區(qū)分開,沒有實(shí)際意義,燈的狀態(tài)由狀態(tài)編碼的低四位實(shí)現(xiàn)。
【例6-17】
測(cè)試源碼。下面對(duì)上述電路仿真代碼進(jìn)行說明:(1)本代碼將兩種實(shí)現(xiàn)方式在同一測(cè)試臺(tái)進(jìn)行輸出結(jié)果對(duì)比。由于兩種實(shí)現(xiàn)方式輸入完全相同,因此放在一起測(cè)試不添加任何工作量,只需多增加一個(gè)例化語句即可。同時(shí),輸出結(jié)果可以放在一起進(jìn)行比較。(2)在狀態(tài)機(jī)中使用直接輸出型編碼,意味著可以直接將輸出型編碼賦值給輸出,即可實(shí)現(xiàn)輸出的控制。(3)仿真波形如圖6-14所示。由圖6-14可知,兩種實(shí)現(xiàn)方式都實(shí)現(xiàn)了預(yù)定流水燈效果,而且效果完全一致。在實(shí)際應(yīng)用中,還需要考慮實(shí)際應(yīng)用環(huán)境的工作頻率,可通過對(duì)給定的工作頻率進(jìn)行分頻得到流水燈的切換頻率,進(jìn)而控制流水燈正常工作。任務(wù)6.5?交通燈控制器設(shè)計(jì)一、設(shè)計(jì)要求基本要求:路口某一個(gè)方向的交通燈有3種狀態(tài),其控制時(shí)序?yàn)?0s紅燈、3s黃燈、30s紅燈。假定當(dāng)前時(shí)鐘頻率為1Hz,請(qǐng)實(shí)現(xiàn)這種交通燈控制器。拓展要求:實(shí)地調(diào)研十字路口四個(gè)方向的交通燈控制時(shí)序,使用HDL語言實(shí)現(xiàn)并進(jìn)行仿真驗(yàn)證。本任務(wù)涉及的知識(shí)點(diǎn)有狀態(tài)機(jī)建模、狀態(tài)轉(zhuǎn)換條件、行為建模。下面對(duì)這些知識(shí)點(diǎn)進(jìn)行說明。(1)狀態(tài)機(jī)建模。狀態(tài)機(jī)建模時(shí)需要弄清楚狀態(tài)機(jī)編碼以及狀態(tài)轉(zhuǎn)換條件。(2)狀態(tài)轉(zhuǎn)換條件。狀態(tài)機(jī)轉(zhuǎn)換條件可能比較復(fù)雜,需要借助計(jì)數(shù)器來實(shí)現(xiàn)狀態(tài)轉(zhuǎn)換條件。本例的狀態(tài)轉(zhuǎn)換條件是計(jì)數(shù)值分別達(dá)到30和3的時(shí)候。(3)行為建模。行為建模時(shí)需要理解題意,并轉(zhuǎn)換成HDL語言實(shí)現(xiàn)。二、設(shè)計(jì)分析假設(shè)時(shí)鐘頻率為1Hz,則可以直接用該時(shí)鐘來控制交通燈的切換。由于紅燈、綠燈和黃燈均需要持續(xù)一定的時(shí)間,因此,每種燈持續(xù)時(shí)間需要一個(gè)計(jì)數(shù)器。紅燈狀態(tài)要持續(xù)計(jì)數(shù)30s才能進(jìn)入黃燈狀態(tài),黃燈狀態(tài)要持續(xù)計(jì)數(shù)3s才能進(jìn)入綠燈狀態(tài),綠燈狀態(tài)要持續(xù)計(jì)數(shù)30s才能進(jìn)入紅燈狀態(tài)。根據(jù)狀態(tài)切換的規(guī)律,可以設(shè)置一個(gè)包含紅燈、黃燈和綠燈的總計(jì)數(shù)器,在到達(dá)相應(yīng)計(jì)數(shù)值時(shí)進(jìn)行狀態(tài)切換,這種方法稱為直接計(jì)數(shù)建模法。直接計(jì)數(shù)法需要最大計(jì)數(shù)值為63s,從0開始計(jì)數(shù),當(dāng)計(jì)數(shù)到29時(shí)進(jìn)行狀態(tài)切換、計(jì)數(shù)到32時(shí)進(jìn)行第二次狀態(tài)切換、計(jì)數(shù)到62時(shí)回到最初的狀態(tài),計(jì)數(shù)依次循環(huán),狀態(tài)也實(shí)現(xiàn)了相應(yīng)的切換。當(dāng)然,也可以直接確定三種狀態(tài),然后在狀態(tài)內(nèi)進(jìn)行計(jì)數(shù),當(dāng)?shù)搅嗽摖顟B(tài)的計(jì)時(shí)時(shí)間就切換到下一個(gè)狀態(tài),這種方法稱為狀態(tài)機(jī)建模法。狀態(tài)圖如圖6-15所示。圖6-15中狀態(tài)圖對(duì)應(yīng)的狀態(tài)轉(zhuǎn)換以及條件如表6-3所示。依據(jù)上述狀態(tài)圖及狀態(tài)轉(zhuǎn)移條件,可以很容易地使用HDL語言來實(shí)現(xiàn)。三、設(shè)計(jì)與仿真依據(jù)上述設(shè)計(jì)分析可知,計(jì)數(shù)器可以通過兩種方法來實(shí)現(xiàn),下面分別進(jìn)行說明。第一種方法:直接計(jì)數(shù)建模法實(shí)現(xiàn)交通燈控制器。【例6-18】
交通燈控制器——直接計(jì)數(shù)器建模。第二種方法:使用狀態(tài)機(jī)建模實(shí)現(xiàn)交通燈控制器。【例6-19】
交通燈控制器——狀態(tài)機(jī)建模。針對(duì)以上兩種設(shè)計(jì)方法,在同一個(gè)測(cè)試臺(tái)上進(jìn)行測(cè)試。【例6-20】
交通燈控制器設(shè)計(jì)的測(cè)試代碼。
由測(cè)試代碼得出的測(cè)試波形如圖6-16所示。從圖6-16中的仿真波形可以看出,兩種交通燈實(shí)現(xiàn)的效果相同。具體紅黃綠燈的持續(xù)時(shí)間可以觀察cnt變量,可在仿真界面中通過縮放波形圖察看變量值的變化。任務(wù)6.6?序列檢測(cè)器設(shè)計(jì)二進(jìn)制序列檢測(cè)器是一種用來檢測(cè)一串輸入的二進(jìn)制編碼,當(dāng)該二進(jìn)制碼與事先設(shè)定的二進(jìn)制碼一致時(shí),檢測(cè)電路輸出高電平,否則輸出低電平。序列檢測(cè)器應(yīng)用的場合較多,可廣泛用于日常生產(chǎn)、生活及軍事。例如,安全防盜、密碼認(rèn)證等加密場合,以及在海量數(shù)據(jù)中對(duì)敏感信息的自動(dòng)偵聽等。一、設(shè)計(jì)要求在連續(xù)信號(hào)中,檢測(cè)是否包含“110”序列,當(dāng)包含該序列時(shí),就輸出一個(gè)脈沖信號(hào)。例如,“1110011001110001”序列串中出現(xiàn)了3次“110”,就應(yīng)該輸出3個(gè)脈沖信號(hào)。本任務(wù)涉及的知識(shí)點(diǎn)有狀態(tài)機(jī)建模、Moore狀態(tài)機(jī)、Mealy狀態(tài)機(jī)、行為建模。下面對(duì)這些知識(shí)點(diǎn)進(jìn)行說明。(1)狀態(tài)機(jī)建模。狀態(tài)機(jī)建模時(shí)需要弄清楚狀態(tài)機(jī)編碼以及狀態(tài)轉(zhuǎn)換條件。(2)Moore狀態(tài)機(jī)、Mealy狀態(tài)機(jī)。這兩種狀態(tài)機(jī)的區(qū)別是輸出是否跟輸入相關(guān)。另外,這兩種狀態(tài)機(jī)之間是有聯(lián)系的,可以相互轉(zhuǎn)化。(3)移位寄存器建模。本例需要掌握移位寄存器的設(shè)計(jì)方法。移位寄存器大多使用在串入并出或并入串出的場合,是比較常用的電路。在數(shù)字電路中,移位寄存器是一種在若干相同時(shí)間脈沖下工作的以觸發(fā)器為基礎(chǔ)的器件,數(shù)據(jù)以并行或串行的方式輸入到該器件中,然后每個(gè)時(shí)間脈沖依次向左或右移動(dòng)一個(gè)比特,最后在輸出端進(jìn)行輸出。二、設(shè)計(jì)分析1.?Mealy狀態(tài)機(jī)和Moore狀態(tài)機(jī)狀態(tài)機(jī)一般包括組合邏輯和寄存器邏輯兩部分。組合電路用于狀態(tài)譯碼和產(chǎn)生輸出信號(hào),寄存器用于存儲(chǔ)狀態(tài)。一個(gè)典型的狀態(tài)機(jī)電路模型如圖6-17所示。狀態(tài)機(jī)的下一個(gè)狀態(tài)及輸出不僅與輸入信號(hào)有關(guān),還與寄存器的當(dāng)前狀態(tài)有關(guān)。根據(jù)輸出信號(hào)產(chǎn)生方法的不同,狀態(tài)機(jī)可分為米里(Mealy)型和摩爾(Moore)型。前者的輸出是當(dāng)前狀態(tài)和輸入信號(hào)的函數(shù),見圖6-18;后者的輸出僅是當(dāng)前狀態(tài)的函數(shù),見圖6-19。兩種狀態(tài)機(jī)在實(shí)現(xiàn)硬件電路時(shí),使用的狀態(tài)和輸出邏輯均有區(qū)別。在硬件設(shè)計(jì)時(shí),根據(jù)需要決定采用哪種狀態(tài)機(jī)。2.“110”序列檢測(cè)器設(shè)計(jì)分析兩種有限狀態(tài)機(jī)可以進(jìn)行轉(zhuǎn)換,可以使用一種有限狀態(tài)機(jī)實(shí)現(xiàn)的設(shè)計(jì),也可以轉(zhuǎn)換成使用另一種有限狀態(tài)機(jī)進(jìn)行設(shè)計(jì)。使用Mealy狀態(tài)機(jī)實(shí)現(xiàn)“110”序列檢測(cè)器需要使用3個(gè)狀態(tài),如圖6-20所示。使用Moore狀態(tài)機(jī)實(shí)現(xiàn)“110”序列檢測(cè)器需要使用4個(gè)狀態(tài),如圖6-21所示。有了狀態(tài)圖就可以使用狀態(tài)機(jī)建模來實(shí)現(xiàn)序列檢測(cè)器。序列檢測(cè)器除了使用狀態(tài)機(jī)建模,還可以使用移位寄存器來實(shí)現(xiàn)。顯然,實(shí)現(xiàn)“110”序列檢測(cè)需要使用3個(gè)D觸發(fā)器,將3個(gè)D觸發(fā)器的輸出與“110”匹配即可實(shí)現(xiàn)序列檢測(cè)。其電路原理圖如圖6-22所示。圖6-22的電路圖中,如果最后的組合邏輯實(shí)現(xiàn)的是相與功能,且相與的變量是D1和D2這兩個(gè)D觸發(fā)器的直接輸出以及第一個(gè)D觸發(fā)器輸出后的取反,則該電路可以實(shí)現(xiàn)“110”的序列檢測(cè)。三、設(shè)計(jì)與仿真依據(jù)上述設(shè)計(jì)分析可知,序列檢測(cè)器可以通過三種方法來實(shí)現(xiàn),下面分別進(jìn)行說明。第一種方法:采用移位寄存器實(shí)現(xiàn)的序列檢測(cè)器?!纠?-21】
序列檢測(cè)器設(shè)計(jì)—移位寄存器建模。下面對(duì)上述電路設(shè)計(jì)代碼進(jìn)行說明。(1)d_r是移位寄存器的輸出,且該變量是3位的,代替3個(gè)D觸發(fā)器,其中離輸入d最近的D觸發(fā)器的輸出是d_r[0]。(2)d_r[2]&d_r[1]&(~d_r[0])為真時(shí),意味著d_r=3'b110,也就是說,此時(shí)序列中已經(jīng)包含了“110”,result應(yīng)輸出高電平脈沖。第二種方法:根據(jù)前面分析的Moore有限狀態(tài)機(jī)的狀態(tài)轉(zhuǎn)移圖,可以得出采用Moore有限狀態(tài)機(jī)實(shí)現(xiàn)的序列檢測(cè)器?!纠?-22】
序列檢測(cè)器設(shè)計(jì)——Moore有限狀態(tài)機(jī)建模。下面對(duì)上述電路設(shè)計(jì)代碼進(jìn)行說明。(1)Moore有限狀態(tài)機(jī)的輸出僅跟當(dāng)前狀態(tài)有關(guān),如下列語句所示。assignresult=(next_st==s3)?1:0;(2)本例狀態(tài)編碼采用的是順序編碼,由于兩個(gè)二進(jìn)制位共有4種狀態(tài),所以沒有非法狀態(tài),在使用case語句實(shí)現(xiàn)時(shí),default語句不起作用。讀者也可以嘗試使用其他編碼類型完成本設(shè)計(jì)。第三種方法:根據(jù)前面分析的Mealy有限狀態(tài)機(jī)的狀態(tài)轉(zhuǎn)移圖,可以得出采用Mealy有限狀態(tài)機(jī)實(shí)現(xiàn)的序列檢測(cè)器?!纠?-23】
序列檢測(cè)器設(shè)計(jì)——Mealy有限狀態(tài)機(jī)建模。下面對(duì)上述電路設(shè)計(jì)代碼進(jìn)行說明。(1)?Mealy有限狀態(tài)機(jī)的輸出不僅跟當(dāng)前狀態(tài)有關(guān),而且還跟輸入有關(guān)(見代碼中實(shí)現(xiàn)result的always語句塊)。(2)本例狀態(tài)編碼采用的是順序編碼,由于兩個(gè)二進(jìn)制位共有4種狀態(tài),所以有非法狀態(tài)。在使用case語句實(shí)現(xiàn)時(shí),需要使用default語句,否則,會(huì)產(chǎn)生鎖存器。讀者也可以嘗試使用其他編碼類型完成本設(shè)計(jì)。將三種實(shí)現(xiàn)方式統(tǒng)一在一個(gè)testbench上進(jìn)行測(cè)試,并比較結(jié)果。【例6-24】“110”序列檢測(cè)器的測(cè)試代碼。下面對(duì)上述電路仿真代碼進(jìn)行說明。(1)本代碼將三種實(shí)現(xiàn)方式在同一測(cè)試臺(tái)進(jìn)行輸出結(jié)果對(duì)比。由于三種實(shí)現(xiàn)方式輸入激勵(lì)完全相同,因此放在一起測(cè)試不添加任何工作量,只需多增加兩個(gè)例化語句即可。同時(shí),輸出可以放在一起進(jìn)行比較。(2)輸入的序列通過每10個(gè)時(shí)間單位產(chǎn)生的隨機(jī)數(shù)生成,該隨機(jī)數(shù)序列由二進(jìn)制位0和1構(gòu)成。(3)序列檢測(cè)器的仿真波形如圖6-23所示。從仿真波形中可以看出,該設(shè)計(jì)的三種實(shí)現(xiàn)方法均完成了“110”序列檢測(cè)器的功能。任務(wù)6.7?漢字顯示設(shè)計(jì)一、設(shè)計(jì)要求基本要求:在ModelSim仿真窗口橫向顯示“深圳特區(qū)”4個(gè)字。拓展要求:在完成基本要求的基礎(chǔ)上,嘗試打印圖形,如國旗、國徽等;或者打印更多的漢字,如“深圳經(jīng)濟(jì)特區(qū)”“核心價(jià)值觀”等。本任務(wù)涉及的知識(shí)點(diǎn)有數(shù)組、字模、文件存取、可綜合設(shè)計(jì)源數(shù)據(jù)的使用。下面對(duì)這些知識(shí)點(diǎn)進(jìn)行說明。(1)數(shù)組。數(shù)組可用于批量存放數(shù)據(jù),同樣的數(shù)據(jù)可以采用任何維度數(shù)組進(jìn)行存放。建議根據(jù)存放數(shù)據(jù)的特征來規(guī)劃數(shù)組的維度。數(shù)組元素可以打印出來,可以更直觀地了解多維數(shù)組的行列標(biāo)號(hào)與數(shù)據(jù)的關(guān)系,對(duì)于理解代碼的含義更有幫助。(2)字模。不僅要清楚字模的含義,尤其要結(jié)合點(diǎn)陣圖形來理解,而且還需要掌握字模軟件的使用,特別是字模軟件上各種參數(shù)的含義和使用方法。(3)文件存取。由于字模數(shù)據(jù)量較大,因此建議將字模數(shù)據(jù)存放在文件中,使用文件讀取函數(shù)獲取數(shù)據(jù)。(4)可綜合設(shè)計(jì)源數(shù)據(jù)的使用。在進(jìn)行可綜合設(shè)計(jì)中,源數(shù)據(jù)可以通過參數(shù)或者存儲(chǔ)器來存取。具體操作可參見任務(wù)6.10“信號(hào)發(fā)生器的設(shè)計(jì)”中使用源數(shù)據(jù)的方法。二、設(shè)計(jì)分析漢字顯示需要用到字模工具,本任務(wù)使用的字模工具為PCtoLCD2002。使用該字模工具時(shí),按如圖6-23所示界面選擇各選項(xiàng),包括點(diǎn)陣格式、取模方式、取模走向、每行顯示數(shù)據(jù)、像素大小、自定義格式等。讀者按如圖6-24所示界面選擇各選項(xiàng),既可以復(fù)現(xiàn)本任務(wù)后續(xù)的內(nèi)容,也可以更方便地理解本任務(wù)后續(xù)的內(nèi)容。取漢字字模的方法如圖6-25所示??梢允褂靡痪S數(shù)組、二維數(shù)組、三維數(shù)組、四維數(shù)組來存儲(chǔ)漢字信息,并以圖形的方式顯示漢字。下面使用一個(gè)示例來說明數(shù)組元素與數(shù)組行列標(biāo)號(hào)之間的關(guān)系。在使用多維數(shù)組時(shí),需注意多維標(biāo)號(hào)與元素之間的對(duì)應(yīng)關(guān)系?!纠?-25】
數(shù)組元素示例。下面對(duì)上述電路設(shè)計(jì)代碼進(jìn)行說明。(1)本例為數(shù)組練習(xí)。(2)?regA為位寬為3的寄存器變量;arrayB為含有3個(gè)元素的數(shù)組,每個(gè)元素都是位寬為1的寄存器變量;arrayC為3行2列的數(shù)組,每個(gè)元素都是位寬為4的寄存器變量。(3)本例運(yùn)行結(jié)果如圖6-26所示,請(qǐng)讀者結(jié)合代碼來理解。在使用多維數(shù)組時(shí),可以使用上述方法來了解數(shù)組元素與數(shù)組行列標(biāo)號(hào)之間的關(guān)系,有助于更準(zhǔn)確地使用這些數(shù)據(jù)。三、設(shè)計(jì)與仿真下面介紹分別使用一維數(shù)組、二維數(shù)組、三維數(shù)組、四維數(shù)組來存儲(chǔ)并打印漢字信息的方法。【例6-26】
使用一維數(shù)組打印漢字“人”(8?×?8)。下面對(duì)上述電路設(shè)計(jì)代碼進(jìn)行說明:(1)本例打印漢字“人”。(2)首先使用字模軟件生成“人”的二進(jìn)制數(shù),“人”的8?×?8字模數(shù)據(jù)為0008080818282442,再將字模數(shù)據(jù)以如圖6-27所示的格式存放在zi_ren_8x8.txt文件中。關(guān)于該字模數(shù)據(jù)與“人”之間的對(duì)應(yīng)關(guān)系,建議讀者使用字模軟件來理解。(3)?ren是含有8個(gè)元素的一維數(shù)組,每個(gè)元素都是一個(gè)8位的寄存器變量。(4)本例在打印時(shí),為1的位打印?*,為0的位打印空格。本例運(yùn)行結(jié)果如圖6-28所示,請(qǐng)結(jié)合代碼來理解。【例6-27】
使用二維數(shù)組打印漢字“人”(8?×?16)。下面對(duì)上述電路設(shè)計(jì)代碼進(jìn)行說明。(1)本例打印漢字“人”。(2)首先使用字模軟件生成“人”的二進(jìn)制數(shù),再將人的8?×?16字模數(shù)據(jù)以如圖6-29所示的格式存放在zi_ren_8x16.txt文件中。(3)?ren是含有16個(gè)元素的二維數(shù)組,每個(gè)元素都是一個(gè)8位的寄存器變量。(4)本例在打印時(shí),為1的位打印*,為0的位打印空格。本例運(yùn)行結(jié)果如圖6-30所示,請(qǐng)讀者結(jié)合代碼來理解。(5)ren也可以使用一維數(shù)組來表示,并實(shí)現(xiàn)同樣的打印效果。感興趣的讀者可自行完成代碼設(shè)計(jì)。(6)使用多維數(shù)組時(shí),字模軟件要設(shè)置成“逐行式”和“順向”,這與字模和數(shù)組的數(shù)據(jù)之間的對(duì)應(yīng)關(guān)系相關(guān)。(7)打印的效果跟字模的效果要求是否一樣,是打印結(jié)果是否正確的判斷標(biāo)準(zhǔn)。(8)讀者可以打印出數(shù)組的各元素,以了解數(shù)組元素的存放方式。另外,也可以將圖6-31和zi_ren_8x16.txt文件作比較,以便于更容易地掌握數(shù)組的存放與字模的關(guān)系?!纠?-28】
使用三維數(shù)組打印漢字“深”(24?×?16)。下面對(duì)上述電路設(shè)計(jì)代碼進(jìn)行說明。(1)本例打印漢字“深”。(2)首先使用字模軟件生成“深”的二進(jìn)制數(shù),再將深的16?×?24字模數(shù)據(jù)以下面的格式存放在zi_shen_16x24.txt文件中,如圖6-32所示。(3)?shen是含有48個(gè)元素的三維數(shù)組,每個(gè)元素都是一個(gè)8位的寄存器變量。(4)本例在打印時(shí),為1的位打印*,為0的位打印空格。本例運(yùn)行結(jié)果如圖6-33所示,請(qǐng)讀者結(jié)合代碼來理解?!纠?-29】
使用四維數(shù)組打印四個(gè)漢字“深圳特區(qū)”(橫著打印)。下面對(duì)上述電路設(shè)計(jì)代碼進(jìn)行說明:(1)本例橫向打印4個(gè)漢字“深圳特區(qū)”。(2)首先使用字模軟件生成“深圳特區(qū)”的二進(jìn)制數(shù),再將深圳特區(qū)的16?×?16字模數(shù)據(jù)以圖6-34的格式存放在shenzhentequ_16x16.txt文件中。(3)?shenzhentequ是含有8?×?16個(gè)元素的四維數(shù)組,每個(gè)元素都是一個(gè)8位的寄存器變量,其定義如下:reg[7:0]shenzhentequ[4-1:0][2-1:0][8-1:0][2-1:0];(4)本例在打印時(shí),為1的位打印*,為0的位打印空格。本例運(yùn)行結(jié)果如圖6-35所示,請(qǐng)讀者結(jié)合代碼來理解。(5)讀者可以嘗試使用3維數(shù)組來實(shí)現(xiàn)打印“深圳特區(qū)”這四個(gè)字。(提示:3維數(shù)組的定義為reg[7:0]shenzhenxinxi[8-1:0][8-1:0][2-1:0];。代碼實(shí)現(xiàn)部分由讀者自行完成。)(6)讀者也可以嘗試針對(duì)多個(gè)漢字打印出豎向排列的效果(感興趣的讀者可自行完成)。另外,在硬件實(shí)現(xiàn)圖形或漢字顯示時(shí),通常要將for循環(huán)語句使用流水線或狀態(tài)機(jī)來實(shí)現(xiàn)提升系統(tǒng)工作頻率。任務(wù)6.8?梯
形
波
設(shè)
計(jì)一、設(shè)計(jì)要求基本要求:生成周期性梯形波。在一個(gè)周期內(nèi)的波形分成三段,第一段是從0上升至最大值的階段,第二段是維持最大值的水平階段,第三段是從最大值下降到0的階段,要求這三段持續(xù)時(shí)間相等。拓展要求:在完成基本要求后,再完成鋸齒波、三角波等。本任務(wù)仿真涉及的知識(shí)點(diǎn)有狀態(tài)機(jī)建模、狀態(tài)轉(zhuǎn)換條件、行為建模。下面對(duì)這些知識(shí)點(diǎn)進(jìn)行說明。(1)狀態(tài)機(jī)建模。狀態(tài)機(jī)建模時(shí)需要弄清楚狀態(tài)機(jī)編碼以及狀態(tài)轉(zhuǎn)換條件。(2)狀態(tài)轉(zhuǎn)換條件。狀態(tài)機(jī)轉(zhuǎn)換條件比較復(fù)雜,需要借助計(jì)數(shù)器來實(shí)現(xiàn)狀態(tài)轉(zhuǎn)換條件。由于要求各段持續(xù)時(shí)間一致,因此,本例的狀態(tài)轉(zhuǎn)換條件是計(jì)數(shù)值分別達(dá)到255時(shí)。(3)行為建模。行為建模時(shí)需要理解題意,并轉(zhuǎn)換成程序語言實(shí)現(xiàn)。二、設(shè)計(jì)分析假定數(shù)字量位寬為8bit,則波形最高點(diǎn)對(duì)應(yīng)數(shù)字量255,波形最低點(diǎn)對(duì)應(yīng)數(shù)字量0。波形包含上升、水平和下降三段,每段可使用計(jì)數(shù)器實(shí)現(xiàn),上升段采用加1計(jì)數(shù)器,水平采用加0計(jì)數(shù)器,下降段采用減1計(jì)數(shù)器。實(shí)現(xiàn)方法是首先向上計(jì)數(shù),即波形對(duì)應(yīng)的計(jì)數(shù)值則由0上升到255;然后轉(zhuǎn)為水平計(jì)數(shù),波形對(duì)應(yīng)的計(jì)數(shù)值維持在255不變;最后再向下計(jì)數(shù),波形對(duì)應(yīng)的計(jì)數(shù)值由255下降到0,依此循環(huán)。上面的實(shí)現(xiàn)方法中包括三段,因此,需要一個(gè)變量來標(biāo)示當(dāng)前正在實(shí)現(xiàn)的是三段中的哪一段。由于一個(gè)周期內(nèi)上升段、水平段和下降段的持續(xù)時(shí)間相同,因此,需要一個(gè)計(jì)數(shù)變量來計(jì)量各段的持續(xù)時(shí)間。除了上述實(shí)現(xiàn)方法外,也可以考慮采用狀態(tài)機(jī)來實(shí)現(xiàn)。該狀態(tài)機(jī)可以包含3個(gè)狀態(tài),分別對(duì)應(yīng)著上述三段。狀態(tài)機(jī)一般包括組合邏輯和寄存器邏輯兩部分。組合電路用于狀態(tài)譯碼和產(chǎn)生輸出信號(hào),寄存器用于存儲(chǔ)狀態(tài)。狀態(tài)圖如圖6-36所示。圖6-36狀態(tài)圖對(duì)應(yīng)的狀態(tài)轉(zhuǎn)換以及條件如表6-4所示。三、設(shè)計(jì)與仿真依據(jù)上述設(shè)計(jì)分析可知,梯形波可以通過兩種方法來實(shí)現(xiàn),下面分別進(jìn)行說明。第一種方法:直接采用計(jì)數(shù)器建模來實(shí)現(xiàn)梯形波?!纠?-30】
設(shè)計(jì)源碼——三段式計(jì)數(shù)器建模。下面對(duì)上述電路設(shè)計(jì)代碼進(jìn)行說明。(1)上面的實(shí)現(xiàn)方法中包括三段,使用變量flag來標(biāo)示當(dāng)前正在實(shí)現(xiàn)的是三段中的哪一段,其值為0表示上升段、其值為1表示水平段、其值為2表示下降段。(2)由于一個(gè)周期內(nèi)上升段、水平段和下降段的持續(xù)時(shí)間相同,使用計(jì)數(shù)變量t_cnt來標(biāo)示,各段的持續(xù)時(shí)間都是255個(gè)時(shí)鐘周期。即三段之間的轉(zhuǎn)換條件是t_cnt=255。(3)在波形信號(hào)三段的交替處,為了防止數(shù)據(jù)發(fā)生變化,對(duì)數(shù)據(jù)作了簡單處理,當(dāng)前一段數(shù)據(jù)計(jì)到最大值后保持為最大值,當(dāng)前一段數(shù)據(jù)計(jì)到最小值后則保持為最小值。第二種方法:直接采用狀態(tài)機(jī)建模來實(shí)現(xiàn)梯形波?!纠?-31】
設(shè)計(jì)源碼——狀態(tài)機(jī)建模。下面對(duì)上述電路設(shè)計(jì)代碼進(jìn)行說明。(1)上面的實(shí)現(xiàn)方法中包括三段,每一段對(duì)應(yīng)一個(gè)狀態(tài),因此,使用3個(gè)狀態(tài)來實(shí)現(xiàn)三個(gè)段,其中S0表示上升段、S1表示水平段、S2表示下降段。(2)由于一個(gè)周期內(nèi)上升段、水平段和下降段的持續(xù)時(shí)間相同,使用計(jì)數(shù)變量t_cnt來標(biāo)示,各段的持續(xù)時(shí)間都是255個(gè)時(shí)鐘周期。所以,狀態(tài)的轉(zhuǎn)換條件是t_cnt=255。(3)在波形信號(hào)三段的交替處,為了防止數(shù)據(jù)發(fā)生變化,對(duì)數(shù)據(jù)作了簡單處理,當(dāng)前一段數(shù)據(jù)計(jì)到最大值后保持為最大值,當(dāng)前一段數(shù)據(jù)計(jì)到最小值后則保持為最小值。(4)狀態(tài)機(jī)實(shí)現(xiàn)方式與前一種實(shí)現(xiàn)方式的思路和原理相同,只是實(shí)現(xiàn)方式不同。實(shí)際設(shè)計(jì)中,每種電路都有多種實(shí)現(xiàn)方式,比較靈活,這也是HDL語言的強(qiáng)大之處?!纠?-32】
測(cè)試臺(tái)源碼。下面對(duì)上述電路仿真代碼進(jìn)行說明。(1)本代碼將兩種實(shí)現(xiàn)方式在同一測(cè)試臺(tái)進(jìn)行輸出結(jié)果對(duì)比。由于兩種實(shí)現(xiàn)方式輸入激勵(lì)完全相同,因此放在一起測(cè)試不添加任何工作量,只需多增加一個(gè)例化語句即可。同時(shí),輸出可以放在一起進(jìn)行比較。(2)仿真時(shí),可以通過觀察其他中間變量進(jìn)行代碼調(diào)試,如觀察U1模塊中的t_cnt、flag變量,U2模塊中的t_cnt、state變量等。注意,在調(diào)試代碼時(shí),觀察這些中間變量比較重要。(3)梯形波的仿真波形如圖6-37所示,將中間調(diào)試變量也加到了波形中。從仿真波形可以看出,該設(shè)計(jì)的兩種實(shí)現(xiàn)方法均實(shí)現(xiàn)了梯形波的功能。需要說明的是,d_out1和d_out2初始時(shí)都是二進(jìn)制數(shù),通過右鍵單擊相應(yīng)信號(hào),將信號(hào)的Radix屬性設(shè)置為“Unsigned”,F(xiàn)ormat屬性設(shè)置為“Analog”,即可看到梯形波。也可以嘗試完成本任務(wù)的拓展練習(xí),如包含上升和下降兩段波形的三角波以及包含上升、水平、下降和水平四段的波形。圖6-38所示為三角波示例。任務(wù)6.9?數(shù)
字
鐘
設(shè)
計(jì)一、設(shè)計(jì)要求編寫一個(gè)具有秒、分、小時(shí)計(jì)時(shí)功能的數(shù)字鐘,可以實(shí)現(xiàn)一個(gè)小時(shí)以內(nèi)誤差不超過1s的精確計(jì)時(shí)。要求具有復(fù)位功能,復(fù)位后,從00:00:00開始計(jì)數(shù)。設(shè)計(jì)要求如圖6-39所示。本任務(wù)涉及的知識(shí)點(diǎn)有數(shù)字鐘、計(jì)數(shù)器、全局時(shí)鐘、數(shù)據(jù)進(jìn)制的選擇。下面對(duì)這些知識(shí)點(diǎn)進(jìn)行說明。(1)數(shù)字鐘。數(shù)字鐘由多個(gè)計(jì)數(shù)器構(gòu)成,包括小時(shí)、分鐘、秒等,都是由計(jì)數(shù)器來實(shí)現(xiàn)的。(2)計(jì)數(shù)器。不同的計(jì)數(shù)器,其加減條件和停止條件都是獨(dú)特的。讀者可以通過學(xué)習(xí)小時(shí)計(jì)數(shù)器、分鐘計(jì)數(shù)器和秒計(jì)數(shù)器的加1條件和停止條件來進(jìn)一步加深理解。(3)全局時(shí)鐘。不同計(jì)數(shù)器變化的條件都是同一個(gè)時(shí)鐘的上升沿,該時(shí)鐘稱為全局時(shí)鐘。全局時(shí)鐘可以保證設(shè)計(jì)的準(zhǔn)確性和穩(wěn)定性。在同一個(gè)系統(tǒng)中,應(yīng)避免使用從系統(tǒng)時(shí)鐘分頻得到的信號(hào)作為時(shí)鐘,所有的設(shè)計(jì)通常都使用同一個(gè)系統(tǒng)時(shí)鐘。(4)數(shù)據(jù)進(jìn)制的選擇。小時(shí)、分鐘、秒這3個(gè)變量都選擇使用十進(jìn)制或者十六進(jìn)制表示,對(duì)電路有著不同的影響。由于除法電路和求余電路會(huì)用到大量資源,因此,實(shí)現(xiàn)數(shù)字鐘時(shí)推薦使用十六進(jìn)制來表示小時(shí)、分鐘和秒,這3個(gè)變量的個(gè)位和十位分別使用4個(gè)比特位單獨(dú)表示,即避免除法電路和求余電路。這3個(gè)變量的個(gè)位和十位都使用計(jì)數(shù)器來實(shí)現(xiàn),但每個(gè)計(jì)數(shù)器的計(jì)數(shù)條件和終止條件不同。例如,小時(shí)個(gè)位計(jì)數(shù)條件為分鐘個(gè)位、分鐘十位、秒個(gè)位、秒十位都達(dá)到了最大值了;小時(shí)個(gè)位的終止條件與小時(shí)十位相關(guān),如果小時(shí)十位為0或1,則該終止條件為9,如果小時(shí)十位為2,則該終止條件為3。二、設(shè)計(jì)分析本例主要實(shí)現(xiàn)了計(jì)數(shù)及進(jìn)位的設(shè)計(jì)。假設(shè)實(shí)際工作頻率為100MHz。如果實(shí)現(xiàn)1s進(jìn)行一次加1計(jì)數(shù),則需要分頻得到1Hz的頻率。根據(jù)分頻器的學(xué)習(xí),若要使計(jì)數(shù)值為CNT_MAX時(shí)對(duì)某信號(hào)翻轉(zhuǎn)即可得到1Hz的信號(hào),結(jié)合100MHz的工作頻率,則應(yīng)使CNT_MAX為49_999_999。秒加1計(jì)數(shù)的條件為計(jì)數(shù)值為CNT_MAX;終止計(jì)數(shù)的條件為完成1min計(jì)時(shí),即最大值為59。分鐘加1計(jì)數(shù)的條件為計(jì)數(shù)值為CNT_MAX且秒計(jì)數(shù)值為59;終止計(jì)數(shù)的條件為完成1小時(shí)計(jì)時(shí),即最大值為59。小時(shí)加1計(jì)數(shù)的條件為計(jì)數(shù)值為CNT_MAX,秒計(jì)數(shù)值為59,分鐘計(jì)數(shù)值為59;終止計(jì)數(shù)的條件為完成1天計(jì)時(shí),即最大值為23。這樣可以完成的計(jì)時(shí)范圍為00:00:00~23:59:59。三、設(shè)計(jì)與仿真依據(jù)上述設(shè)計(jì)分析,可以直接實(shí)現(xiàn)數(shù)字鐘?!纠?-33】
數(shù)字鐘設(shè)計(jì)代碼(僅時(shí)分秒計(jì)時(shí))。下面對(duì)上述電路設(shè)計(jì)代碼進(jìn)行說明。(1)hour_H、min_H、sec_H使用十六進(jìn)制來表示小時(shí)、分鐘和秒,主要是為了后期應(yīng)用的方便,如在數(shù)碼管中顯示這些信號(hào)。(2)hour、min、sec使用十進(jìn)制來表示小時(shí)、分鐘和秒,主要是為了方便加減操作。(3)十六進(jìn)制和十進(jìn)制數(shù)據(jù)的轉(zhuǎn)換方法,使用以下代碼來完成。assignhour_H[3:0]=hour%10;//十進(jìn)制轉(zhuǎn)換成十六進(jìn)制assignhour_H[7:4]=hour/10;assignmin_H[3:0]=min%10;assignmin_H[7:4]=min/10;assignsec_H[3:0]=sec%10;assignsec_H[7:4]=sec/10;(4)由于除法電路和求余電路會(huì)用到大量資源,實(shí)現(xiàn)數(shù)字鐘時(shí)可以使用十六進(jìn)制來表示小時(shí)、分鐘和秒,這3個(gè)變量的個(gè)位和十位分別使用4個(gè)比特單獨(dú)表示,即可避免除法電路和求余電路。請(qǐng)讀者按照這個(gè)思路將hour、min、sec改寫為十六進(jìn)制。(5)小時(shí)、分鐘和秒變量都單獨(dú)進(jìn)行處理,一個(gè)變量僅使用一個(gè)always語句塊實(shí)現(xiàn),可使代碼清晰、易懂、易維護(hù)。(6)小時(shí)、分鐘和秒計(jì)數(shù)均使用同一個(gè)系統(tǒng)時(shí)鐘clk,而不是使用分頻得到的中間變量作為時(shí)鐘。(7)小時(shí)、分鐘和秒計(jì)數(shù)變量的加1條件是不同的,請(qǐng)讀者結(jié)合上述代碼自行分析。下面對(duì)數(shù)字鐘進(jìn)行仿真測(cè)試。【例6-34】
數(shù)字鐘仿真代碼。下面對(duì)上述電路仿真代碼進(jìn)行說明。(1)?hour_H、min_H、sec_H使用十六進(jìn)制來表示小時(shí)、分鐘和秒,用仿真圖展現(xiàn)這些信號(hào)時(shí)需要設(shè)置成十六進(jìn)制。(2)?hour、min、sec使用十進(jìn)制來表示小時(shí)、分鐘和秒,用仿真圖展現(xiàn)這些信號(hào)時(shí)需要設(shè)置成十進(jìn)制。由于這些信號(hào)不是端口信號(hào),因此,需要把這些信號(hào)單獨(dú)添加到仿真波形中。(3)為了方便仿真,設(shè)定CLK_100Hz的時(shí)鐘周期為10ns
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年山東城市建設(shè)職業(yè)學(xué)院高職單招高職單招英語2016-2024歷年頻考點(diǎn)試題含答案解析
- 2025年寧波職業(yè)技術(shù)學(xué)院高職單招高職單招英語2016-2024歷年頻考點(diǎn)試題含答案解析
- 2025年天津國土資源和房屋職業(yè)學(xué)院高職單招(數(shù)學(xué))歷年真題考點(diǎn)含答案解析
- 消化內(nèi)科護(hù)理帶教老師總結(jié)
- Camtasia知識(shí)課件視頻教
- 大學(xué)生思想教育
- 體育與健康課程標(biāo)準(zhǔn)
- 人教版數(shù)學(xué)小學(xué)六年級(jí)下冊(cè)《第一課成正比例的量》習(xí)題
- 民辦四川天一學(xué)院《設(shè)備安裝課程實(shí)訓(xùn)》2023-2024學(xué)年第二學(xué)期期末試卷
- 哈爾濱北方航空職業(yè)技術(shù)學(xué)院《Hydraulics》2023-2024學(xué)年第二學(xué)期期末試卷
- GB/T 13888-2009在開磁路中測(cè)量磁性材料矯頑力的方法
- 海南省2023普通高中基礎(chǔ)會(huì)考試卷通用技術(shù)科試題及答案
- 《劉姥姥人物形象分析》課件-部編版語文九年級(jí)上冊(cè)
- 年產(chǎn)萬噸丁二烯畢業(yè)設(shè)計(jì)
- TPM管理基礎(chǔ)知識(shí)培訓(xùn)課件
- 《林海雪原》知識(shí)點(diǎn) 整理
- 常數(shù)e的故事-課件完整版
- 抑制素B臨床應(yīng)用課件
- 收款賬戶確認(rèn)書
- 防火巡查記錄
- 建設(shè)新時(shí)代文明實(shí)踐中心指導(dǎo)手冊(cè)電子版
評(píng)論
0/150
提交評(píng)論