FPGA學習筆記day5
來做流水燈實驗。
需要注意的是仿真軟件的使用過程,體會一下其實際作用。
一、LED簡介
發(fā)光二極管,單向?qū)щ娦?/p>
直插式led

貼片式led
但是板子上那些好像和這個也不一樣。不知道板子上那些是什么型號的
二、硬件設計

LED0-3是連接到FPGA的輸出。通過控制輸出3.3v還是0v控制亮滅。
流水燈:同一時刻只有一個燈亮。
1000
0100
0010
0001
一直通過這種方式變化,就實現(xiàn)了流水燈
三、程序設計
首先確定輸入輸出的端口
輸入:時鐘clk,復位rst,
輸出端口:4位的[3:0]led
然后就是需要一個定時器(計數(shù)器),以及一個移位操作。
框圖:

波形圖:

在這里解釋了一下10000000這個數(shù)字是怎么出來的。0.2s是我們想要的流水燈的間隔時間,20ns是50mhz的晶振所能提供的一個時鐘周期的時間。那么10000000就是通過這個計數(shù)器實現(xiàn)0.2s定時的時候所需要計數(shù)的個數(shù)。到10000000之后清零,重新計數(shù),周而復始。這里其實不是很嚴謹,應該計數(shù)到10000000-1,這樣0到10000000-1才是正好10000000個時鐘周期。

看來寫程序之前最好還是先畫個圖。理清邏輯。這是個可取的好習慣。
然后創(chuàng)建工程,來一遍之前學過的那個流程,就不重復了。
然后用notepad++寫代碼

然后開始搞仿真
首先要寫一個testbench
還是用notepad++寫一個.v文件,保存到工程目錄下面的sim文件夾
提前保存的目的是,確定好這個后綴之后,編寫程序會產(chǎn)生高亮,便于檢查

所以其實觀察可以發(fā)現(xiàn)這個所謂的tb文件里面需要做的無非就是這幾項工作:
1、`timescale確定仿真的時間單位和精度
2、always #? ?確定一下時鐘頻率。
3、initial begin end? 時鐘置零,復位置零,延時,復位置數(shù)
4、模塊例化。
然后modelsim仿真
遇到一個問題就是

倒騰半個小時
記住一個點:例化程序的寫法
要例化的模塊 例化模塊名字(
………………
)
不要上來就寫例化模塊的名字,那樣他在反復例化自己,就會出現(xiàn)一個超長的路徑。
操真他媽傻逼。

太傻逼了。明天學下一個。