EDA技术按键控制LED实验
实验2 键控LED灯的设计

实验2 键控LED灯的设计一、实验目的1.进一步了解软件使用方法;2.熟悉顶层文件的设计方法;3.掌握体会分支语句的使用方法二、实验内容1.通过正确的设置将开发板上的按键与芯片引脚相连,判断按键状态,并点亮响应的led等;三、实验要求1.根据参考内容,用Verilog HDL语言设计键控LED灯的设计。
2.用Quartus II或Modelsim 对其进行功能或时序进行波形仿真验证;3.下载到FPGA开发板验证;四、实验环境Quartus prime五、实验原理根据图1可知,若检测到端口为高电平,按键未被按下;当检测到端口为低电平时,则按键被按下。
图1 独立按键电路图根据图2可知,四个LED灯低电平有效。
图2 LED灯电路图六、实验步骤1.打开Quartus prime软件,进入系统页面后点击“New Project Wizard”新建一个工程;2.创建工程后,在工程中再新建一个文件。
在这个文件中编写实验程序,其步骤是选择菜单File-New-Verilog HDL file3. 编译前对整个工程进行参数设置。
首先在工程名称上右键,单击“Settings”,选择“Simulation”,进行一系列的参数设置。
4. 对工程进行编译、仿真、验证。
七、实验程序(或者电路图)module key_led(key,led,clk);input clk;input[3:0]key;output[3:0]led;reg[3:0]led_r;reg[3:0]buffer;always@(posedge clk)beginbuffer=key;case(buffer)4'b0000:led_r=4'b0000;4'b0001:led_r=4'b0001;4'b0010:led_r=4'b0010;4'b0011:led_r=4'b0011;4'b0100:led_r=4'b0100;4'b0101:led_r=4'b0101;4'b0110:led_r=4'b0110;4'b0111:led_r=4'b0111;//如果按下的是key4,那么点亮LED44'b1000:led_r=4'b1000;4'b1001:led_r=4'b1001;4'b1010:led_r=4'b1010;4'b1011:led_r=4'b1011;//如果按下的是key3,那么点亮LED34'b1100:led_r=4'b1100;4'b1101:led_r=4'b1101;//如果按下的是key2,那么点亮LED24'b1110:led_r=4'b1110;//如果按下的是key1,那么点亮LED1default:led_r=4'b1111;endcaseendassign led=led_r;endmodule八、实验结果图1 RTL门级建模仿真图2 波形图仿真九、实验结果讨论如果按下的是key1,那么点亮LED1,如果按下的是key2,那么点亮LED2,以此类推,如果按键全部按下,那么4个led灯全部点亮。
单片机独立按键控制led灯实验原理

主题:单片机独立按键控制LED灯实验原理目录1. 概述2. 单片机独立按键控制LED灯实验原理3. 实验步骤4. 结语1. 概述单片机在现代电子设备中起着至关重要的作用,它可以通过编程实现各种功能。
其中,控制LED灯是单片机实验中常见的任务之一。
本文将介绍单片机独立按键控制LED灯的实验原理及实验步骤,希望对初学者有所帮助。
2. 单片机独立按键控制LED灯实验原理单片机独立按键控制LED灯的实验原理主要涉及到单片机的输入输出端口及按键和LED的连接方式。
在单片机实验中,按键与单片机的输入端口相连,LED与单片机的输出端口相连。
通过按键的按下和松开来改变单片机输出端口电平,从而控制LED的亮灭。
3. 实验步骤为了完成单片机独立按键控制LED灯的实验,需要按照以下步骤进行操作:步骤一:准备材料- 单片机板- 按键- LED灯- 连线- 电源步骤二:搭建电路- 将按键与单片机的输入端口相连- 将LED与单片机的输出端口相连- 连接电源步骤三:编写程序- 使用相应的单片机开发软件编写程序- 程序中需要包括按键状态检测和LED控制的部分步骤四:烧录程序- 将编写好的程序烧录到单片机中步骤五:运行实验- 按下按键,观察LED的亮灭情况- 确保按键可以正确控制LED的亮灭4. 结语通过上述实验步骤,我们可以实现单片机独立按键控制LED灯的功能。
这个实验不仅可以帮助学习者了解单片机的输入输出端口控制,还可以培养动手能力和程序设计能力。
希望本文对单片机实验初学者有所帮助,谢谢阅读!实验步骤在进行单片机独立按键控制LED灯实验时,需要按照一定的步骤进行操作,以确保实验能够顺利进行并取得预期的效果。
下面将详细介绍实验步骤,帮助读者更好地理解和掌握这一实验过程。
1. 准备材料在进行单片机独立按键控制LED灯实验前,首先需要准备相应的材料。
这些材料包括单片机板、按键、LED灯、连线和电源。
在选择单片机板时,需要根据具体的实验需求来确定,常见的有51单片机、Arduino等,不同的单片机板具有不同的特性和使用方法,因此需要根据实验要求来选择适合的单片机板。
EDA实验流水灯控制

彩灯控制器一、设计内容及要求:设计一个彩灯控制器,要求:1.四路彩灯从左向右逐次渐亮,间隔为1秒。
2.四路彩灯从右向左逐次渐灭,间隔为1秒。
3.四路彩灯同时点亮,时间间隔为1秒,然后同时变暗,时间为1秒,反复4次。
二、总体框图图(1)总体框图根据设计要求,电路设计大体思路如下:由脉冲发生器发出频率脉冲信号,利用计数器加法计数功能输出0000~1111的脉冲信号,经过数据选择器分别在0000~0011,0100~0111,1000~1111三个时段输出不同的高低电平,控制移位寄存器实现右移→左移→置数功能,从而控制彩灯按照设计要求实现亮灭。
三、选择器件本次课程设计所用器件如表一:表一本次课程设计所用器件1.同步二进制计数器74LS163表二7-3 74LS163功能表根据逻辑图、波形图、功能表分析,74LS163具有如下功能:管脚图逻辑符号1)1是同步4位二进制加法计数器,M=16,CP上升沿触发2)2既可同步清除,也可异步清除。
同步清除时,清除信号的低电平将在下一个CP上升沿配合下把四个触发器的输出置为低电平。
异步清除时,直接用清除信号的低电平把四个触发器的输出置为低电平。
3)3同步预置方式:当LD = 0时,在CP作用下,计数器可并行打入预置数据.当LD = 1时,使能输入PT同时为高电平,在CP作用下,进行正常计数。
4)PT任一为低时,计数器处于保持状态。
5) 5 CO为进位输出,可用来级联成n位同步计数器。
2.四位双向移位寄存器74LS19474LS194内部原理图74LS194四位双向移位寄存器具有左移、右移、并行数据输入、保持、清除功能。
1)从图1中74LS194的图形符号和引脚图分析。
SRG4是4位移位寄存器符号,D0~D3并行数据输入端、D SL左移串行数据输入端、D SR右移串行数据输入端、S A(M0)和S B (M1)(即9脚和10脚)工作方式控制端分别接电平开关,置1或置0,CP 时钟输入端接正向单次脉冲,清零端接负向单次脉冲,Q0~Q3输出端。
单个按键控制4个LED 实验报告(带程序)

单个按键控制4个LED(入门级实验)实验介绍:通过单个按键控制4个LED灯的亮灭状态。
正常情况下,一个按键控制1个灯。
在本次实验中,要求使用1个按键,控制4个LED灯。
通过按键按下的次数,控制LED的亮灭状态。
按下1次,1个LED灯点亮,按下2次,2个LED 灯点亮,按下3次,3个LED灯点亮,按下4次,4个LED灯点亮,按下5次,所有LED灯都熄灭,如此循环。
如此就可以通过单个按键控制4个LED灯的亮灭。
在照明场所,控制LED灯的点亮个数,就可以控制亮度。
实验目的:在使用单片机等控制器控制周边元件的时候,经常会遇到I/O口不够用的情况。
因此在使用的时候,尽量省着用。
本次实验通过单个按键控制4个LED灯的亮灭状态,正常情况下需要4个按键,因而达到了节省单片机I/O口的目的。
通过此次实验室,学习单片机按键的编程控制方法,学习LED灯输出的控制方法。
学习最简单的输入设备(按键)控制最简单的输出设备(LED灯)的控制方法。
仿真原理图:在仿真软件Proteus中绘制仿真原理图如上图所示。
(注意事项:在进行实物制作时,发光二极管串联的电阻可以省略,因为单片机引脚灌电流的能力有限,限制了通过发光二极管电流的大小。
在仿真过程中,电阻R2~R9的大小要合适,太大LED将无法点亮。
)编程思路:当单片机上电后,所有的I/O口默认高电平,因而四个发光二极管在单片机上电后,都为熄灭状态。
此时,我们按下按键后,就可以调节各个发光二极管的亮灭状态。
当按一次按钮,将P2口的状态进行左移一位,同时将P2的最低位清零,就可以达到按一次按钮后,LED灯多亮一个。
如,当前只有P2口控制的最低位连接的LED点亮,当我们按一次按键,单片机首先将P2的状态循环左移一位,则刚才的最低位变为次低位,也就是倒数第二位点亮,同时将P2口的最低位清零,也就是倒数第一位连接的LED灯点亮,即按一次按钮后,倒数第一位和倒数第二位灯点亮。
其他状态与上述过程类似,这里不再赘述。
EDA实验LED

EDA 实验:LCD菜单字符显示班级:姓名:学号:为了使学生有效加深数字系统的分析和设计方法,熟练用EDA工具完成对数字系统的设计及仿真过程;安排本“设计性实验”。
自己拟定实用电路、实验步骤,学会系统设计、调试、仿真及故障诊断、排除方法。
二、实验题目:流动字符显示电路设计要求:(1)利用实验箱中的LCD2004字符型液晶,与MC8051 IP软核,编写两页以上LCD菜单。
(2)键盘分配为,功能键1位,增加键1位,确认键1位。
(3) 第一页显示年级学号姓名第二页显示seta 1(可变)第三页显示setb 1(可变)HS2004液晶显示模块可以和单片机AT89C51直接接口,电路如图1所示三、实验设备及器材:1、GH48EDA/SOPC+PK2实验系统 四、实验程序 测试忙检测 bit lcd_bz() { bit result; LCD_RS=0; LCD_RW=1; LCD_EP=1; delay(1); result=(bit)(P1&0X80); LCD_EP=0; return result; }//*********************************** ////写入指令到LCD 中//**************************************lcd_wcmd(uchar cmd){ while (lcd_bz()); LCD_RS=0; LCD_RW=0; LCD_EP=0; _nop_(); _nop_(); P2=cmd; _nop_(); _nop_(); _nop_(); _nop_(); LCD_EP=1; _nop_(); _nop_(); _nop_();_nop_();AT89C51 HS200-4 液晶模块LCD_EP=0;}////设置显示位置lcd_pos(uchar POS){lcd_wcmd(POS|0x80);}lcd_wdat(uchar dat){while(lcd_bz());LCD_RS=1;LCD_RW=0;LCD_EP=0;P2=dat;_nop_();_nop_();_nop_();_nop_();LCD_EP=1;_nop_();_nop_();_nop_();_nop_();LCD_EP=0;}lcd_init(){lcd_wcmd(0x38);//功能设置,8位2行5x7点阵delay(12);lcd_wcmd(0x0c);//显示开/关控制delay(12);lcd_wcmd(0x06);//设置输入模式delay(12);lcd_wcmd(0x01);//清屏delay(12);}#include<reg51.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned intsbit LCD_RS=P0^0;sbit LCD_RW=P0^1; sbit LCD_EP=P0^2;sbit KEY_SET=P1^3;sbit KEY_UP=P1^4;sbit KEY_ENTER=P1^5;uchar m=0; //全局变量uchar flag=0;uchar set=0; /*功能键值*/uchar code dis1[ ]={" 2008 xuehao_xx "};uchar code dis2[ ]={"name xxxxxx"}; uchar code dis3[ ] = {" SETA "};uchar code dis4[ ] = {" SETB "};//主函数//************************************ **void main(){uchar i;lcd_init();delay(120);P0=0xFF; //置P0 口P2=0xFF; //置P2 口lcd_wcmd(0x01);//清屏fun_1();while(1){set_value();switch(set) /*根据Set标志散转*/{case 0:fun_1();break; /*第一页*/ case 1:fun_2();break; /*第二页*/ case 2:fun_3();break; /*第三页*/ default:break;}}}/************************************ ******//*设置服务子函数*/void set_value(){if (KEY_SET==0){delay(10);if(KEY_SET==0)set++;flag=0; //功能键值递增if(set>=3)set=0; //键值的范围0~2 again:if(KEY_SET==0)goto again;//若按键未释放,则等待}if(KEY_SET==1)flag=1;}void adj_value(){ m=0;while(flag==1){if (KEY_UP==0){delay(10);if(KEY_UP==0)m++; //键值递增if(m>=10)m=0; //键值的范围0~9 again:if(KEY_UP==0)goto again;//若按键未释放,则等待}lcd_pos(0x4a);lcd_wdat(0x30+m);if(KEY_ENTER==1){delay(10);if(KEY_EN TER==1)flag=0;again1:if(KEY_ENTER==1)goto again1;} }}/*第一页函数*/void fun_1(){uchar i;delay(12);lcd_pos(0);i=0;while(dis1[i]!='\0'){lcd_wdat(dis1[i]);i++; }lcd_pos(0x40); i=0;while(dis2[i]!='\0') {lcd_wdat(dis2[i]);i++;}}/*第二页函数*/void fun_2(){uchar i;lcd_wcmd(0x01);//清屏delay(12);lcd_pos(0x40);i=0;while(dis3[i]!='\0') {lcd_wdat(dis3[i]);i++;}adj_value();}/*第三页函数*/void fun_3(){uchar i;lcd_wcmd(0x01);//清屏delay(12);lcd_pos(0x40);i=0;while(dis4[i]!='\0') {lcd_wdat(dis4[i]);i++;}adj_value();}附加程序:显示字符的程序RS EQU P2.4 RW EQU P2.5EN EQU P2.6 ;LCD控制ORG 0000HJMP STARTSTART: CALL LCD_SETMOV DPTR,#MENU1MOV A,#0CALL PRT_MENU ;页面1MOV DPTR,#MENU2MOV A,#1CALL PRT_MENU ;页面2;*****************************LCD初始化**********************LCD_SET: CLR RSCLR RWMOV P0 ,#30HCALL EN1MOV A,#38H ;4位传输,单列双列CALL WCOMMOV A,#0FH ;光标出现,闪烁,显示屏开启CALL WCOMMOV A,#10H ;光标左移CALL WCOMMOV A,#01H ;清除屏幕RET;************************************ ************WCOM: MOV P0 ,A ;写8位指令CLR RSCALL EN1RET;************************************ **************EN1: SETB ENCALL DELAY1CLR ENCALL DELAY1RET;************************************ ******************DELAY1: MOV R7 ,#5;短暂延时DJNZ R7 ,$RET;*********************显示页面********************PRT_MENU:CJNE A,#0,LINE2LINE1: MOV A,#80HCALL WCOMJMP FILLLINE2: MOV A,#0C0HCALL WCOMFILL: CLR AMOVC A,@A+DPTRCJNE A,#0,L1RET;********************************L1: CALL WDATAINC DPTRJMP FILL;************************************ *************WDATA: MOV P0 ,A;写8位数据SETB RSCALL EN1RET;************************************ **********MENU1: DB 'K1:ST K2:SA K3:A',0 MENU2: DB 'TIME',0调试结果:在2004液晶屏显示:'K1:ST K2:SA K3:A',0MENU2:五、体会这次实验因为之前没有预习,导致程序流程不熟悉,对于LCD的一些内在基本呢理论没有搞懂,对于操作也相对比较慢,没有很好的完成,但最后我经过多天研究别人的程序,将本实验的程序有所搞懂。
按钮控制LED灯教学设计

按钮控制LED灯教学设计1. 引言按钮控制LED灯是一种基本的电子电路设计,本文将介绍如何使用按钮控制LED灯的原理和步骤,以便初学者能够快速掌握这一基础知识。
2. 设备清单在开始设计之前,我们需要准备以下设备:- Arduino开发板- 面包板- LED灯- 跳线3. 原理介绍按钮控制LED灯的原理很简单,当按钮按下时,电流会经过按钮,然后流入LED灯,从而点亮LED灯。
当按钮松开时,电流断开,LED灯熄灭。
在这个过程中,Arduino开发板起到控制电流流动方向的作用。
4. 连接步骤接下来,我们将详细介绍按钮和LED灯的连接步骤:步骤1:将Arduino开发板连接到面包板上,确保线路连接正确并稳定。
步骤2:将一个跳线连接到Arduino开发板的数字引脚2上,并将另一端连接到面包板的一侧。
这将是我们的按钮引脚。
步骤3:将另一个跳线连接到面包板的相邻位置上,并将其另一端连接到LED的正极。
这将是我们的LED正极引脚。
步骤4:将第三个跳线连接到面包板的另一侧,并将其另一端连接到LED的负极。
这将是我们的LED负极引脚。
5. 代码编写在连接完成后,我们需要编写一段简单的Arduino代码来控制按钮控制LED灯的开关。
```int buttonPin = 2; //将按钮连接到数字引脚2int ledPin = 13; //将LED连接到数字引脚13void setup() {pinMode(ledPin, OUTPUT); //设置LED引脚为输出pinMode(buttonPin, INPUT); //设置按钮引脚为输入}void loop() {int buttonState = digitalRead(buttonPin); //读取按钮状态if (buttonState == HIGH) { //如果按钮按下digitalWrite(ledPin, HIGH); //点亮LED灯} else {digitalWrite(ledPin, LOW); //熄灭LED灯}}```6. 实验结果当我们上传了上述代码到Arduino开发板后,即可通过按钮控制LED灯的开关状态。
基于EDA的流水灯实验

万年历的设计一、实验目标1. 巩固对基本的开发流程的掌握2. 复习对QUARTUS II软件的使用3. 复习NIOS II软件的使用4.在训练掌握相关软件使用的基础上,完成课题的设计二、设计要求用Nios II DE2开发楹的LCD(或8个七段数码管)显示电子钏的日期和时间。
LCD 分两行显示,第1行显示年、月和日(例如显示:20080101);第2行显示时、分和秒(例如显示:00152545)。
用输入按钮BUTTON[0]来控制LCD行修改,同时让Nios II DE2开发板上的绿色发光二极管LDG3的亮与灭来表示这个选择。
当BUTTON[0]按下一次后,LDG3亮,可以修改年、月和日的数字;再按一次BUTTON[0]后,LDG3灭,可以修改时、分和秒的数字。
另外和输入按钮BUTTON[3]来控制日期和时间的修改,当处于日期修改方式时,每按动一次BUTTON[3]按钮,依次更换“年”、“月”和“日”的修改。
当处于时间修改方式时,每按动一次BUTTON[3]按钮,依次更换“时”、“分”和“秒”的修改。
修改对象被选中后,按动BUTTON[2]输入按钮可以增加显示的数字;按动BUTTON[1]输入按钮可以减少显示的数字。
三、实验原理与步骤⑴在QUARTUS II 中建立工程⑵用SOPC BUILDER建立NIOS系统模块⑶在QUARTUS II 中的图形编辑界面中进行管脚连接、锁定工作⑷编译工程后下载到FPGA中⑸在NIOS II IDE中根据硬件建立软件工程⑹编译后,经过简单设置下载到FPGA中进行调试、验证下面根据以上的步骤进行进行一次全程开发:第一步:硬件部分设计1. 在自己的文件目录下建立一个hello_led文件夹,注意目录中不能有空格或中文;2. 打开QUARTUS II,点击FILE菜单下的New Project Wizard…会弹出如图2-1所示的对话框:图2-1 建立工程3. 然后输入工程存放目录,或点击工程路径右面的按钮设置工程存放目录,在第二栏中输入工程名称,我们这里输入为led;之后点击Finish,对话框消失,此时已经建立好了LED工程文件;4. 点击Assignment菜单中的Device,选择芯片为Cyclone II系列的EP2C35F672C6,如下图2-2所示:图2-2 选择器件5. 确认后。
《EDA技术及应用》实验指导书

实验一组合逻辑器件设计一、实验目的1、通过一个简单的3-8译码器的设计,掌握组合逻辑电路的设计方法。
2、掌握组合逻辑电路的静态测试方法。
3、初步了解QUARTUS II原理图输入设计的全过程。
二、实验主要仪器与设备1、输入:DIP拨码开关3位。
2、输出:LED灯。
3、主芯片:EP1K10TC100-3。
三、实验内容及原理三-八译码器即三输入,八输出。
输出与输入之间的对应关系如表1-1-1所示。
表1-1 三-八译码器真值表四、预习要求做实验前必须认真复习数字电路中组合逻辑电路设计的相关内容(编码器、译码器)。
五、实验步骤1、利用原理图设计输入法画图1-1-1。
2、选择芯片ACEX1K EP1K10TC100-3。
3、编译。
4、时序仿真。
5、管脚分配,并再次编译。
6、实验连线。
7、编程下载,观察实验结果。
图1-1 三-八译码器原理图六、实验连线用拨码开关的低三位代表译码器的输入(A,B,C),将之与EP1K10TC100-3的管脚相连;用LED灯来表示译码器的输出(D0~D7),将之与EP1K10TC100-3芯片的管脚相连。
拨动拨档开关,可以观察发光二极管与输入状态的对应关系同真值表中所描述的情况是一致的。
七、实验结果八、思考题在输入端加入使能端后应如何设计?附:用硬件描述语言完成译码器的设计::LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY T2 ISPORT(A: IN STD_LOGIC_VECTOR(2 DOWNTO 0);Y: OUT STD_LOGIC_VECTOR(7 DOWNTO 0));END T2;ARCHITECTURE A OF T2 ISBEGINWITH A SELECTY <= "00000001" WHEN "000","00000010" WHEN "001","00000100" WHEN "010","00001000" WHEN "011","00010000" WHEN "100","00100000" WHEN "101","01000000" WHEN "110","10000000" WHEN OTHERS;END A;实验二组合电路设计一、实验目的1、掌握组合逻辑电路的设计方法。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
昆明理工大学信息工程与自动化学院学生实验报告
( 201 —201 学年第学期)
课程名称:EDA技术开课实验室:年月日
一、实验目的
1、熟悉FPGA开发完整流程
2、熟悉管脚分配,熟悉编程
二、实验设备
1、带有quartusII 软件的PC 机一台。
2、 FPGA 实验箱以及电源线下载线。
三、实验要求
实现8 个SW 按键控制8 个led 灯亮灭。
四、实验原理
1、按键控制led 灯原理:
本实验是通过按键的电平控制led灯。
其示意图如图 2.1。
图 2.1按键控制led 示意图
8 个SW 按键控制相对的8 个led 灯,当SW1 在上方,其余按键在下方时,此时SW1 为高电平,这时SW1 对应的led 被点亮。
2、模块符号:
图 2.2为按键控制led模块符号。
图 2.2 按键控制led 模块符号
3、源码:
module key1(key,led);
input[7:0] key;
output[7:0] led;
reg[7:0] led;
always@(key)
begin
case(key)
8'b00000001:led<=8'b00000001;
8'b00000010:led<=8'b00000010;
8'b00000100:led<=8'b00000100;
8'b00001000:led<=8'b00001000;
8'b00010000:led<=8'b00010000;
8'b00100000:led<=8'b00100000;
8'b01000000:led<=8'b01000000;
8'b00000000:led<=8'b00000000;
endcase
end
endmodule
五、实验步骤
1、打开quartusII 开发环境,建立工程、添加相应源文件(选目标芯片时,应采用EP2C35F672C8芯片)。
2、分配管脚
1)修改tcl 文件:
➢要在FPGA硬件芯片上运行程序,通过管脚分配才能实现我们的程序与硬件的连接,所以,管脚分配是很重要的一步,若是分配不对,就不能实现预期效果。
➢其实,管脚分配也是很简单的。
有一个文件,以.tcl为后缀名,这个文件不会编译自动生成,需针对相应的芯片编写。
本实验不需自己编写此文件(已针对实验系统编写好setup_35.tcl),以后每次自己建立工程,只要把这个文件复制到自己的工程文件夹里就可以了,下面是这个文件的一部分内容。
#clk
set_location_assignment PIN_P1 -to clk
#rst
set_location_assignment PIN_R4 -to rst
#led
set_location_assignment PIN_H23 -to led\[0\]
set_location_assignment PIN_G26 -to led\[1\]
set_location_assignment PIN_G25 -to led\[2\]
set_location_assignment PIN_K22 -to led\[3\]
set_location_assignment PIN_G24 -to led\[4\]
set_location_assignment PIN_G23 -to led\[5\]
set_location_assignment PIN_P18 -to led\[6\]
set_location_assignment PIN_N18 -to led\[7\]
➢#号后的是注释,不是实质内容,这个文件里的内容格式都是这样的,包含了本实验的模块,包括clk,rst,led 等的管脚分配,其中用红色标注的部分是FPGA 芯片的引脚名,在做开发板时,FPGA 芯片和各个模块(led,key等)都连接好了,所以这些引脚也就和各个模块连着了。
➢用蓝色标注的部分是我们程序中的引脚名。
这个文件就是把程序中的clk,led 和开发板上的真的clk,led 连起来,这样程序才能在开发板上运行。
我们只要保证程序中的引脚名和蓝色部分一样就好了,无论修改哪里,这个过程就是管脚分配,所以不管我们编辑什么程序,只要将蓝色部分改成我们编写程序的输入输出引脚名就行。
2) Run tcl 文件:
➢分配好管脚后,保存,我们还要run一下这个文件,来到quartus界面,看下图2.3
图2.3 Tools菜单栏
➢选择菜单tools,点击,在下拉菜单中选择tcl scripts,出现下图 2.4。
图 2.4 tcl scripts
➢选中图中蓝色部分,然后run,分配成功后,会出现下图 2.5。
图 2.5 引脚分配成功
➢分配成功后,如果是原理图输入的模块中clk 端会出现这样的标志,如果没分配成功,回去查看.tcl 文件是否有错。
3、配置:
➢编译前要进行一项设置,如下图 2.6。
图 2.6 配置目标芯片属性
➢在在图中蓝色部分右键,选择device,弹出界面如下图 2.7。
图 2.7 配置目标芯片属性
➢点击图标,弹出界面如下图 2.8。
图 2.8 配置目标芯片属性
➢点击图标,弹出界面如下图 2.9。
图 2.9 配置目标芯片属性
➢这里选择EPCS16,这是用来固化程序时用的,我们下载程序分两种方式,一种是下载到SDRAM 中,掉电程序丢失;另一种下载到flash 中,掉电不丢失。
这项设置就是为了使程序正确下载到flash 中。
设置好后确定。
4、编译
Run 后就可以编译了,不成功检查程序或引脚分配。
5、下载
1) 下载(掉电丢失):
➢本实验不需要波形图仿真,编译成功后就开始在开发板上运行,我们先用掉电丢
失的下载方式。
首先给实验板供上电,接上jtag接口。
然后点击图标,打开下载器,把我们的程序下载到开发板上,如下图 2.10。
图 2.10 下载界面
➢下载器驱动装好后,如果上边第二个红框是no hardware,则点击hardware setup 添加硬件,把生成的sof文件导入进来后,开始点start,下载成功后,如下图2.11。
图 2.11 jtag 模式下载完成
➢下载成功后,就在开发板上看到我们程序效果了,实现了跑马灯功能。
2) 下载(掉电不丢失):
➢接下来我们试着用掉电不丢失的下载方式,这里这样设置,如下图 2.12。
➢导入pof 文件后,Start 开始下载,然后也能实现和jtag 下载一样的功能了,而且掉电也不会丢失,除非在烧进新的程序时,会自动擦出旧程序。
实验截图:
心得体会:经过这次实验,我对按键控制LED有了进一步的了解,对如何通过编程利用按键控制LED的亮灭,怎样调整LED 的闪烁频率有了进一步的经验。
六、思考练习
实现按键控制跑马灯,按1 键从左向右,按2 键从右到左,选目标芯片,本实验箱核心板采用EP2C35F672C8芯片.
module led_water(clk,led,key);
input clk;
input[1:0]key;
output[7:0] led;
reg[7:0] led;
reg[50:0] cnt;
reg[3:0] cntm;
always@(posedge clk)
begin
If(key==2’b00)//当第一个按键按下时,灯从左向右亮,否则就从右向左亮 begin
//判断是否延时到了规定时间
begin
cntm<=cntm+1; //cntm加1,灯向右移一个
cnt<=0; //计时清零
end
else
begin
cnt<=cnt+1; 计时加1
end
if(cntm>=8) //如果cntm大于等于8,就清零
begin
cntm<=0;
end
end
else
begin
cntm<=cntm-1; //cnmt减1,灯向左移一个
cnt<=0;
end
else
begin
cnt<=cnt+1;
end
if(cntm<=0) //如果灯移到最左边,就给cnmt赋值8,让流水灯从最左 //边开始亮
begin
cntm<=8;
end
end
always@(posedge clk)
begin
case(cntm)
1:led<=8'b01000000;//1
2:led<=8'b00100000;//2
3:led<=8'b00010000;//3
4:led<=8'b00001000;//4
5:led<=8'b00000100;//5
6:led<=8'b00000010;//6
7:led<=8'b00000001;//7
default:led<=7'b00000000; endcase
end
endmodule。