版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第6章數(shù)字系統(tǒng)設(shè)計(jì)練習(xí)6.1開(kāi)關(guān)、LED燈及多路復(fù)用器6.2二進(jìn)制與BCD碼的轉(zhuǎn)換及顯示6.3無(wú)符號(hào)數(shù)乘法器6.4鎖存器和觸發(fā)器6.5計(jì)數(shù)器6.6時(shí)鐘與定時(shí)器6.7有限狀態(tài)機(jī)6.8存儲(chǔ)器塊6.9簡(jiǎn)單的處理器6.10增強(qiáng)型處理器6.1開(kāi)關(guān)、LED燈及多路復(fù)用器6.1.1將輸入/輸出器件連接到FPGA上
DE2平臺(tái)上提供了18個(gè)波段開(kāi)關(guān),可以作為電路的輸入,表示為SW17~SW0;還有18個(gè)紅色LED,表示為L(zhǎng)EDR17~LEDR0,可以作為輸出顯示之用。使用紅色LED顯示波段開(kāi)關(guān)狀態(tài)的電路可以用Verilog語(yǔ)言簡(jiǎn)單地實(shí)現(xiàn),代碼如下:
assignLEDR[17]=SW[17]; assignLEDR[16]=SW[16]; assignLEDR[0]=SW[0];由于分別有18個(gè)紅色LED和18個(gè)波段開(kāi)關(guān),因此在Verilog語(yǔ)言中可以很方便地用向量表示它們,進(jìn)而可用一個(gè)賦值語(yǔ)句完成同樣的功能。DE2平臺(tái)上,LEDR17~LEDR0和SW17~SW0是與FPGA管腳直接相連的,使用這些管腳之前應(yīng)參照本書(shū)附錄B或DE2用戶手冊(cè)中DE2平臺(tái)的引腳分配表,分配連接波段開(kāi)關(guān)和LEDR的FPGA管腳,例如SW0連接在FPGA的N25腳,LEDR0連接在FPGA的AE23腳。最簡(jiǎn)單的做法是在Quartus中導(dǎo)入DE2_pin_assignments.csv,導(dǎo)入方法參見(jiàn)本書(shū)2.10.3小節(jié)。為保證從DE2_pin_assignments.csv導(dǎo)入的引腳分配表能夠正確使用,在Verilog模塊中使用到的引腳名稱必須與該文件中的完全一致,DE2_pin_assignments.csv中用SW[0]~SW[17]和LEDR[0]~LEDR[17]分別表示18個(gè)波段開(kāi)關(guān)和18個(gè)紅色LED燈,因此在編寫(xiě)的Verilog代碼中也必須用這種方式來(lái)表示。用向量實(shí)現(xiàn)波段開(kāi)關(guān)與紅色LED相連的模塊代碼如代碼6.1所示。代碼6.1將波段開(kāi)關(guān)與紅色LED相連的Verilog代碼。modulepart1(SW,LEDR);input[17:0]SW; //波段開(kāi)關(guān)output[17:0]LEDR; //紅色LEDassignLEDR=SW;endmodule請(qǐng)按照以下步驟在DE2上實(shí)現(xiàn)代碼6.1并進(jìn)行測(cè)試:
(1)新建一個(gè)QuartusⅡ工程,用以在DE2平臺(tái)上實(shí)現(xiàn)所要求的電路,將FPGA器件設(shè)置為EP2C35F672C6。
(2)建立一個(gè)Verilog文件,其內(nèi)容如代碼6.1所示,將該Verilog文件添加到工程中并編譯整個(gè)工程。
(3)導(dǎo)入DE2_pin_assignments.csv中的引腳分配或參照附錄B中DE2平臺(tái)的引腳分配表,分配連接波段開(kāi)關(guān)和紅色LED的FPGA管腳。
(4)編譯該工程,完成后下載到FPGA中。
(5)通過(guò)撥動(dòng)波段開(kāi)關(guān)并觀察紅色LED的變化來(lái)驗(yàn)證所設(shè)計(jì)的功能是否正確。6.1.22選1多路復(fù)用器圖6.1(a)是一個(gè)2選1多路復(fù)用器電路,如果s=1,則輸出m=y;如果s=0,則輸出m=x。圖6.1(b)是這個(gè)電路的真值表。圖6.1(c)是該電路的符號(hào)表示。圖6.1最簡(jiǎn)單的多路復(fù)用器這個(gè)多路復(fù)用器可以用以下的Verilog語(yǔ)句來(lái)實(shí)現(xiàn):
assignm=(~s&x)|(s&y);這部分練習(xí)的任務(wù)是實(shí)現(xiàn)如圖6.2(a)所示的8位2選1多路復(fù)用電路,需要用8個(gè)賦值語(yǔ)句。該多路復(fù)用器的輸入為X和Y,都是8位寬,輸出M也為8位寬。如果s=0,M=X;如果s=1,則M=Y。圖6.2(b)是該電路的符號(hào)表示。
2選1多路復(fù)用器電路的具體實(shí)現(xiàn)步驟如下:
(1)新建一個(gè)QuartusⅡ工程,用以在DE2平臺(tái)上實(shí)現(xiàn)所要求的電路。
(2)建立一個(gè)Verilog文件,用SW17作為輸入s,以SW7~SW0作為輸入X,以SW15~SW8作為輸入Y,將波段開(kāi)關(guān)與紅色LED連接以顯示其狀態(tài),用綠色LED即LEDG7~LEDG0作為輸出M,將該Verilog文件添加到工程中。
(3)導(dǎo)入DE2_pin_assignments.csv中的引腳分配或參照附錄B中DE2平臺(tái)的引腳分配表,分配連接波段開(kāi)關(guān)、紅色LED以及綠色LED的FPGA管腳。
(4)編譯工程,完成后下載到FPGA中。
(5)撥動(dòng)波段開(kāi)關(guān)并觀察紅色LED與綠色LED的變化,以驗(yàn)證8位2選1多路復(fù)用器的功能是否正確。圖6.28位2選1多路復(fù)用器6.1.33位寬5選1多路復(fù)用器與圖6.2(a)所示的2選1多路復(fù)用器不同,圖6.3(a)所示電路的任務(wù)是實(shí)現(xiàn)一個(gè)5選1的多路復(fù)用器,即從5個(gè)輸入x、y、w、u和v中選取一個(gè)輸出到m。這個(gè)電路采用了4個(gè)2選1多路復(fù)用器來(lái)實(shí)現(xiàn),輸出選擇用一個(gè)3位的輸入s2s1s0實(shí)現(xiàn),該電路的符號(hào)表示如圖6.3(b)所示,表6.1為該5選1多路復(fù)用器的真值表。圖6.35選1多路復(fù)用器圖6.4實(shí)現(xiàn)了一個(gè)3位5選1多路復(fù)用器,這個(gè)電路中包含了3個(gè)圖6.3(a)所示的電路。請(qǐng)按照以下步驟實(shí)現(xiàn)3位5選1多路復(fù)用器:
(1)新建一個(gè)QuartusⅡ工程,用以在DE2平臺(tái)上實(shí)現(xiàn)所要求的電路。
(2)建立一個(gè)Verilog文件,用SW17~SW15作為選擇端輸入s2s1s0,用剩下的15個(gè)波段開(kāi)關(guān)SW14~SW0作為輸入U(xiǎn)、V、W、X、Y,將波段開(kāi)關(guān)與紅色LED連接以顯示波段開(kāi)關(guān)的狀態(tài),用綠色LED即LEDG2~LEDG0作為輸出M,將該Verilog文件添加到工程中。圖6.43位5選1多路復(fù)用器
(3)導(dǎo)入DE2_pin_assignments.csv中的引腳分配或參照附錄B中DE2平臺(tái)的引腳分配表,分配連接波段開(kāi)關(guān)、紅色LED以及綠色LED的FPGA管腳。
(4)編譯工程,完成后下載到FPGA中。
(5)撥動(dòng)波段開(kāi)關(guān)并觀察紅色LED和綠色LED的變化,以驗(yàn)證3位5選1多路復(fù)用器的功能是否正確,確定從U到Y(jié)的所有輸入都能夠被選擇輸出到M。6.1.4用七段數(shù)碼管顯示簡(jiǎn)單字符圖6.5所示是一個(gè)簡(jiǎn)單的七段解碼器模塊,c2c1c0是解碼器的3個(gè)輸入,用c2c1c0的不同取值來(lái)選擇在七段數(shù)碼管上輸出不同的字符。七段數(shù)碼管上的不同段位用數(shù)字0~6表示。注意七段數(shù)碼管是共陽(yáng)極的。表6.2列出了c2c1c0取不同值時(shí)數(shù)碼管上輸出的字符。本例中只輸出4個(gè)字符,當(dāng)c2c1c0取值為100~111時(shí),輸出空格。圖6.5七段解碼器請(qǐng)按照以下步驟實(shí)現(xiàn)七段解碼器電路:
(1)新建一個(gè)QuartusⅡ工程,用以在DE2平臺(tái)上實(shí)現(xiàn)所要求的電路。
(2)建立一個(gè)Verilog文件,實(shí)現(xiàn)七段解碼器電路,用SW2~SW0作為輸入c2~c0,DE2平臺(tái)上的數(shù)碼管分別為HEX0~HEX7,輸出接HEX0,在Verilog中用以下語(yǔ)句定義端口:
output[0:6]HEX0;
(3)導(dǎo)入DE2_pin_assignments.csv中的引腳分配或參照附錄B中DE2平臺(tái)的引腳分配表分配引腳。
(4)編譯工程,完成后下載到FPGA中。
(5)撥動(dòng)波段開(kāi)關(guān)并觀察七段數(shù)碼管HEX0的顯示,以驗(yàn)證設(shè)計(jì)的功能是否正確。6.1.5循環(huán)顯示5個(gè)字符圖6.6中的電路采用了一個(gè)3位5選1多路復(fù)用電路,可分別從輸入的5個(gè)字符中選擇1個(gè)字符并通過(guò)七段解碼器電路在數(shù)碼管上顯示H、E、L、O和空格中的任一字符。將SW14~SW0分為5組,分別代表H、E、L、O和空格等5個(gè)字符,用SW17~SW15來(lái)選擇要顯示的字符。圖6.6循環(huán)顯示5個(gè)字符的電路代碼6.2是實(shí)現(xiàn)這個(gè)電路的代碼大綱,其中部分代碼省略,被省略掉的代碼是前文練習(xí)中編寫(xiě)過(guò)的。在這個(gè)電路中我們將6.1.3小節(jié)和6.1.4小節(jié)中的電路作為子電路。對(duì)代碼6.2中的代碼進(jìn)行擴(kuò)展后,可以用5個(gè)數(shù)碼管顯示,當(dāng)改變SW17~SW15的狀態(tài)時(shí),最終顯示的內(nèi)容與SW17~SW15的對(duì)應(yīng)關(guān)系如表6.3所示,即可以循環(huán)顯示單詞“HELLO”。代碼6.2圖6.6所示電路的Verilog代碼。modulepart5(SW,HEX0);input[17:0]SW; //聲明波段開(kāi)關(guān)output[0:6]HEX0; //聲明七段數(shù)碼管wire[2:0]M;mux_3bit_5to1M0(SW[17:15],SW[14:12],SW[11:9],SW[8:6],SW[5:3],SW[2:0],M);char7segH0(M,HEX0);endmodule //實(shí)現(xiàn)一個(gè)3位5選1多路復(fù)用器
modulemux_3bit_5to1(S,U,V,W,X,Y,M); input[2:0]S,U,V,W,X,Y; output[2:0]M;endmodule//實(shí)現(xiàn)一個(gè)H、E、L、O和空格的5字符七段解碼器modulechar_7seg(C,Display);input[2:0]C;//輸入碼output[0:6]Display;//輸出碼
Endmodule請(qǐng)按照以下步驟實(shí)現(xiàn)“HELLO”的循環(huán)顯示電路:
(1)新建一個(gè)QuartusⅡ工程,用以在DE2平臺(tái)上實(shí)現(xiàn)所要求的電路。
(2)建立一個(gè)Verilog文件,用SW17~SW15作為5個(gè)3位5選1多路復(fù)用器的選擇輸入,按照表6.3的對(duì)應(yīng)關(guān)系,將SW14~SW0連接到每個(gè)多路復(fù)用器實(shí)例的輸入端,將5個(gè)多路復(fù)用器的輸出接到5個(gè)七段數(shù)碼管HEX4~HEX0上,將Verilog文件添加到工程中來(lái)。
(3)導(dǎo)入DE2_pin_assignments.csv中的引腳分配或參照附錄B中DE2平臺(tái)的引腳分配表,分配引腳。
(4)編譯工程,完成后下載到FPGA中。
(5)先按表6.3設(shè)置好SW14~SW0的位置,然后改變波段開(kāi)關(guān)SW17~SW15的位置,觀察顯示是否正確。6.1.6循環(huán)顯示8個(gè)字符在6.1.5小節(jié)的基礎(chǔ)上,把5個(gè)字符擴(kuò)展到8個(gè)字符,如果顯示內(nèi)容少于8個(gè),比如顯示“HELLO”,則數(shù)碼管顯示輸出與SW17~SW15的對(duì)應(yīng)關(guān)系如表6.4所示。請(qǐng)按照以下步驟實(shí)現(xiàn)“HELLO”的循環(huán)顯示電路:
(1)新建一個(gè)QuartusⅡ工程,用以在DE2平臺(tái)上實(shí)現(xiàn)所要求的電路。
(2)建立一個(gè)Verilog文件,這里會(huì)用到8個(gè)5選1多路復(fù)用器的電路,用SW17~SW15作為8個(gè)3位5選1多路復(fù)用器的選擇輸入,按照表6.4的對(duì)應(yīng)關(guān)系,將SW14~SW0連接到每個(gè)多路復(fù)用器電路的輸入端(有些多路復(fù)用器的輸入會(huì)是空格),將8個(gè)多路復(fù)用器的輸出接到8個(gè)七段數(shù)碼管HEX7~HEX0上,將Verilog文件添加到工程文件中來(lái)。
(3)導(dǎo)入DE2_pin_assignments.csv中的引腳分配或參照附錄B中DE2平臺(tái)的引腳分配表,分配引腳。
(4)編譯工程,完成后下載到FPGA中。
(5)先按表6.4設(shè)置好SW14~SW0的位置,然后改變波段開(kāi)關(guān)SW17~SW15的位置,觀察循環(huán)顯示是否正確。6.2二進(jìn)制與BCD碼的轉(zhuǎn)換及顯示6.2.1二進(jìn)制數(shù)字的顯示在HEX3~HEX0上顯示SW15~SW0所對(duì)應(yīng)的數(shù)值,SW15~SW12、SW11~SW8、SW7~SW4和SW3~SW0分別對(duì)應(yīng)HEX3、HEX2、HEX1和HEX0。在數(shù)碼管上只顯示數(shù)字0~9,當(dāng)波段開(kāi)關(guān)表示的數(shù)字在1010~1111之間時(shí),沒(méi)有顯示輸出。顯示二進(jìn)制數(shù)字的具體步驟如下:
(1)新建一個(gè)QuartusⅡ工程,用以在DE2平臺(tái)上實(shí)現(xiàn)所要求的電路。
(2)建立一個(gè)Verilog文件,實(shí)現(xiàn)要求的任務(wù),本練習(xí)的目的是手工推導(dǎo)出數(shù)碼管顯示的邏輯函數(shù),因此要求只能用assign語(yǔ)句和布爾表達(dá)式實(shí)現(xiàn)所有的功能。
(3)導(dǎo)入DE2_pin_assignments.csv中的引腳分配或參照附錄B中DE2平臺(tái)的引腳分配表,分配引腳。
(4)編譯工程,完成后下載到FPGA中。
(5)改變SW15~SW0的位置,觀察顯示是否正確。6.2.2二進(jìn)制值到十進(jìn)制值的轉(zhuǎn)換若將4位二進(jìn)制輸入V=v3v2v1v0轉(zhuǎn)換成2位十進(jìn)制的等價(jià)表示D=d1d0,在HEX1和HEX0上分別顯示d1和d0,則輸入的二進(jìn)制值與輸出的十進(jìn)制值之間的對(duì)應(yīng)關(guān)系如表6.5所示。圖6.7是實(shí)現(xiàn)這個(gè)任務(wù)的部分電路,比較器判斷V是否大于9,比較器的輸出z可以控制數(shù)碼管的顯示。二進(jìn)制值轉(zhuǎn)換為十進(jìn)制值的步驟如下:
(1)新建一個(gè)QuartusⅡ工程,用以在DE2平臺(tái)上實(shí)現(xiàn)所要求的電路。
(2)建立一個(gè)Verilog模塊,包括電路中的比較器、多路復(fù)用器和電路B,但不包括電路A和七段解碼器。這個(gè)模塊的輸入為4位二進(jìn)制數(shù)V,輸出是z和4位的M。與6.2.1小節(jié)的要求一樣,編寫(xiě)這個(gè)模塊時(shí)只能用assign語(yǔ)句和布爾表達(dá)式實(shí)現(xiàn)所要求的功能,而不能出現(xiàn)if-else和case等語(yǔ)句。圖6.7顯示二進(jìn)制數(shù)值的電路6.2.3并行加法器全加器的電路如圖6.8(a)所示,輸入為a、b和ci,輸出為s和co;圖6.8(b)是該電路的符號(hào)表示。表6.6是全加器的真值表。全加器實(shí)現(xiàn)了二進(jìn)制加法,其輸出為一個(gè)2位的二進(jìn)制和:cos=a+b+ci。用4個(gè)全加器模塊的電路可以實(shí)現(xiàn)4位二進(jìn)制數(shù)的加法,如圖6.8(c)所示,這種加法電路一般稱為并行加法器。圖6.8全加器及并行加法器(a)全加器電路;(b)全加器電路符號(hào);(c)并行加法器電路實(shí)現(xiàn)并行加法器電路的步驟如下:
(1)為并行加法器建立一個(gè)QuartusⅡ工程文件。
(2)用Verilog編寫(xiě)一個(gè)全加器電路模塊,然后用4個(gè)全加器電路來(lái)實(shí)現(xiàn)并行加法器電路。
(3)分別用SW7~SW4和SW3~SW0代表輸入A和B,使用SW8代表加法器的進(jìn)位輸入ci,將SW8~SW0直接連接到LEDR8~LEDR0上,而將加法器的輸出co和S連接到LEDG4~LEDG0上,將代碼添加到工程中。
(4)導(dǎo)入DE2_pin_assignments.csv中的引腳分配或參照附錄B中DE2平臺(tái)的引腳分配表,分配引腳。
(5)編譯工程,完成后下載到FPGA中。
(6)改變輸入A、B和ci的值,觀察計(jì)算結(jié)果是否正確。6.2.41位BCD加法器在6.2.2小節(jié)的練習(xí)中,將二進(jìn)制數(shù)轉(zhuǎn)換成十進(jìn)制數(shù),而在有些場(chǎng)合,我們需要用二進(jìn)制數(shù)表示十進(jìn)制數(shù),就是將十進(jìn)制數(shù)的每一位用4位二進(jìn)制數(shù)來(lái)表示,比如將十進(jìn)制數(shù)59表示為二進(jìn)制數(shù)01011001。這種用4位二進(jìn)制數(shù)表示十進(jìn)制數(shù)的編碼,稱為BCD碼。本節(jié)練習(xí)的任務(wù)是實(shí)現(xiàn)BCD碼的加法,輸入為兩個(gè)BCD碼A和B以及1位的進(jìn)位輸入,輸出是和的BCD碼S1S0。這個(gè)電路能夠處理的和的最大值為S1S0=9+9+1=19。請(qǐng)按照以下步驟完成練習(xí):
(1)為BCD加法器新建一個(gè)QuartusⅡ工程。
(2)建立一個(gè)Verilog文件,實(shí)現(xiàn)要求的任務(wù)。先用6.2.3小節(jié)中完成的加法器實(shí)現(xiàn)4位二進(jìn)制加法,輸出為A+B的4位和S1S0及進(jìn)位位輸出c,然后再設(shè)計(jì)一個(gè)二進(jìn)制到十進(jìn)制的轉(zhuǎn)換電路,這個(gè)電路類似于6.2.2小節(jié)中完成的電路,注意最大輸出為19。編寫(xiě)這個(gè)模塊時(shí)只能用assign語(yǔ)句和布爾表達(dá)式實(shí)現(xiàn)所要求的功能,而不能出現(xiàn)if-else和case等語(yǔ)句。
(3)將編寫(xiě)好的Verilog文件添加到工程中,導(dǎo)入DE2_pin_assignments.csv中的引腳分配或參照附錄B中DE2平臺(tái)的引腳分配表,分配引腳。
(4)編譯工程,完成后下載到FPGA中。
(5)輸入不同的A、B和ci,驗(yàn)證輸出S是否正確。6.2.52位BCD加法器若設(shè)計(jì)一個(gè)2位BCD加法器,計(jì)算兩個(gè)2位BCD碼A1A0和B1B0的和,輸出為3位BCD碼S2S1S0,則可以用兩個(gè)1位BCD加法器來(lái)實(shí)現(xiàn)本電路。請(qǐng)按照以下步驟完成練習(xí):
(1)用SW15~SW8和SW7~SW0分別表示兩個(gè)BCD碼輸入A1A0和B1B0,A1A0的值顯示在數(shù)碼管HEX7和HEX6上,B1B0的值顯示在數(shù)碼管HEX5和HEX4上,S2S1S0顯示在數(shù)碼管HEX2~HEX0上。
(2)分配引腳。
(3)編譯工程,完成后下載到FPGA中。
(4)輸入不同的A1A0和B1B0的值,驗(yàn)證輸出S2S1S0是否正確。6.2.62位BCD加法器的另一種實(shí)現(xiàn)在6.2.5小節(jié)的練習(xí)中,通過(guò)調(diào)用兩個(gè)1位BCD加法器實(shí)現(xiàn)了一個(gè)2位BCD加法器。在本節(jié)練習(xí)中,我們按代碼6.3所示的用偽代碼描述的算法重新設(shè)計(jì)一個(gè)2位BCD加法器。代碼6.3實(shí)現(xiàn)2位BCD加法器的偽代碼。1 T0=A0+B02 if(T0>9)then3 Z0=10;4 c1=1;5 else6 Z0=0;7 c1=0;8 endif9 S0=T0-Z010 T1=A1+B1+c111 if(T1>9)then12 Z1=10;13 c2=1;14 else15 Z1=0;16 c2=0;17 endif18 S1=T1-Z119 S2=c2這個(gè)偽代碼用電路實(shí)現(xiàn)起來(lái)很容易,第1、9、10和18行可用加法器實(shí)現(xiàn),第2~8行及第11~17行是多路復(fù)用器,可以用比較器判斷T0>9和T1>9。用Verilog代碼實(shí)現(xiàn)這段偽代碼時(shí),注意第9行和第18行的減法可以用加法實(shí)現(xiàn)。該偽代碼中使用了if-else結(jié)構(gòu)以及“>”及“+”等運(yùn)算,比實(shí)際的電路要抽象一些,其目的是讓Verilog編譯器去決定具體電路的實(shí)現(xiàn)。請(qǐng)按照以下步驟完成練習(xí):
(1)建立新的QuartusⅡ工程,所有的輸入、輸出以及顯示都與6.2.5小節(jié)中的練習(xí)相同,參照代碼6.3所示的偽代碼編寫(xiě)一個(gè)Verilog文件,并添加到工程中去。
(2)編譯該工程,用QuartusⅡ的RTLViewer工具查看編譯后生成的電路,并與6.2.5小節(jié)中的電路進(jìn)行比較。
(3)把編譯后的電路下載到FPGA中。
(4)對(duì)電路進(jìn)行功能驗(yàn)證。6.2.76位二進(jìn)制數(shù)轉(zhuǎn)換為2位十進(jìn)制數(shù)的電路用Verilog語(yǔ)言實(shí)現(xiàn)一個(gè)電路,將6位二進(jìn)制數(shù)轉(zhuǎn)換成2位BCD編碼的十進(jìn)制數(shù),用SW5~SW0作為6位二進(jìn)制數(shù)輸入,用HEX1和HEX0顯示2位十進(jìn)制數(shù),完成后在DE2上驗(yàn)證該電路。6.3無(wú)符號(hào)數(shù)乘法器6.3.14位二進(jìn)制數(shù)乘法圖6.9(a)為兩位十進(jìn)制數(shù)乘法的實(shí)現(xiàn)P=A×B,其中A=12,B=11,P=132;圖6.9(b)是用4位二進(jìn)制乘法實(shí)現(xiàn)的A和B的乘積,對(duì)于二進(jìn)制乘法,B的每一位要么是0,要么是1,因此算式中的加數(shù)要么是移位的A,要么是0000;圖6.9(c)是用邏輯與實(shí)現(xiàn)二進(jìn)制乘法的過(guò)程。圖6.9二進(jìn)制數(shù)相乘(a)十進(jìn)制;(b)二進(jìn)制;(c)二進(jìn)制數(shù)乘法的實(shí)現(xiàn)過(guò)程圖6.10是實(shí)現(xiàn)4位二進(jìn)制乘法P=A×B的電路。該電路中,用邏輯與實(shí)現(xiàn)每一行的乘法,用全加器實(shí)現(xiàn)每一列的加法,從而得到所需要的和。根據(jù)這種乘法器的結(jié)構(gòu),我們把它稱做矩陣乘法器。圖6.104位二進(jìn)制乘法器的實(shí)現(xiàn)電路請(qǐng)按照以下步驟完成本練習(xí):
(1)新建一個(gè)QuartusⅡ工程,用以在DE2平臺(tái)上實(shí)現(xiàn)所要求的電路。
(2)建立一個(gè)Verilog文件,實(shí)現(xiàn)要求的任務(wù),再編譯工程,仿真并驗(yàn)證代碼的正確性。
(3)用SW11~SW8表示輸入A,用SW3~SW0表示輸入B,將A和B的十六進(jìn)制值分別用HEX6和HEX4顯示,將P=A×B的乘積結(jié)果用HEX1和HEX0顯示。
(4)重新編譯工程,并下載到FPGA中。
(5)改變相關(guān)波段開(kāi)關(guān)的位置,觀察顯示結(jié)果。6.3.28位二進(jìn)制數(shù)乘法參照6.3.1小節(jié)的結(jié)果,將乘數(shù)A和B擴(kuò)展到8位寬,用SW15~SW8和SW7~SW0分別表示乘數(shù)A和B,A和B的十六進(jìn)制值分別在HEX7~HEX6和HEX5~HEX4上顯示,16位乘積輸出P=A×B在HEX3~HEX0上顯示。6.3.3用LPM實(shí)現(xiàn)8位二進(jìn)制數(shù)乘法用QuartusⅡ軟件中提供的參數(shù)化功能模塊lpm_mult實(shí)現(xiàn)8位二進(jìn)制無(wú)符號(hào)數(shù)的乘法。完成后,與6.3.2小節(jié)的電路比較,看這兩種實(shí)現(xiàn)方法所占用的邏輯單元的數(shù)量有什么不同。6.4鎖存器和觸發(fā)器6.4.1RS鎖存器
Altera公司的FPGA內(nèi)有可供用戶使用的觸發(fā)器電路。在6.4.4小節(jié)中將會(huì)涉及到這些觸發(fā)器的使用方法,而在本小節(jié)的練習(xí)中我們探討如何不使用專用觸發(fā)器而在FPGA中構(gòu)建存儲(chǔ)單元。圖6.11是一個(gè)門(mén)控RS鎖存電路。這個(gè)鎖存電路可以用兩種方法實(shí)現(xiàn):第一種方法為使用邏輯門(mén)電路來(lái)實(shí)現(xiàn),如代碼6.4所示;另一種方法則使用邏輯表達(dá)式來(lái)實(shí)現(xiàn),如代碼6.5所示。如果在一個(gè)含有4輸入查找表的FPGA中實(shí)現(xiàn)這個(gè)電路,那么只需一個(gè)查找表即可,如圖6.12(a)所示。圖6.11門(mén)控RS鎖存器圖6.12在FPGA上實(shí)現(xiàn)門(mén)控RS鎖存器(a)用一個(gè)4輸入查找表實(shí)現(xiàn);(b)用4個(gè)4輸入查找表實(shí)現(xiàn)代碼6.4用邏輯門(mén)電路實(shí)現(xiàn)的RS鎖存器。modulepart1(Clk,R,S,Q);inputClk,R,S;outputQ;wireR_g,S_g,Qa,Qb; /*synthesiskeep*/and(R_g,R,Clk);and(S_g,S,Clk);nor(Qa,R_g,Qb);nor(Qb,S_g,Qa);assignQ=Qa;endmodule代碼6.5用邏輯表達(dá)式實(shí)現(xiàn)的RS鎖存器。modulepart1(Clk,R,S,Q);inputClk,R,S;outputQ;wireR_g,S_g,Qa,Qb; /*synthesiskeep*/assignR_g=R&Clk;assignS_g=S&Clk;assignQa=~(R_g|Qb);assignQb=~(S_g|Qa);assignQ=Qa;endmodule圖6.12(a)中,盡管用一個(gè)4輸入查找表就可以實(shí)現(xiàn)門(mén)控RS鎖存器,但使用這種方法無(wú)法觀察鎖存器的內(nèi)部信號(hào),比如R_g和S_g信號(hào)。為了能夠觀察到這兩個(gè)內(nèi)部信號(hào),需要使用編譯指令,在Verilog代碼中出現(xiàn)的/*synthesiskeep*/就是編譯指令,要求Quartus在編譯R_g、S_g、Qa和Qb信號(hào)時(shí)各自采用獨(dú)立的邏輯單元。編譯后生成的電路如圖6.12(b)所示。請(qǐng)按照以下步驟完成練習(xí):
(1)為RS鎖存器新建一個(gè)QuartusⅡ工程,用以在DE2平臺(tái)上實(shí)現(xiàn)所要求的電路。
(2)建立一個(gè)Verilog文件,采用代碼6.4或代碼6.5(兩種代碼生成的電路是一樣的)將這個(gè)Verilog文件添加到工程中。
(3)編譯這個(gè)工程,用RTLViewer工具查看代碼生成的門(mén)級(jí)電路,然后用TechnologyMapViewer工具查看鎖存器是否是按圖6.12(b)所示方式實(shí)現(xiàn)的。
(4)建立一個(gè)矢量波形文件,繪制R、S和Clk的波形,并使用仿真工具對(duì)電路進(jìn)行仿真。6.4.2D鎖存器圖6.13所示是一個(gè)D鎖存器電路。圖6.13D鎖存器電路請(qǐng)按照以下步驟完成練習(xí):
(1)為D鎖存器新建一個(gè)QuartusⅡ工程。
(2)建立一個(gè)Verilog文件,采用類似于代碼6.4和代碼6.5的代碼,實(shí)現(xiàn)圖6.13中的D鎖存器。在Verilog代碼中采用編譯指令/*synthesiskeep*/?以保證編譯時(shí)編譯器采用獨(dú)立的邏輯單元實(shí)現(xiàn)R、R_g、S_g、Qa和Qb信號(hào)。
(3)用RTLViewer工具查看代碼生成的門(mén)級(jí)電路,然后用TechnologyMapViewer工具查看鎖存器在FPGA中的實(shí)現(xiàn)。
(4)再新建一個(gè)QuartusⅡ工程,用以在DE2平臺(tái)上實(shí)現(xiàn)D鎖存器。
(5)建立一個(gè)頂層文件,在頂層文件中使用一個(gè)D鎖存器來(lái)定義相應(yīng)的輸入/輸出引腳,用SW0作為輸入D,用SW1作為Clk,并將Q連接到LEDR0。
(6)編譯工程,并將電路下載到DE2平臺(tái)上。
(7)對(duì)電路進(jìn)行功能測(cè)試。6.4.3D觸發(fā)器圖6.14所示是一個(gè)主從式D觸發(fā)器電路。圖6.14主從式D觸發(fā)器電路請(qǐng)按照以下步驟完成練習(xí):
(1)為D觸發(fā)器新建一個(gè)QuartusⅡ工程。
(2)建立一個(gè)Verilog文件,采用兩個(gè)D鎖存器來(lái)實(shí)現(xiàn)D觸發(fā)器。
(3)將Verilog文件添加到工程中,配置輸入/輸出引腳,用SW0作為輸入D,用SW1作為Clk,并將Q輸出連接到LEDR0;
(4)編譯工程,用RTLViewer工具查看代碼生成的門(mén)級(jí)電路,然后用TechnologyMapViewer工具查看觸發(fā)器在FPGA中的實(shí)現(xiàn)。
(5)將電路下載到DE2平臺(tái)上,對(duì)電路進(jìn)行功能測(cè)試。6.4.4三種存儲(chǔ)單元圖6.15(a)所示的電路包含了三種不同的儲(chǔ)存單元:一個(gè)門(mén)控D鎖存器、一個(gè)以上升沿觸發(fā)的D觸發(fā)器和一個(gè)以下降沿觸發(fā)的D觸發(fā)器。圖6.15三種存儲(chǔ)單元的電路和時(shí)序圖(a)電路;(b)時(shí)序請(qǐng)?jiān)赒uartusⅡ中按以下步驟完成練習(xí):
(1)新建一個(gè)QuartusⅡ工程。
(2)建立一個(gè)Verilog文件,調(diào)用三種不同的存儲(chǔ)單元來(lái)完成電路。在這部分的練習(xí)中,可以不用編譯指令/*synthesiskeep*/。代碼6.6給出了用Verilog實(shí)現(xiàn)D鎖存器的代碼,這段代碼使用一個(gè)4輸入查找表實(shí)現(xiàn)D鎖存器??刹捎妙愃频拇a來(lái)實(shí)現(xiàn)D觸發(fā)器。
(3)編譯工程,用RTLViewer工具查看代碼生成的門(mén)級(jí)電路,然后用TechnologyMapViewer工具查看觸發(fā)器在FPGA中的實(shí)現(xiàn),可以看到D鎖存器由一個(gè)4輸入查找表實(shí)現(xiàn),而D觸發(fā)器則由FPGA內(nèi)的觸發(fā)器實(shí)現(xiàn)。
(4)建立一個(gè)矢量波形文件,按圖6.15(b)的時(shí)序繪制D和Clk的波形,使用仿真工具對(duì)電路進(jìn)行仿真,并比較三種存儲(chǔ)單元的不同。代碼6.6用Verilog語(yǔ)言實(shí)現(xiàn)D鎖存器。moduleD_latch(D,Clk,Q);inputD,Clk;outputregQ;always@(D,Clk)if(Clk)Q=D;endmodule6.4.5D觸發(fā)器的應(yīng)用在DE2上顯示兩個(gè)16位數(shù)A和B,A在HEX7~HEX4上顯示,B在HEX3~HEX0上顯示。用SW15~SW0輸入A和B,先輸入A,然后再輸入B,因此要將數(shù)據(jù)A保存在電路中??砂凑找韵虏襟E完成練習(xí):
(1)新建一個(gè)QuartusⅡ工程。
(2)建立一個(gè)Verilog文件,實(shí)現(xiàn)所要求的任務(wù),用KEY0作為低電平有效的異步復(fù)位輸入,KEY1作為時(shí)鐘輸入。
(3)將Verilog文件添加到工程中,編譯工程,用RTLViewer工具查看代碼生成的門(mén)級(jí)電路,然后用TechnologyMapViewer工具查看觸發(fā)器在FPGA中的實(shí)現(xiàn)。
(4)將電路下載到DE2平臺(tái)上并進(jìn)行功能測(cè)試。6.5計(jì)數(shù)器6.5.1用T觸發(fā)器實(shí)現(xiàn)16位計(jì)數(shù)器圖6.16是由4個(gè)T觸發(fā)器構(gòu)成的4位計(jì)數(shù)器,如果Enable端有效,則在Clock的每個(gè)上升沿,計(jì)數(shù)器輸出加1。Clear信號(hào)可以使計(jì)數(shù)器清零。按照這種結(jié)構(gòu),用T觸發(fā)器實(shí)現(xiàn)一個(gè)16位計(jì)數(shù)器。圖6.164位計(jì)數(shù)器請(qǐng)按以下步驟完成練習(xí):
(1)建立一個(gè)Verilog文件,參照?qǐng)D6.16所示的結(jié)構(gòu)實(shí)現(xiàn)一個(gè)16位的計(jì)數(shù)器。Verilog文件中應(yīng)該有一個(gè)T觸發(fā)器模塊,通過(guò)對(duì)T觸發(fā)器模塊的16次調(diào)用來(lái)實(shí)現(xiàn)16位計(jì)數(shù)器。
(2)編譯這個(gè)電路,查看所占用的LE數(shù)量以及Fmax值。
(3)對(duì)電路進(jìn)行仿真。
(4)在DE2平臺(tái)上,用KEY0作為Clock輸入,用SW1作為Enable,用SW0作為Clear,用HEX3~HEX0顯示計(jì)數(shù)器的輸出。
(5)將電路下載到DE2平臺(tái)上,測(cè)試電路功能的正確性。
(6)用RTLViewer查看QuartusⅡ軟件是如何對(duì)該電路進(jìn)行綜合的,與圖6.16相比,綜合后的電路有什么不同。6.5.2用賦值語(yǔ)句實(shí)現(xiàn)16位計(jì)數(shù)器在Verilog中可以用Q<=Q+1簡(jiǎn)單地實(shí)現(xiàn)一個(gè)計(jì)數(shù)器?,F(xiàn)在用這種方法實(shí)現(xiàn)一個(gè)16位計(jì)數(shù)器,查看該電路一共占用了多少個(gè)LE以及Fmax是多少;再用同樣的方法實(shí)現(xiàn)一個(gè)4位的計(jì)數(shù)器,用RTLViewer查看QuartusⅡ軟件是如何綜合這個(gè)電路的,與前面設(shè)計(jì)的電路相比看看有何不同。6.5.3用LPM實(shí)現(xiàn)16位計(jì)數(shù)器用參數(shù)化功能模塊實(shí)現(xiàn)一個(gè)16位計(jì)數(shù)器,配置與6.5.2小節(jié)的練習(xí)一樣,即包含使能端和同步清除端。查看該電路所占用的LE數(shù)量和Fmax值。再用這種方法實(shí)現(xiàn)一個(gè)4位的計(jì)數(shù)器,用RTLViewer查看QuartusⅡ軟件是如何綜合這個(gè)電路的,與用T觸發(fā)器及賦值語(yǔ)句實(shí)現(xiàn)的計(jì)數(shù)器電路相比,看看有何不同。6.5.4閃爍的數(shù)碼管在HEX0上連續(xù)循環(huán)地顯示數(shù)字0~9,每秒刷新一次顯示。使用計(jì)數(shù)器產(chǎn)生1?s的時(shí)間間隔,這個(gè)計(jì)數(shù)器的時(shí)鐘由DE2平臺(tái)上的50?MHz時(shí)鐘提供。注意:這個(gè)設(shè)計(jì)中只允許使用DE2平臺(tái)上的50?MHz時(shí)鐘,而不允許使用其他時(shí)鐘,并保證所有的觸發(fā)器都使用這個(gè)50?MHz的時(shí)鐘。6.5.5循環(huán)顯示的“HELLO”設(shè)計(jì)一個(gè)電路來(lái)實(shí)現(xiàn)在HEX7~HEX0上循環(huán)顯示“HELLO”,使所有字母從右向左移動(dòng),每秒移動(dòng)一次,移動(dòng)模式如表6.7所示。6.6時(shí)鐘與定時(shí)器6.6.13位BCD計(jì)數(shù)器設(shè)計(jì)一個(gè)3位BCD計(jì)數(shù)器。計(jì)數(shù)器值每秒增加一次,計(jì)數(shù)器的輸出顯示在HEX2~HEX0上,用KEY0可以將計(jì)數(shù)器清零。計(jì)數(shù)器的控制信號(hào)由DE2平臺(tái)上的50?MHz時(shí)鐘提供。請(qǐng)按以下步驟完成練習(xí):
(1)新建一個(gè)QuartusⅡ工程。
(2)建立一個(gè)Verilog文件,實(shí)現(xiàn)所要求的電路。
(3)將Verilog文件添加到工程中,編譯工程并對(duì)電路進(jìn)行仿真,確定其功能的正確性。
(4)分配引腳,將顯示輸出連接到HEX2~HEX0,用KEY0作為同步清除端。
(5)重新編譯工程,將電路下載到DE2平臺(tái)上并測(cè)試其功能。6.6.2實(shí)時(shí)時(shí)鐘在DE2上實(shí)現(xiàn)一個(gè)實(shí)時(shí)時(shí)鐘,用HEX7~HEX6顯示小時(shí)(0~23),用HEX5~HEX4顯示分鐘(0~59),用HEX3~HEX2顯示秒鐘(0~59),用SW15~SW0設(shè)定時(shí)間。6.6.3反應(yīng)時(shí)間測(cè)試電路在DE2上實(shí)現(xiàn)一個(gè)反應(yīng)時(shí)間測(cè)試電路。測(cè)試電路的工作過(guò)程如下:
(1)按KEY0鍵可以復(fù)位測(cè)試電路。
(2)復(fù)位后過(guò)一段時(shí)間,紅燈LEDR0打開(kāi),4位BCD計(jì)數(shù)器開(kāi)始以毫秒為單位計(jì)數(shù)。從復(fù)位到紅燈亮之間的時(shí)間可以用SW7~SW0以秒為單位進(jìn)行設(shè)置。
(3)被測(cè)試的人看到紅燈亮?xí)r,馬上按KEY3鍵,KEY3鍵按下后,紅燈熄滅,4位計(jì)數(shù)器停止計(jì)數(shù)并將此時(shí)的計(jì)數(shù)值顯示在HEX2~HEX0上,此計(jì)數(shù)值即為反應(yīng)時(shí)間。6.7有?限?狀?態(tài)?機(jī)本節(jié)練習(xí)主要學(xué)習(xí)使用有限狀態(tài)機(jī)。在數(shù)字電路系統(tǒng)中,有限狀態(tài)機(jī)是一種十分重要的時(shí)序邏輯電路模塊,它對(duì)數(shù)字系統(tǒng)的設(shè)計(jì)具有十分重要的作用。有限狀態(tài)機(jī)是指輸出取決于過(guò)去輸入和當(dāng)前輸入的時(shí)序邏輯電路。一般來(lái)說(shuō),除了輸入和輸出以外,有限狀態(tài)機(jī)還含有一組具有“記憶”功能的寄存器,這些寄存器的功能是記憶有限狀態(tài)機(jī)的內(nèi)部狀態(tài),它們常被稱為狀態(tài)寄存器。在有限狀態(tài)機(jī)中,狀態(tài)寄存器的下一個(gè)狀態(tài)不僅與輸入信號(hào)有關(guān),而且還與該寄存器的當(dāng)前狀態(tài)有關(guān),因此有限狀態(tài)機(jī)又可以認(rèn)為是組合邏輯和寄存器邏輯的一種組合。其中,寄存器邏輯的功能是存儲(chǔ)有限狀態(tài)機(jī)的內(nèi)部狀態(tài);而組合邏輯又可以分為次態(tài)邏輯和輸出邏輯兩部分,次態(tài)邏輯的功能是確定有限狀態(tài)機(jī)的下一個(gè)狀態(tài),輸出邏輯的功能是確定有限狀態(tài)機(jī)的輸出。在實(shí)際的應(yīng)用中,根據(jù)有限狀態(tài)機(jī)是否使用輸入信號(hào),設(shè)計(jì)人員經(jīng)常將其分為Moore型有限狀態(tài)機(jī)和Mealy型有限狀態(tài)機(jī)兩種類型。Moore型有限狀態(tài)機(jī)的輸出信號(hào)僅與當(dāng)前狀態(tài)有關(guān),即可以把Moore型有限狀態(tài)機(jī)的輸出看成是當(dāng)前狀態(tài)的函數(shù)。Mealy型有限狀態(tài)機(jī)的輸出信號(hào)不僅與當(dāng)前狀態(tài)有關(guān),而且還與輸入信號(hào)有關(guān),即可以把Mealy型有限狀態(tài)機(jī)的輸出看成是當(dāng)前狀態(tài)和所有輸入信號(hào)的函數(shù)。6.7.1One-hot編碼的FSM在這部分的練習(xí)中我們?cè)O(shè)計(jì)一個(gè)區(qū)別兩種特定時(shí)序的有限狀態(tài)機(jī)(FSM)。該有限狀態(tài)機(jī)有一個(gè)輸入w和一個(gè)輸出z。當(dāng)w是4個(gè)連續(xù)的0或4個(gè)連續(xù)的1時(shí),輸出z=1,否則z=0。時(shí)序允許重疊,若w是連續(xù)的5個(gè)1時(shí),則在第4個(gè)和第5個(gè)時(shí)鐘之后,z均為1。圖6.17是這個(gè)有限狀態(tài)機(jī)的時(shí)序圖。圖6.17FSM的時(shí)序圖這個(gè)有限狀態(tài)機(jī)的狀態(tài)圖如圖6.18所示,按照該狀態(tài)圖實(shí)現(xiàn)這個(gè)有限狀態(tài)機(jī)的電路,就是從輸入到每一個(gè)狀態(tài)觸發(fā)器的邏輯表達(dá)式的實(shí)現(xiàn)電路??梢杂?個(gè)狀態(tài)觸發(fā)器來(lái)實(shí)現(xiàn)這個(gè)有限狀態(tài)機(jī),這9個(gè)狀態(tài)觸發(fā)器用表示。該有限狀態(tài)機(jī)的One-hot編碼如表6.8所示。圖6.18FSM的狀態(tài)圖請(qǐng)按照以下步驟完成練習(xí):
(1)新建一個(gè)QuartusⅡ工程,以在DE2上實(shí)現(xiàn)該狀態(tài)機(jī)。
(2)建立一個(gè)Verilog文件,調(diào)用9個(gè)觸發(fā)器來(lái)實(shí)現(xiàn)這個(gè)FSM,用簡(jiǎn)單的assign語(yǔ)句連接觸發(fā)器的輸入,用SW0作為FSM的低電平有效同步復(fù)位端,用SW1作為輸入w,用KEY0作為手動(dòng)的時(shí)鐘輸入,用LEDG0作為輸出z,用LEDR8~LEDR0顯示9個(gè)觸發(fā)器的狀態(tài)。
(3)將Verilog文件添加到工程中,編譯工程并對(duì)電路進(jìn)行仿真,確定其功能的正確性。
(4)分配引腳,重新編譯工程,將電路下載到DE2平臺(tái)上并進(jìn)行功能測(cè)試。
(5)對(duì)表6.8所示的One-hot碼進(jìn)行簡(jiǎn)單的改動(dòng),將復(fù)位狀態(tài)的所有觸發(fā)器輸出改為全0,這樣在FPGA中實(shí)現(xiàn)FSM時(shí)會(huì)簡(jiǎn)化電路。因?yàn)镕PGA中的觸發(fā)器一般都帶有Clear端,而沒(méi)有Set端,所以用Clear端復(fù)位電路很方便。
(6)表6.9是對(duì)One-hot碼所做的另一種改變,對(duì)于狀態(tài)A,所有觸發(fā)器的狀態(tài)都是0。為了實(shí)現(xiàn)這個(gè)FSM,只要對(duì)表6.8中One-hot碼的取反即可。按照表6.9的One-hot碼修改前面完成的FSM并進(jìn)行功能測(cè)試。6.7.2二進(jìn)制編碼的FSM這部分的練習(xí)中,我們用另一種Verilog代碼實(shí)現(xiàn)如圖6.18所示的狀態(tài)機(jī)。在這個(gè)版本的狀態(tài)機(jī)中,不需要手工推導(dǎo)每一個(gè)狀態(tài)觸發(fā)器的邏輯表達(dá)式,而是在第一個(gè)always塊中用case語(yǔ)句描述FSM的狀態(tài)表,用第二個(gè)always塊實(shí)例化狀態(tài)觸發(fā)器,用第三個(gè)always塊為輸出z賦值。如表6.10所示,可以用4個(gè)狀態(tài)寄存器按二進(jìn)制編碼的形式實(shí)現(xiàn)這個(gè)FSM。代碼6.7是本練習(xí)的Verilog代碼的建議架構(gòu)。代碼6.7FSM的建議架構(gòu)。modulepart2(...); //定義輸入/輸出
//定義信號(hào)reg[3:0]y_Q,Y_D;//y_Q代表當(dāng)前狀態(tài),Y_D代表下一狀態(tài)parameterA=4’b0000,B=4’b0001,C=4’b0010,D=4’b0011,E=4’b0100,F=4’b0101,G=4’b0110,H=4’b0111,I=4’b1000;always@(w,y_Q)begin:state_tablecase(y_Q)A:if(!w)Y_D=B;elseY_D=F;//狀態(tài)表其余部分default:Y_D=4’bxxxx;endcaseend//狀態(tài)表always@(posedgeClock)begin:state_FFsend//state_FFS //為z和LED賦值endmodule請(qǐng)按照以下步驟完成練習(xí):
(1)新建一個(gè)QuartusⅡ工程,以在DE2上實(shí)現(xiàn)該狀態(tài)機(jī)。
(2)建立一個(gè)Verilog文件,調(diào)用9個(gè)觸發(fā)器來(lái)實(shí)現(xiàn)這個(gè)FSM,用簡(jiǎn)單的assign語(yǔ)句連接觸發(fā)器的輸入。用SW0作為FSM的低電平有效同步復(fù)位端,用SW1作為輸入w,用KEY0作為手動(dòng)時(shí)鐘輸入,用LEDG0作為輸出z,用LEDR3~LEDR0顯示4個(gè)狀態(tài)觸發(fā)器的輸出。
(3)在編譯工程之前,應(yīng)明確指定QuartusⅡ的綜合工具采用Verilog代碼中的狀態(tài)分配,如果不作明確說(shuō)明,綜合工具會(huì)自動(dòng)選擇狀態(tài)機(jī)的狀態(tài)分配,而忽略Verilog代碼中指定的狀態(tài)碼。要改變這個(gè)設(shè)置,在QuartusⅡ中選擇Assignments>Settings,單擊窗口左端的Analysis&SynthesisSettings項(xiàng),如圖6.19所示,在StateMachineProcessing欄中選中User-Encoded即可。
(4)編譯工程,用RTLViewer工具查看具體電路。單擊電路中的狀態(tài)機(jī),將它與圖6.18的狀態(tài)圖比較,檢查是否正確。打開(kāi)編譯報(bào)告,選擇Analysis&SynthesisSettings,然后單擊StateMachines可以查看狀態(tài)機(jī)的狀態(tài)代碼。
(5)對(duì)生成的電路進(jìn)行仿真。
(6)確認(rèn)電路功能沒(méi)有問(wèn)題后即可分配引腳,將電路下載到FPGA中,進(jìn)行實(shí)際功能的測(cè)試。
(7)在第(3)步中,在StateMachineProcessing欄中選擇One-hot選項(xiàng),編譯后打開(kāi)編譯報(bào)告,選擇Analysis&SynthesisSettings,然后單擊StateMachines可以查看狀態(tài)機(jī)的狀態(tài)代碼,再將該狀態(tài)代碼與表6.8的One-hot編碼作比較,看看有何不同。圖6.19在QuartusⅡ中改變狀態(tài)機(jī)設(shè)置的處理方法6.7.3序列檢測(cè)FSM本練習(xí)中使用兩個(gè)移位寄存器實(shí)現(xiàn)序列檢測(cè)FSM。在Verilog代碼中用兩個(gè)4位移位寄存器來(lái)識(shí)別0000和1111這兩個(gè)序列。參照6.7.2小節(jié)的步驟完成練習(xí),并將其結(jié)果與One-hot編碼FSM及二進(jìn)制編碼FSM進(jìn)行比較。請(qǐng)仔細(xì)考慮一下能否只用一個(gè)4位移位寄存器來(lái)實(shí)現(xiàn)這個(gè)狀態(tài)機(jī),為什么?6.7.4模10加計(jì)數(shù)器本練習(xí)實(shí)現(xiàn)一個(gè)模10加計(jì)數(shù)器,具體功能如下:Reset輸入用于將計(jì)數(shù)器清零;兩個(gè)輸入和用于控制計(jì)數(shù)器的計(jì)數(shù)操作,當(dāng)=00時(shí)計(jì)數(shù)值不變,當(dāng)=01時(shí)計(jì)數(shù)值加1,當(dāng)=10時(shí)計(jì)數(shù)值加2,當(dāng)=11時(shí)計(jì)數(shù)值減1。所有的改變都由Clock輸入端的上升沿觸發(fā)。用SW2和SW1分別作為和,用SW0作為Reset輸入,用KEY0作為手動(dòng)Clock輸入,在HEX0上顯示計(jì)數(shù)器的十進(jìn)制計(jì)數(shù)值。請(qǐng)按以下步驟完成練習(xí):
(1)新建一個(gè)QuatusⅡ工程,以在DE2上實(shí)現(xiàn)該計(jì)數(shù)器。
(2)建立一個(gè)Verilog文件,參照代碼6.7所示的代碼架構(gòu)實(shí)現(xiàn)所要求的電路。
(3)將Verilog文件添加到工程中,編譯工程并對(duì)電路進(jìn)行仿真,確定其功能的正確性。
(4)分配引腳,將顯示輸出連接到HEX0上。
(5)重新編譯工程,將電路下載到DE2平臺(tái)上并進(jìn)行功能測(cè)試。6.7.5用移位寄存器與FSM實(shí)現(xiàn)“HELLO”的循環(huán)顯示本練習(xí)用移位寄存器結(jié)合FSM實(shí)現(xiàn)在DE2平臺(tái)上的“HELLO”循環(huán)顯示。在HEX7~HEX0上循環(huán)顯示“HELLO”,根據(jù)手動(dòng)時(shí)鐘輸入脈沖的控制,每接收到一個(gè)脈沖,顯示左移一位,當(dāng)“HELLO”移出左邊后,從右邊重新開(kāi)始顯示。將8個(gè)7位寄存器按流水線的形式排列,即第一個(gè)寄存器的輸出作為第二個(gè)寄存器的輸入,第二個(gè)寄存器的輸出作為第三個(gè)寄存器的輸入,依此類推。每個(gè)寄存器的輸出同時(shí)驅(qū)動(dòng)七段數(shù)碼管顯示。請(qǐng)?jiān)O(shè)計(jì)一個(gè)狀態(tài)機(jī)對(duì)寄存器流水線進(jìn)行以下控制:
(1)在前8個(gè)時(shí)鐘,F(xiàn)SM將字符“H,E,L,L,O,,,”分別插入8個(gè)7位寄存器。
(2)第(1)步完成后,將寄存器流水線配置成循環(huán)模式,即最后一個(gè)寄存器的輸出作為第一個(gè)寄存器的輸入,使字符可以無(wú)限循環(huán)顯示。建立一個(gè)新的QuartusⅡ工程,完成以上任務(wù)。用DE2平臺(tái)上的KEY0作為FSM及移位寄存器的手動(dòng)時(shí)鐘輸入,用SW0作為低電平有效同步清除輸入,并參照代碼6.7所示的代碼架構(gòu)實(shí)現(xiàn)所要求的電路。工程編譯完成后,將電路下載到FPGA中測(cè)試其功能。6.7.6用FSM實(shí)現(xiàn)“HELLO”的自動(dòng)循環(huán)顯示本練習(xí)對(duì)6.7.5小節(jié)中的內(nèi)容加以改動(dòng),字符的移動(dòng)以1?s為間隔自動(dòng)進(jìn)行,在HEX7~HEX0上循環(huán)顯示“HELLO”,“HELLO”從左邊移出后,再?gòu)挠疫呏匦麻_(kāi)始顯示。建立一個(gè)新的QuartusⅡ工程,完成此任務(wù),用DE2平臺(tái)上的50?MHz時(shí)鐘(CLOCK_50)作為FSM及移位寄存器的時(shí)鐘輸入,并確保所有的觸發(fā)器都采用CLOCK_50作為時(shí)鐘,用KEY0作為低電平有效同步清除輸入,并參照代碼6.7所示的代碼架構(gòu)實(shí)現(xiàn)所要求的電路。工程編譯完成后,將電路下載到FPGA中進(jìn)行功能測(cè)試。6.7.7移動(dòng)速度可控的“HELLO”的自動(dòng)循環(huán)顯示對(duì)6.7.6小節(jié)中的練習(xí)加以改動(dòng),使“HELLO”移動(dòng)的速度可以控制:當(dāng)KEY1按下時(shí),移動(dòng)速度增加一倍;當(dāng)KEY2按下時(shí),移動(dòng)速度減小一半。
KEY2和KEY1是經(jīng)過(guò)去抖處理的,能夠產(chǎn)生一個(gè)精確的脈沖,但脈沖的長(zhǎng)度是任意的。建議另外增加一個(gè)FSM以監(jiān)測(cè)按鍵的狀態(tài),這個(gè)FSM的輸出可以作為調(diào)整移動(dòng)時(shí)間間隔的一個(gè)變量。KEY2和KEY1是異步輸入的,因此在FSM中使用時(shí)應(yīng)先與系統(tǒng)時(shí)鐘同步。電路復(fù)位后,字符每秒移動(dòng)一次。當(dāng)連續(xù)按KEY1鍵時(shí),字符最快以每秒4次的速度移動(dòng);當(dāng)連續(xù)按KEY2鍵時(shí),字符最慢以每4秒一次的速度移動(dòng)。建立一個(gè)新的QuartusⅡ工程,完成以上任務(wù),并在DE2上測(cè)試其功能。6.8存儲(chǔ)器塊在計(jì)算機(jī)系統(tǒng)中,一般都需要提供一定數(shù)量的存儲(chǔ)器。在用FPGA實(shí)現(xiàn)的系統(tǒng)中,除可以使用FPGA本身提供的存儲(chǔ)器資源外,還可以使用FPGA的外部擴(kuò)充存儲(chǔ)器。本節(jié)練習(xí)主要是研究與存儲(chǔ)器相關(guān)的內(nèi)容。圖6.20(a)是一個(gè)RAM的結(jié)構(gòu)示意圖,它包含32個(gè)8位寬的字節(jié),可通過(guò)一個(gè)5位的地址口、8位的數(shù)據(jù)口和一個(gè)寫(xiě)控制端口來(lái)操作。我們考慮用兩種方法實(shí)現(xiàn)這個(gè)存儲(chǔ)器:第一種方法采用FPGA上的存儲(chǔ)器塊實(shí)現(xiàn);第二種方法采用外部存儲(chǔ)器芯片實(shí)現(xiàn)。
EP2C35FPGA片內(nèi)提供專用存儲(chǔ)器M4K存儲(chǔ)器塊。每個(gè)M4K存儲(chǔ)器塊包含4096位,支持4K×1、2K×2、1K×4和512×8四種配置。本練習(xí)中選擇其512×8的配置,只使用存儲(chǔ)器的前32個(gè)字節(jié)。本練習(xí)不涉及M4K支持的其他存儲(chǔ)模式。
M4K有兩個(gè)重要特性,即每個(gè)M4K存儲(chǔ)器塊都有專用的寄存器用于所有輸入/輸出與時(shí)鐘同步,而每一個(gè)M4K存儲(chǔ)器塊的數(shù)據(jù)讀端口和寫(xiě)端口是獨(dú)立的。因此在使用M4KRAM時(shí),要讓輸入/輸出端口之一或全部與輸入時(shí)鐘同步。圖6.20(b)所示是一個(gè)改進(jìn)的32×8RAM模塊,其Address、Write和DataIn端口都通過(guò)寄存器與時(shí)鐘Clock同步,DataOut沒(méi)有經(jīng)過(guò)寄存器而直接輸出。圖6.2032×8RAM模塊(a)RAM的結(jié)構(gòu);(b)改進(jìn)的32×8RAM模塊6.8.1用LPM實(shí)現(xiàn)RAM常用的邏輯電路如加法器、計(jì)數(shù)器、寄存器及存儲(chǔ)器,都可調(diào)用QuartusⅡ提供的參數(shù)化功能模塊LPM來(lái)實(shí)現(xiàn)。Altera公司推薦采用LPMaltsyncram實(shí)現(xiàn)存儲(chǔ)器。請(qǐng)按照以下步驟,用LPM實(shí)現(xiàn)圖6.20(b)所示的存儲(chǔ)器。
(1)新建一個(gè)QuartusⅡ工程,設(shè)定其目標(biāo)器件為EP2C35F672C6。
(2)用MegaWizardPlug-InManager產(chǎn)生需要的LPM模塊,在如圖6.21所示的MegaWizardPlug-InManager[page2a]對(duì)話框中選擇Storage類的ALTSYNCRAMLPM模塊,將Whichtypeofoutputfiledoyouwanttocreate一項(xiàng)選為VerilogHDL,即選擇生成VerilogHDL文件。在Whatnamedoyouwantfortheoutputfile框中輸入要建立的Verilog文件名,本例中將這個(gè)Verilog文件命名為ramlpm。按Next按鈕繼續(xù),在page3of10對(duì)話框中選擇單端口模式(Single-portmode),如圖6.22所示。將page7of10對(duì)話框中的Whatportsshouldberegistered欄下的復(fù)選項(xiàng)Readoutputports(s)'q'去掉,如圖6.23所示。其他配置均選用默認(rèn)值。按Finish按鈕即可生成如圖6.20(b)所示的RAM模塊的Verilog代碼。圖6.21選擇ALTSYNCRAMLPM圖6.22選擇單端口模式圖6.23配置輸入/輸出端口
(3)編譯工程,在編譯報(bào)告里可以看到工程占用了1個(gè)M4K塊中256個(gè)字節(jié)的RAM。
(4)對(duì)電路進(jìn)行仿真,并驗(yàn)證電路的功能。6.8.2在DE2上驗(yàn)證RAM本練習(xí)的任務(wù)是在DE2上驗(yàn)證6.8.1小節(jié)中的存儲(chǔ)器電路,即用波段開(kāi)關(guān)寫(xiě)一部分?jǐn)?shù)據(jù)到RAM中,并將RAM中的內(nèi)容讀出來(lái),顯示在數(shù)碼管上。請(qǐng)按照以下步驟完成練習(xí):
(1)新建一個(gè)QuartusⅡ工程。
(2)新建一個(gè)Verilog文件,例化ramlpm模塊,用DE2平臺(tái)上的資源作為其輸入/輸出。用SW15~SW11作為5位的地址輸入,用SW7~SW0作為數(shù)據(jù)輸入,用SW17作為Write信號(hào),用KEY0作為時(shí)鐘信號(hào),將Write信號(hào)的值在LEDG0上顯示,將地址值在HEX7~HEX6上顯示,將輸入數(shù)據(jù)在HEX5和HEX4上顯示,從RAM中讀出的數(shù)據(jù)在HEX1~HEX0上顯示。
(3)編譯工程,并下載到DE2上。
(4)對(duì)電路進(jìn)行功能測(cè)試,確保所有的地址都能夠被正確地讀/寫(xiě)。6.8.3用Verilog實(shí)現(xiàn)RAM除調(diào)用LPM外,我們還可以用Verilog實(shí)現(xiàn)RAM的結(jié)構(gòu)。在Verilog代碼中,可以用多維數(shù)組定義存儲(chǔ)器。一個(gè)32字節(jié)的8位RAM塊,可以定義為32×8的數(shù)組,在Verilog中可用以下聲明語(yǔ)句來(lái)定義:
Reg[7:0]memory_array[31:0];在CycloneⅡ系列FPGA中,這種數(shù)組可以由觸發(fā)器實(shí)現(xiàn),也可以由M4K存儲(chǔ)器塊實(shí)現(xiàn)。有兩種方法可以保證用M4K存儲(chǔ)器塊實(shí)現(xiàn)RAM:第一種方法是調(diào)用LPM庫(kù);另一種方法是用適當(dāng)形式的Verilog代碼定義RAM,QuartusⅡ軟件在編譯的時(shí)候,會(huì)自動(dòng)推斷出該代碼描述的是一個(gè)RAM塊,從而用M4K存儲(chǔ)器塊實(shí)現(xiàn)RAM。具體實(shí)現(xiàn)方法可通過(guò)在QuartusⅡ的軟件幫助中搜索主題“Inferredmemory”來(lái)查閱。參照Inferredmemory的內(nèi)容完成以下練習(xí):
(1)新建一個(gè)QuartusⅡ工程。
(2)新建一個(gè)Verilog文件,用Verilog代碼實(shí)現(xiàn)類似于6.8.2小節(jié)中練習(xí)的功能。RAM模塊用數(shù)組定義,Verilog代碼中應(yīng)包含RAM的寫(xiě)入和讀出功能。
(3)編譯工程,并下載到DE2上。
(4)對(duì)電路進(jìn)行功能測(cè)試,確保所有的地址都能夠被正確地讀/寫(xiě),并與6.8.2小節(jié)中練習(xí)的功能作比較。6.8.4FPGA片外RAM的使用
DE2平臺(tái)上集成了一個(gè)SRAM芯片IS61LV25616AL-10,這是一個(gè)256?K字節(jié)的16位靜態(tài)RAM(SRAM)。這個(gè)SRAM芯片的接口包括18位地址口A17~A0,16位雙向數(shù)據(jù)口I/O?15~I(xiàn)/O?0,還包括CE、OE、WE、UB和LB等控制信號(hào),且這些控制信號(hào)都是低電平有效的,具體功能如表6.11所示。
IS61LV25616AL的具體操作參考其數(shù)據(jù)手冊(cè),數(shù)據(jù)手冊(cè)中描述了IS61LV25616AL的多種操作模式以及各種操作模式的時(shí)序及參數(shù)。本練習(xí)中采用最簡(jiǎn)單的一種操作模式,即保持CE、OE、UB和LB等信號(hào)有效(置0),而只用WE信號(hào)作為讀/寫(xiě)控制。這種操作模式的時(shí)序如圖6.24所示,其中圖6.24(a)是讀循環(huán)的時(shí)序,當(dāng)WE保持高電平而地址信號(hào)A17~A0有效時(shí),存儲(chǔ)器延時(shí),然后將有效數(shù)據(jù)送到I/O15~I(xiàn)/O0端口。地址信號(hào)改變后,讀循環(huán)結(jié)束,有效數(shù)據(jù)仍然可以保持。圖6.24(b)是寫(xiě)循環(huán)的時(shí)序,從WE置0開(kāi)始到WE置1結(jié)束,在WE上升沿之前,地址信號(hào)必須保持地址建立時(shí)間有效,而數(shù)據(jù)必須保持?jǐn)?shù)據(jù)建立時(shí)間有效。表6.12列出了圖6.24中的所有時(shí)間參數(shù)。圖6.24SRAM讀/寫(xiě)操作時(shí)序(a)?SRAM讀循環(huán)時(shí)序;(b)?SRAM寫(xiě)循環(huán)時(shí)序本練習(xí)用SRAM芯片實(shí)現(xiàn)如圖6.20(a)所示的32×8的RAM模塊,請(qǐng)按照以下步驟完成練習(xí):
(1)建立一個(gè)新的QuartusⅡ工程,編寫(xiě)Verilog代碼,完成所需的功能,包括對(duì)存儲(chǔ)器的讀/寫(xiě),使用與6.8.2小節(jié)及6.8.3小節(jié)相同的LED和七段數(shù)碼管顯示,使用表6.11的引腳配置實(shí)現(xiàn)IS61LV256AL的接口設(shè)置。注意,本例中沒(méi)有使用IS61LV256AL的所有數(shù)據(jù)及地址引腳,故在Verilog中應(yīng)將不需要使用的引腳接地。
(2)編譯工程,并下載到FPGA中。
(3)對(duì)電路進(jìn)行功能測(cè)試,確保所有的地址都能夠正確讀/寫(xiě)。6.8.5用LPM實(shí)現(xiàn)簡(jiǎn)單雙口RAM圖6.20所示的存儲(chǔ)器是一個(gè)單口RAM,即對(duì)RAM的讀/寫(xiě)操作共用一組地址端口。本練習(xí)建立另外一種RAM模塊,即雙口RAM,其讀/寫(xiě)采用不同的地址端口。請(qǐng)按以下步驟完成練習(xí):
(1)建立一個(gè)新的QuartusⅡ工程,在MegaWizardPlug-InManager[Page2a]對(duì)話框中選擇Storage類下的ALTSYNCRAMLPM模塊,在Whichtypeofoutputfiledoyouwanttocreate項(xiàng)中選VerilogHDL,即選擇生成VerilogHDL文件。在Whatnamedoyouwantfortheoutputfile框中輸入要建立的Verilog文件名。按Next按鈕繼續(xù),在如圖6.25所示的page3of10對(duì)話框中,選擇簡(jiǎn)單雙口模式(Simpledual-portmode),在如圖6.26所示的page8of10對(duì)話框中,在MixedPortRead-During-WriteforSingleInputClockRAM欄中選擇Idon’tcare,表示當(dāng)讀/寫(xiě)地址相同時(shí),不考慮輸出的是舊數(shù)據(jù)還是新數(shù)據(jù);在如圖6.27所示的page9of10對(duì)話框的Doyouwanttospecifytheinitialcontentofthememory欄中選擇yes,use…,這種選擇允許當(dāng)電路下載到FPGA中去的時(shí)候,可以對(duì)存儲(chǔ)器的內(nèi)容進(jìn)行初始化,初始化的內(nèi)容以存儲(chǔ)器初始化文件(MemoryInitializationFile,MIF)格式存儲(chǔ)。在Filename欄中輸入.mif文件的文件名,本例中選用的文件名為ramlpm.mif。關(guān)于MIF文件的具體格式,請(qǐng)參照QuartusⅡ的幫助或相關(guān)手冊(cè),這個(gè)文件需要由用戶建立。圖6.25確定RAM的模式圖6.26確定同時(shí)讀同一個(gè)地址內(nèi)容時(shí)的處理機(jī)制圖6.27確定存儲(chǔ)器初始化文件的名稱
(2)關(guān)閉向?qū)Ш?,測(cè)試生成的存儲(chǔ)器模塊文件ramlpm.v。
(3)編寫(xiě)一個(gè)Verilog文件,然后調(diào)用一個(gè)存儲(chǔ)器模塊的實(shí)例。為了查看RAM中的內(nèi)容,將RAM中的內(nèi)容用十六進(jìn)制形式逐字節(jié)地顯示在HEX1和HEX0上,約每秒鐘滾動(dòng)一次,同時(shí)在HEX3和HEX2上顯示該字節(jié)的地址。使用DE2平臺(tái)上的50?MHz時(shí)鐘CLOCK_50作為時(shí)鐘源,使用KEY0作為Reset輸入。輸入數(shù)據(jù)所用的波段開(kāi)關(guān)、數(shù)碼管與6.8.2小節(jié)中的相同,注意要將波段開(kāi)關(guān)的輸入與50?MHz時(shí)鐘同步。
(4)編譯工程并在DE2上對(duì)電路進(jìn)行測(cè)試,確認(rèn)存儲(chǔ)器中的內(nèi)容是否與ramlpm.mif文件中的相同,確??梢杂貌ǘ伍_(kāi)關(guān)向任何地址寫(xiě)入任何數(shù)據(jù)。6.8.6偽雙口RAM在6.8.5小節(jié)中建立的雙口RAM,由于有兩個(gè)地址口,因此可以同時(shí)對(duì)其進(jìn)行讀操作和寫(xiě)操作。本練習(xí)中建立的RAM具有類似的功能,但只使用一個(gè)單口RAM來(lái)實(shí)現(xiàn)。由于只有一個(gè)地址端口,因此需要通過(guò)復(fù)用來(lái)分時(shí)進(jìn)行讀/寫(xiě)操作。請(qǐng)按以下步驟完成練習(xí):
(1)新建一個(gè)QuartusⅡ工程,使用MegaWizardPlug-InManager建立一個(gè)單口RAM。與6.8.1小節(jié)中建立的單口RAM不同的是,在Page9of10對(duì)話框中選擇RAM內(nèi)容的初始化文件時(shí),要同時(shí)選中AllowIn-SystemMemoryContentEditortocaptureandupdatecontentindependentlyofthesystemclock項(xiàng),即允許QuartusⅡ的在系統(tǒng)存儲(chǔ)器內(nèi)容編輯器(In-SystemMemoryContentEditor)查看和修改這個(gè)RAM塊中的內(nèi)容,如圖6.28所示。使用這個(gè)工具的時(shí)候,可以為存儲(chǔ)器塊設(shè)定一個(gè)“InstanceID”,本例中將這個(gè)存儲(chǔ)器的InstanceID設(shè)為32x8。圖6.28允許在系統(tǒng)存儲(chǔ)器內(nèi)容編輯器修改的RAM內(nèi)容
(2)編寫(xiě)一個(gè)Verilog文件,調(diào)用這個(gè)RAM模塊,實(shí)現(xiàn)與6.8.5小節(jié)練習(xí)一樣的功能。
(3)在使用In-SystemMemoryContentEditor查看和編輯RAM內(nèi)容之前,還要對(duì)另一個(gè)設(shè)置進(jìn)行修改。用Assignment>settings菜單打開(kāi)Settings對(duì)話框,在Analysis&SynthesisSettings欄的DefaultParameters中添加一個(gè)參數(shù)CYCLONEII_SAFE_WRITE,其默認(rèn)設(shè)置為RESTRUCTURE,如圖6.29所示。這個(gè)參數(shù)允許Quartus的綜合工具對(duì)單口RAM加以改進(jìn),使之能被In-SystemMemoryContentEditor查看和修改。圖6.29設(shè)置CYCLONEII_SAFE_WRITE參數(shù)
(4)編譯并將電路下載到DE2中,對(duì)電路進(jìn)行功能測(cè)試,確認(rèn)所有RAM的內(nèi)容都可以讀/寫(xiě),并與6.8.5小節(jié)中練習(xí)的結(jié)果進(jìn)行比較。
(5)用Tools>In-SystemMemoryContentEditor菜單打開(kāi)如圖6.30所示的窗口,通過(guò)這個(gè)窗口可以讀取或修改RAM中的內(nèi)容,具體使用方法請(qǐng)參照QuartusⅡ軟件的使用幫助。改變RAM中的內(nèi)容,確認(rèn)在數(shù)碼管上顯示的內(nèi)容與In-SystemMemoryContentEditor中的內(nèi)容一致。圖6.30In-SystemMemoryContentEditor窗口6.8.7用DE2控制面板查看并修改片外RAM的內(nèi)容本練習(xí)用SRAM芯片IS61LV25616AL取代M4K存儲(chǔ)器塊,實(shí)現(xiàn)6.8.6小節(jié)和
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024影視制作公司與影視平臺(tái)之間的版權(quán)購(gòu)買(mǎi)合同
- 2025年度特色美食街合作經(jīng)營(yíng)合同規(guī)范3篇
- 2024年高級(jí)精裝住宅家具專屬定制采購(gòu)合同版B版
- 2024年股權(quán)離婚分配協(xié)議
- 2024舞蹈教室場(chǎng)地租賃合同書(shū)(含舞蹈課程版權(quán)購(gòu)買(mǎi))3篇
- 鄭州財(cái)稅金融職業(yè)學(xué)院《數(shù)字影視產(chǎn)業(yè)》2023-2024學(xué)年第一學(xué)期期末試卷
- 浙大城市學(xué)院《影視節(jié)目制作技術(shù)與藝術(shù)》2023-2024學(xué)年第一學(xué)期期末試卷
- 2025年度區(qū)塊鏈技術(shù)暗股投資合作協(xié)議范本3篇
- 2024年運(yùn)輸合同:某物流公司運(yùn)輸貨物到某地
- 2024文化墻綠色環(huán)保材料研發(fā)與應(yīng)用合同3篇
- JBT 4730.10承壓設(shè)備無(wú)損檢測(cè)-第10部分:衍射時(shí)差法超聲檢測(cè)
- 蝦皮shopee新手賣(mài)家考試題庫(kù)及答案
- 五年級(jí)口算1000題(打印版)
- 對(duì)乙酰氨基酚泡騰顆粒的藥代動(dòng)力學(xué)研究
- 2024年公務(wù)員考試常識(shí)題400道完整
- 沖壓車(chē)間主管年終總結(jié)
- 輪胎返點(diǎn)協(xié)議
- 商業(yè)計(jì)劃書(shū)農(nóng)場(chǎng)
- 《屈原列傳》同步練習(xí)(含答案) 高中語(yǔ)文統(tǒng)編版選擇性必修中冊(cè)
- 海南省2023年中考英語(yǔ)科試題及答案
- 如何平衡工作和生活的時(shí)間安排
評(píng)論
0/150
提交評(píng)論