設計定義:
二選一多路器
兩個輸入io,a、b。可以是高電平,
輸入按鍵按下時,led燈與a埠狀態保持一致,
按鍵釋放時,led燈與b埠狀態保持一致
設計輸入:建立乙個project
編寫功能**
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_v.1.2.0_systemcd\schematic資料夾下找到。)
從圖中可以看出可以選擇led為v16等四個燈,key為aa14等案件,a,b訊號輸入選擇ac12,ad12等sw撥碼開關
下面選擇引腳分配
設定好後的引腳分配圖,設定好後點選關閉即可。
選擇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燈(一)
想當初都是用彙編來編寫微控制器的程式,那滋味現在想來都是滿滿的回憶,還是用c語言寫起來爽快啊!用c寫微控制器程式,只需要引入標頭檔案即可,實際上該標頭檔案只是定義了特殊功能暫存器位址。為了今後使用方便,我們封裝乙個函式,用來開關led燈,通過引數來控制操作的p埠,並且引入掩碼來操作單個和多個bit位...
第乙個程式點亮乙個LED燈
include 引用52包檔案 可以理解為命名空間 sbit p1 0 p1 0 定義p1管腳0 void main 主程式 c語言所必需要有的 以下非程式 上面的程式,首先引用reg52.h,這裡有對操作微控制器相關資料的封裝,方便使用者使用 接著,用p1 0這個sbit型別的變數,引用p1口的第...
51微控制器點亮乙個led燈
51微控制器是很多小白入門嵌入式的一款微控制器,雖然51實際工作中用得不多,但是作為入門學習的一款微控制器卻是非常值得推薦的。畢竟一開始學的時候,作為我們這種普普通通的學習能力而言的小白,最好是簡單易學,可以快速的看到學習的成果,那是最可以激勵我們學習下去的動力和興趣。簡單學習51微控制器後,可以參...