【FPGA VerilogHDL】第一次尝试:LED灯基础实验
0 實(shí)驗(yàn)環(huán)境
0.1 軟件環(huán)境
- ISE 14.7
- win10
- vivado 2017.4
0.2 硬件設(shè)備
- ISE適用的FPGA開發(fā)板:ALINK AX309
1 需求
能夠靈活控制4個(gè)LED燈
2 Verilog實(shí)現(xiàn)
`timescale 1ns / 1ps // // Create Date: 14:18:20 08/08/2020 // Module Name: led // Revision 0.01 - File Created // module led(input clk,input rst,output reg led);//define the time counterreg [31:0] timer;// cycle counter:from 0 to 4 secalways@(posedge clk or negedge rst)beginif (rst == 1'b0)timer <= 32'd0; //when the reset signal valid,time counter clearingelse if (timer == 32'd39_999_999) //4 seconds count(50M*4-1=199999999)timer <= 32'd0; //count done,clearing the time counterelsetimer <= timer + 32'd1; //timer counter = timer counter + 1end// LED controlalways@(posedge clk or negedge rst)begin if (rst == 1'b0) led <= 1'b0; //when the reset signal activeelse if (timer == 32'd49_999_999) //time counter count to 1st sec,LED1 lightenled <= 1'b1;else if(timer == 32'd99_999_999)led <= 1'b0;endendmodule功能說明:
- 輸入:時(shí)鐘clk和復(fù)位鍵rst信號(hào)(clk是50MHz)
- 輸出:發(fā)出控制一個(gè)led燈的信號(hào)
- 對(duì)于led信號(hào),初始為0,間隔1秒,變成1,再間隔1秒,變成0,循環(huán)往復(fù)
時(shí)間說明:
50MHz對(duì)應(yīng)的時(shí)鐘周期是0.02μs,因此,1s需要 50 * 10^6個(gè)時(shí)鐘周期。
初始的timer = 0,因此,實(shí)際的1s,對(duì)應(yīng)timer = 32'd_49_999_999,也就是50_000_000個(gè)時(shí)鐘周期。
3 仿真測(cè)試(略)
不是本次實(shí)驗(yàn)的重點(diǎn),略。
4 綜合測(cè)試
直接在ISE軟件執(zhí)行綜合即可。
5 管腳分配
這是本文的重點(diǎn)。 需要理解
5.1 建立.ucf文件
我們先在ISE建立一個(gè).ucf文件,然后分配管腳。
關(guān)于具體的管腳分配信息,需要參照開發(fā)板使用說明書。
重要的說明
- 時(shí)鐘信號(hào)必須是clk
- 復(fù)位信號(hào)必須是rst
- LED燈信號(hào)必須是led
重要的公式:NET “端口名稱” LOC = 引腳編號(hào) | IOSTANDARD = “電壓” ;
這是非常重要的,我們?cè)谶M(jìn)行管腳分配的時(shí)候,就是按照這樣的方式分配的。
對(duì)于以下ucf內(nèi)容
########LED Pin define##################### NET led<0> LOC = P4 | IOSTANDARD = "LVCMOS33"; ## LED1 NET led<1> LOC = N5 | IOSTANDARD = "LVCMOS33"; ## LED2 NET led<2> LOC = P5 | IOSTANDARD = "LVCMOS33"; ## LED3 NET led<3> LOC = M6 | IOSTANDARD = "LVCMOS33"; ## LED4值得注意的是<0>這部分。
首先,led引腳的位寬是1,嗯,通常引腳是1位,這樣靈活性高(還是得參考對(duì)應(yīng)的說明文檔)。
LED的說明如下
你很容易知道LED燈引腳位寬是1,為0的時(shí)候不亮,為1的時(shí)候點(diǎn)亮。
但是這與<>無關(guān),引腳的事情,是LOC后面內(nèi)容的事情,<>是端口的事情,那么,尖括號(hào)對(duì)應(yīng)端口究竟是怎么回事?
猜想,然后試一下就好了!
我們之前的led輸出信號(hào)是1位,現(xiàn)在我們改一下
output reg[1:0] led然后再把LED control改改
// LED controlalways@(posedge clk or negedge rst)begin if (rst == 1'b0) led <= 1'b0; else if (timer == 32'd19_999_999) led <= 2'b01;else if(timer == 32'd39_999_999)led <= 2'b10;end注意變化,關(guān)注led <= 2'b01;,
然后我們?cè)俑母?ucf文件
########LED Pin define##################### NET led<0> LOC = P4 | IOSTANDARD = "LVCMOS33"; ## LED1 NET led<1> LOC = N5 | IOSTANDARD = "LVCMOS33"; ## LED2之后上板測(cè)試,很容易得到結(jié)論。
如果你還沒有得到,不妨試一下3位寬,4位寬的led信號(hào)。
結(jié)論是:led<0>的0對(duì)應(yīng)的是output reg[1:0] led信號(hào)的led[0],而led<1>對(duì)應(yīng)的是led[1]。
分治思想:區(qū)分端口名與管腳編號(hào)
對(duì)于.ucf文件
對(duì)于同樣一個(gè)led<0>,它可以分配的引腳有多種選擇,不過,需要遵循的是
需要注意:
對(duì)于沒有的端口號(hào),不能分配管腳!
這是顯而易見的,不過還是得多提示一下。
實(shí)驗(yàn)思維
很多時(shí)候,不管是書籍還是說明文檔,都不可能詳細(xì)描述所有細(xì)節(jié),但是,你依然可以通過試驗(yàn)程序,猜測(cè)得出結(jié)論,然后你需要多次驗(yàn)證(通過實(shí)驗(yàn),資料等)。
信息 = 位 + 上下文
以往,我們對(duì)于二進(jìn)制數(shù)字1000和0001的反應(yīng)可能是對(duì)應(yīng)十進(jìn)制8和1,但是對(duì)于本實(shí)驗(yàn)(假設(shè)用了4個(gè)LED燈),它的含義就是只有LED4亮和只有LED1亮。
這也充分詮釋了二進(jìn)制信息含義 = 位 + 上下文的含義。
總結(jié)
以上是生活随笔為你收集整理的【FPGA VerilogHDL】第一次尝试:LED灯基础实验的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 新版本狼人的Q有AP加成吗?
- 下一篇: 千方百计爱上你剧情介绍