1. 程式人生 > >點亮一個LED燈

點亮一個LED燈

mage chain stop round back nal wid 設置 電路

設計定義:

二選一多路器

兩個輸入IO,a、b。可以是高電平,

輸入按鍵按下時,LED燈與a端口狀態保持一致,

按鍵釋放時,LED燈與b端口狀態保持一致

設計輸入:創建一個project

技術分享

編寫功能代碼

技術分享

module LED(a,b,key_in,led_out);
input a;//輸入端口a,b;
input b;

input key_in;//按鍵輸入,實現輸入通道的選擇

output led_out;//led控制端口

assign led_out=(key_in==0)?a:b;//當key_in==0,led_out=a;



endmodule



編寫testbench

`timescale 1ns/1ps

module LED_tb;

reg signal_a;
reg signal_b;
reg signal_c;
//激勵信號定義,對應連接到待測試模塊的輸入輸出
wire led;
//待檢測信號定義,對應連接到待測試模塊的輸出端口
LED u0(
.a(signal_a),
.b(signal_b),
.key_in(signal_c),
.led_out(led));
//例化待測試模塊

initial
begin
signal_a=0;signal_b=0;signal_c=0;


#100//延時100ms
signal_a=0;signal_b=0;signal_c=1;
#100
signal_a=0;signal_b=1;signal_c=0;
#100
signal_a=0;signal_b=1;signal_c=1;
#100
signal_a=1;signal_b=0;signal_c=0;
#100
signal_a=1;signal_b=0;signal_c=1;
#100
signal_a=1;signal_b=1;signal_c=0;
#100
signal_a=1;signal_b=1;signal_c=1;
$stop;
//產生激勵
end

endmodule

設置腳本

技術分享

前仿

技術分享

前仿結果

技術分享

後仿結果

技術分享

會發現在後仿的波形中會產生脈沖波形

技術分享

還存在邏輯的延遲

技術分享

這些問題在後面的學習中,現在重點學習流程。

假設這些問題都是可以接受的,現在回到quartus II中對IO進行分配,將設計對應到具體的電路板。

這裏查閱DE1-SOC開發板的相關技術文檔,可以查到鍵盤和LED燈的接口,我下篇隨筆會專門講解下DE1-SOC的軟硬件核,現在先貼著,之後再貼鏈接

技術分享

技術分享

從圖中可以看出可以選擇LED為V16等四個燈,KEY為AA14等案件,a,b信號輸入選擇AC12,AD12等SW撥碼開關

下面選擇引腳分配

技術分享

設置好後的引腳分配圖,設置好後點擊關閉即可。

技術分享

全編譯後,點點擊programer技術分享鍵即可打開下載界面。點擊Hardware Setup

技術分享

選擇DE-soc後close(第一次用開發板的可能沒有這個選項,這個在最後的附錄中將進行補充)

技術分享

然後點擊autodetect,選擇FPGA設置,FPGA和HPS裝置會出現在JTAG chain裏面

技術分享

選定器件後右鍵,選擇Change file

技術分享

選定軟件程序生成的output file 下的.sof文件,最後點擊start即可成功燒寫到開發板中。

技術分享

實物測試方法

把SW1撥到靠燈一端,SW5在另一端,按下KEY0後LED燈會亮,不按下會熄滅,效果如下圖所示。

技術分享

技術分享

到這裏,整個項目的基本開發流程就基本能夠理解了。

附錄:

第一次插上DE1-soc系統因為沒有驅動,會檢測不到開發板,打開系統的設備管理器會發現有個無法檢測的設備。

技術分享

雙擊它後選擇驅動導入-----》然後自己從quartus-----》安裝路徑\quartus\drivers\\usb-blaster-ii中導入即可添加設備驅動。

點亮一個LED燈