|
勇敢的芯伴你玩轉(zhuǎn)Altera FPGA連載57:3-8譯碼器實(shí)驗(yàn) 特權(quán)同學(xué),版權(quán)所有 配套例程和更多資料下載鏈接: http://pan.baidu.com/s/1i5LMUUD
所謂3-8譯碼器,大家可以baidu或bing一下。相信學(xué)習(xí)FPGA的讀者一定都上過數(shù)字電路的課程,所以這里對3-8譯碼器功能的實(shí)現(xiàn)給個(gè)真值表,如表8.1所示,一目了然。 表8.1 3-8譯碼器真值表
注:X表示ON或OFF,即任意狀態(tài)。 本實(shí)例的工程代碼如下。 module cy4( input ext_clk_25m, //外部輸入25MHz時(shí)鐘信號 input ext_rst_n, //外部輸入復(fù)位信號,低電平有效 input[3:0] switch, //4個(gè)撥碼開關(guān)接口,ON -- 低電平;OFF -- 高電平 output reg[7:0] led //8個(gè)LED指示燈接口 ); //------------------------------------- always @ (posedge ext_clk_25m or negedge ext_rst_n) if(!ext_rst_n) led <= 8'hff; //所有LED關(guān)閉 else if(switch[0]) led <=8'hff; //SW3處于OFF狀態(tài),所有LED關(guān)閉 else begin //SW3處于ON狀態(tài),點(diǎn)亮的LED位由SW4/SW5/SW6撥碼開關(guān)的輸入決定 case(switch[3:1]) 3'b111: led <=8'b1111_1110; //D2點(diǎn)亮 3'b110: led <=8'b1111_1101; //D3點(diǎn)亮 3'b101: led <=8'b1111_1011; //D4點(diǎn)亮 3'b100: led <=8'b1111_0111; //D5點(diǎn)亮 3'b011: led <=8'b1110_1111; //D6點(diǎn)亮 3'b010: led <=8'b1101_1111; //D7點(diǎn)亮 3'b001: led <=8'b1011_1111; //D8點(diǎn)亮 3'b000: led <=8'b0111_1111; //D9點(diǎn)亮 default: ; endcase end endmodule 這個(gè)代碼中只有一個(gè)always語句,這里對撥碼開關(guān)做判斷,首先判斷撥碼開關(guān)SW3(switch[0])為OFF,則讓所有LED也都OFF;接著用case語句判斷撥碼開關(guān)SW4/SW5/SW6(switch[3:1])的輸入狀態(tài),根據(jù)真值表,相應(yīng)獲得輸出結(jié)果,點(diǎn)亮譯碼后的某個(gè)特定LED。 |