FPGA入门系列实验教程——点亮LED

合集下载

基础实验一_FPGA_LED

基础实验一_FPGA_LED

前言FPGA在复杂逻辑电路以及数字信号处理领域中扮演者越来越重要的角色,SOC(片上系统)以其低功耗,高性能,低成本,高可靠性等优点成为嵌入式系统的发展趋势。

作为一个简明的教程,主要宗旨是让初学者快速地了解FPGA/SOPC(可编程片上系统)开发的流程。

目前IT技术的发展可以说是一日千里,以本人的观点来讲,如果希望在电子设计领域有所作为,则必须具备快速掌握新技术的能力。

电子设计最重要的是实践的积累,我们只要具备了一定的基础,应当马上投入实践,否则很多概念都无法真正理解。

有不少人包括我,当下决心要成为一个合格的电子设计工程师的时候,总是想如果把有关电路方面的理论都掌握了才能所向披靡,有底气参加实际项目设计。

当然如果能做到“把有关理论都掌握了”这样的境界,我想应该是很理想的,但经验发现这并不实际。

据我所知,我所认识的不少电子设计牛人,他们的理论知识可能都比不上我们的本科生,但很多不错的产品都是从他们的手中开发出来的,有了实践的经验后,他们掌握新技术的速度相当惊人。

有人跟我说:“新技术是拿来用的,不是拿来学的。

”他们认为掌握新的设计技术应当尽快掌握它的设计流程。

因此,我参考朋友给我的意见,写了这个简易的教程,以非常详细的实例来让初学者了解基于QuartusII和NiosII IDE的FPGA/SOPC开发的基本流程,目的是为了让初学者尽快上手FPGA/SOPC的开发流程,尽快投入到实践中。

为了易于说明问题,本教程中的一些概念并不是很严谨,如果读者对某些提法有异议,请参考相关资料和教材,并以相关资料和教材为准。

通过该简明教程,初学者能快速了解FPGA/SOPC的基本开发流程,很多技巧和深入理解都靠长期的经验积累,因此初学者应该在了解了基本流程以后,思维不能局限于此,应在实践中提高水平,并参考更全面和权威的资料。

本教程配套CT-SOPCx系列FPGA/SOPC学习套件(对于该套件的相关内容请参考附录。

)以实践为基础,适合具备基本的数字电路设计基础的初学者。

基于FPGA的LED流水灯与按键消抖实验

基于FPGA的LED流水灯与按键消抖实验

基于FPGA的LED流水灯与按键消抖实验1.实验目的(1)通过实验进一步学习Quartus II软件的使用方法。

(2)通过实验学习流水灯的设计原理。

(3)通过实验学习按键消抖(边沿检测法)的基本原理。

2.实验仪器设备(1)FPGA开发实验箱。

(2)数字万用表。

(3)电脑。

3.预习(1)复习FPGA开发有关的流程。

(2)复习Verilog HDL语言语法。

(3)复习实验所用的相关原理。

(4)按要求编写实验中要求的硬件描述语言程序。

4.实验原理(1)LED流水灯。

流水灯是一个典型的FPGA程序设计,通过控制8位led向左依次循环点亮,达到对硬件语言、软件开发平台等的初步认识。

①if语句的使用。

Verilog HDL语言中的if语句与C语言中的十分相似,其使用方法有以下三种:a.if(条件1)语句块1;b.if(条件1)语句块1;else 语句块2;c.if(条件1)语句块1;else if(条件2)语句块2;……else if(条件n)语句块n;else 语句块n+1。

在上述三种方式中,“条件”一般为逻辑表达式或关系表达式,也可以是一位的变量。

如果表达式的值出现0(假),x(未知),z(高阻),则全部按“假”来处理;若为“1”,则按“真”来处理。

语句块若为单句,直接书写即可;若为多句,则需要用“begin end”块括起来。

建议无论多句还是单句都用“begin end”括起来。

②case语句的使用。

case语句是一个多路条件分支语句,常用于多路译码、状态机和微处理机的指令译码等场合。

case语句的语法格式为:case(条件表达式)分支1:语句块1;分支2:语句块2;……default:语句块nendcase其中,“分支n”通常都是一些常量表达式。

case语句先对“条件表达式”求值,然后同时并行对各分支项求值并进行比较,这是与if语句最大不同。

比较完成后,与条件表达式值相匹配的分支中的语句被执行。

分支项需要互斥,否则会出现逻辑矛盾。

基于FPGA的流水灯

基于FPGA的流水灯

基于FPGA的流水灯概述流水灯是一种常见的电子实验项目,也是学习数字电路和FPGA编程的入门项目之一。

本文介绍了如何使用FPGA实现一个基于流水灯的电子项目。

需求流水灯项目的主要需求是将一组LED灯以一定的速率顺序点亮,然后逐个熄灭,再以同样的速率顺序点亮下一个LED 灯,如此循环。

硬件设计FPGA板在本项目中,我们使用一块支持FPGA编程的开发板。

可选的FPGA开发板包括Xilinx的Nexys 4或Digilent的Basys 3等。

LED灯流水灯需要一组LED灯来显示效果。

我们将使用FPGA开发板上的LED灯作为显示单元。

连接将LED灯的阳极连接到FPGA开发板的GPIO引脚上,并将其地连接到电路板上的公共地线。

软件设计硬件描述语言(HDL)HDL是一种用于描述数字电路和FPGA的语言。

常用的HDL包括VHDL和Verilog。

我们将使用Verilog作为本项目的HDL语言。

Verilog代码下面是一个基于FPGA的流水灯的Verilog代码示例:module led_shifter(input clk,output reg [7:0] leds);reg [25:0] counter;always @(posedge clk) begincounter <= counter + 1;if (counter == 26'd255) begincounter <= 0;leds <= leds << 1;endendendmodule上述Verilog代码中,我们定义了一个led_shifter模块,该模块接受一条时钟信号(clk)和一个用于控制LED灯的8位寄存器(leds)。

leds寄存器表示LED灯的状态,其中每个位代表一个LED灯。

在always块中,我们使用一个计数器counter来计算时钟脉冲的数量。

当计数器的值达到255时,即过了一定的时钟周期,我们将计数器重置为0,并将leds寄存器向左移动一位,即将下一个LED灯点亮。

FPGA基础试验之流水灯

FPGA基础试验之流水灯

综合实验报告第四组组长:韩欢02081535陈洁钰02081536侯旭涛02081514高耀02081510李欣昊02081508李昊02081506FPGA基础试验之流水灯一、实验目的通过此实验进一步了解、熟悉和掌握Quartus II开发软件的使用方法及Verilog 语言的编程方法。

学习简单时序电路的设计分析和硬件测试。

二、实验内容1.熟悉信号产生板中的FPGA的普通I/O的连接;2.根据实际的流水灯分析时序,体会用Verilog语言的编程产生相应时序;3.熟悉集成开发工具Quartus II,学会使用Quartus II对Cyclone系列FPGA的程序开发、编译与调试;4.掌握Cyclone系列FPGA的程序加载,熟练掌握将.sof文件加载到实验板的FPGA中,实现流水灯的效果。

三、实验原理流水灯,顾名思义就是让LED像水一样的点亮。

如果把流水做慢动作播放,可以想象到其实就是移动,即:把水块不断地向同一方向移动,而原来的水块保持不动,就形成了流水。

同样,如果使得最左边的灯先亮,然后通过移位,在其右侧的灯,从左向右依次点亮,而已经亮的灯又不灭,便形成了向右的流水灯。

初始状态时,四个灯都不亮,每来一个时钟脉冲,CLK,计数器就加1.这样通过移位依次点亮所有的灯,就形成了流水灯。

而当四个灯都点亮时,需要一个操作使得所有的灯恢复为初始状态。

然后,再一次流水即可。

如果是右移位,就出现向右流水的现象;反之,向左流水。

四、实验要求控制4个LED进行花式显示,根据硬件设施设计两种模式:S0:从全亮到全灭,再到全亮,依次循环;S1:从LED0开始依次点亮,为LED1亮,LED2亮,LED3亮,后再LED2亮,LED1亮,LED0亮,不停循环。

即输出为:S0时,从0000到1111不停循环转换;S1时,0111,1011,1101,1110,1101,1011,0111不断循环。

五、实验步骤(1)建立工程(2)建立Verilog文件,编写相关程序(3)将verilog文件编译为可视化电路图文件(4)将可视化电路图文件添加输入输出组合成电路图文件(5)编译语法及验证原理图(6)根据需要分配管脚并进行编译(7)下载编译后得到的文件.sof(在线方式),.pof(离线方式)。

fpga点亮led灯的编程概述

fpga点亮led灯的编程概述

fpga点亮led灯的编程概述FPGA(可编程门阵列)作为一种可重构的硬件设备,具有广泛的应用领域。

其中点亮LED灯是FPGA学习和开发中的经典案例之一,本文将一步一步回答"[fpga点亮led灯的编程概述]"。

第一步:了解FPGA基础知识在开始讨论FPGA点亮LED灯的编程方法之前,首先需要了解FPGA的基础知识。

FPGA由可编程逻辑单元(PL)和配置逻辑单元(CLB)组成。

PL由一系列可编程逻辑块(CLB)和查找表(LUT)组成,而CLB包含可编程开关和触发器。

通过将这些部件配置为特定的逻辑功能或电路,FPGA 实现了在硬件上执行特定任务的能力。

第二步:了解LEDLED(发光二极管)是一种电子元件,能够将电能转化为可见光。

它通常由一个正极(阳极)和一个负极(阴极)构成。

第三步:了解FPGA开发工具要对FPGA进行编程,需要使用特定的开发工具。

常见的FPGA开发工具包括Xilinx的Vivado和Altera的Quartus II。

这些工具提供了一个开发环境,可以进行FPGA设计、仿真和调试。

第四步:设计LED控制电路为了点亮LED灯,需要设计一个电路,将FPGA的输出信号连接到LED的控制引脚上。

一个简单的LED控制电路通常由一个电阻和一个开关构成。

电阻用于限制电流,而开关用于控制电路的通断。

当开关关闭时,电流流过LED,LED灯亮起。

第五步:编写HDL代码现在,我们可以开始编写HDL(硬件描述语言)代码,描述FPGA的逻辑和功能。

常见的HDL语言包括VHDL和Verilog。

以下是一个简单的VHDL 代码片段,用于点亮LED灯。

vhdl定义一个实体(entity),包含一个输入信号(clk)和一个输出信号(led)entity led_controller isport (clk : in std_logic;led : out std_logic);end entity led_controller;声明结构体(architecture),使其逻辑在每个时钟循环(rising_edge(clk))时执行。

FPGA入门系列实验教程——点亮LED

FPGA入门系列实验教程——点亮LED

FPGA入门系列实验教程——点亮LED1.实验任务点亮发光二极管。

通过这个实验,熟悉并掌握CPLD/FPGA开发软件Quartus II的使用方法和开发流程以及Verilog HDL的编程方法。

2.实验环境硬件实验环境为艾米电子工作室型号EP2C5T144开发套件。

软件实验环境为Quartus II8.1开发软件。

3.实验原理FPGA器件同单片机一样,为用户提供了许多灵活的独立的输入/输出I/O口(单元)。

FPGA每个I/O口可以配置为输入、输出、双向、集电极开路和三态门等各种组态。

作为输出口时,FPGA的I/O口可以吸收最大为24mA的电流,可以直接驱动发光二极管LED等器件。

图1.1为8个发光二极管硬件原理图,本原理图对应艾米电子工作室型号为EP2C5T144FPGA开发板及接口板。

通过原理图可知如果要点亮这八个LED,所以只要正确分配并锁定引脚后,在相应的引脚上输出相应高电平“1”,就可实现点亮该发光二极管的功能。

本工作室开发板均采用输出“1”点亮LED的模式,以后就不再另作说明。

图1.1发光二极管LED硬件原理图4.实验程序(1)利用连续赋值assign 语句来实现(文件名led.v )module led1(led);//模块名ledoutput[7:0]led;//定义输出端口assign led=8'b10101010;//输出0x AAendmodule(2)利用过程赋值语句来实现(文件名led1.v )module led1(led);//模块名led1output[7:0]led;//定义输出端口reg[7:0]led;alwaysbeginled=8'b10101010;//输出0xAAendendmodule5.实验步骤1)打开Quartus II 软件并建立工程(1)通过桌面上的快捷方式打开Quartus II 8.1软件,进入集成开发环境,软件界面如图1.2所示。

基础实验一、FPGA实现按键控制LED

基础实验一、FPGA实现按键控制LED
QuartusII 下面的 Message 窗口会显示一些编译信息,最后编译成功弹出提示:
7. 下载。 (1) 下载设置:如果第一次使用下载线下载配置文件到 FPGA,则需要在 QII 软件设 置下载线的型号等信息。先将 ByteBlasterII 下载线的一头接到 PC 的并口,执行菜单 Tools->Programmer(如下图)
Ñï¹âµç×Ó¹¤×÷ÊÒ
扬光电子工作室 qq:115513875 email:xiaoding113@
(5) 如果要下载到非易失 Flash 配置芯片(掉电后配置信息不丢失)里去,则将 ByteBlasterII 插到 EPCS1 芯片的下载口。并在下载界面的“Mode:”下拉列表应选择“Active Serial Programming”,并选择工程中.pof 后缀的文件进行下载。一般情况下使用 JTAG 下载 即可,等整个设计都完成了不需要再修改后才把最后的 POF 下载到 EPCS 芯片中。
Ñï¹âµç×Ó¹¤×÷ÊÒ
扬光电子工作室 qq:115513875 email:xiaoding113@
这里是选择其它 EDA 工具,对于该工程我们直接用 QuartusII 软件进行开发,因此不必 做修改,按 NEXT 进入工程的信息总缆对话框:
按 Finishi 按纽即建立一个空项目。 2、 建立顶层图
在工程目录下建立一个 name 为 Setup.tcl 的 file。File->New,选择 other files 页面:
Ñï¹âµç×Ó¹¤×÷ÊÒ
扬光电子工作室 qq:115513875 email:xiaoding113@
有关 tcl 文件的更详尽内容可参考 QuartusII 的帮助文档,对于我们所选用的 FPGA 开 发板 SOPC 开发板来说,由于不同型号的 FPGA 核心板的管脚与实验板上的引脚也不同, 因此不同的核心板对应的.tcl 文件也不同(关于核心板引脚与实验板引脚对应的详细情况请 学习套件用户手册”或相关电路原理图)。在实际项目中,该文件也可以根据具体管脚分配 要求来改写。

VHDL_fpga_数电实验_彩灯_LED_实验报告

VHDL_fpga_数电实验_彩灯_LED_实验报告

彩灯VHDL设计在日常生活中,为了增加聚会或是过节氛围,经常要使用到彩灯循环点亮。

单一的循环可能无法起到理想的效果,通过不同花样的变换则能够很好的完成任务。

多路彩灯循环控制可以有多种实现方法,例如利用单片机可以实现,利用数字电路时序逻辑也可以实现。

我们这里利用VHDL语言实现对多路彩灯的控制。

彩灯的一种点亮方式经过足够长的延时后,转变为了其他的点亮方式。

这就需要一个CLK信号完成,CLK信号可以由晶体振荡器或者是振荡电路产生。

至于各种不同花样彩灯的变换,我们可以通过增加输入信号Sel来控制。

Sel为两位二进制数,分别为00,01,10,11,四种状态对应四种花样。

同时系统还需一个复位信号实现对电路的清零控制。

输出八位彩灯,我们这里用LED发光二极管代替。

当电路输出为“1”时,LED点亮。

当电路输出为“0”时,LED熄灭。

利用VHDL语言实现该功能程序如下:LIBRARY IEEE;USE IEEE.std_logic_1164.ALL;USE IEEE.std_logic_ARITH.ALL;USE IEEE.std_logic_UNSIGNED.ALL;ENTITY cd ISport( clk,clk_use:in std_logic;rst:in std_logic;light:out std_logic_vector(7 downto 0));END cd;ARCHITECTURE control OF cd IStype states is (s0,s1,s2,s3,s4,s5);signal state:states;SIGNAL clk1ms:std_logic:='0';SIGNAL cnt1:std_logic_vector(3 downto 0):="0000";SIGNAL cnt2:std_logic_vector(3 downto 0):="0000";SIGNAL cnt3:std_logic_vector(2 downto 0):="000";SIGNAL cnt4:std_logic_vector(2 downto 0):="000";SIGNAL cnt5:std_logic_vector(3 downto 0):="0000";SIGNAL cnt6:std_logic_vector(3 downto 0):="0000";BEGINPROCESS(clk1ms)BEGINif clk1ms'event and clk1ms='1' thenif state=s0 then --第一种彩灯花样的程序if (cnt1="1111") thencnt1<="0000";else cnt1<= cnt1+1;end if;case cnt1 iswhen "0000"=>light<="10000000";when "0001"=>light<="10100000";when "0010"=>light<="10101000"; when "0011"=>light<="10101010"; when "0100"=>light<="11101010"; when "0101"=>light<="11111010"; when "0110"=>light<="11111110"; when "0111"=>light<="11111111"; when "1000"=>light<="11111110"; when "1001"=>light<="11111010"; when "1010"=>light<="11101010"; when "1011"=>light<="10101010"; when "1100"=>light<="10101000"; when "1101"=>light<="10100000"; when "1110"=>light<="10000000"; when others=>light<="00000000";end case;elsif state=s1 then -- 第二种彩灯花样的程序if cnt2="1111" thenCnt2<="0000";else cnt2<= cnt2+1;end if;case cnt2 iswhen "0000"=>light<="11111111"; when "0001"=>light<="01111111"; when "0010"=>light<="00111111"; when "0011"=>light<="00011111"; when "0100"=>light<="00001111"; when "0101"=>light<="00000111"; when "0110"=>light<="00000011"; when "0111"=>light<="00000001"; when "1000"=>light<="00000011"; when "1001"=>light<="00000111"; when "1010"=>light<="00001111"; when "1011"=>light<="00011111"; when "1100"=>light<="00111111"; when "1101"=>light<="01111111"; when "1110"=>light<="11111111"; when others=>light<="00000000";end case;elsif state=s2 then -- 第三种彩灯花样的程序if cnt3="100" thenCnt3<="000";else cnt3<= cnt3+1;end if;case cnt3 iswhen "000"=>light<="10000001"; when "001"=>light<="11000011"; when "010"=>light<="11100111"; when "011"=>light<="11111111"; when others=>light<="00000000";end case;elsif state=s3 then -- 第四种彩灯花样的程序if cnt4="100" thencnt4<="000";else cnt4<= cnt4+1;end if;case cnt4 iswhen "000"=>light<="00011000"; when "001"=>light<="00111100"; when "010"=>light<="01111110"; when "011"=>light<="11111111"; when others=>light<="00000000";end case;elsif state=s4 then --第五种彩灯花样的程序if cnt5="1111" thenCnt5<="0000";else cnt5<=cnt5+1;end if;case cnt5 iswhen "0000"=>light<="11000000"; when "0001"=>light<="01100000"; when "0010"=>light<="00110000"; when "0011"=>light<="00011000"; when "0100"=>light<="00001100"; when "0101"=>light<="00000110"; when "0110"=>light<="00000011"; when "0111"=>light<="00000110"; when "1000"=>light<="00001100"; when "1001"=>light<="00011000"; when "1010"=>light<="00110000"; when "1011"=>light<="01100000"; when "1100"=>light<="11000000"; when others=>light<="00000000";end case;elsif state=s5 then -- 第六种彩灯花样的程序if cnt6="1111" thenCnt6<="0000";else cnt6<=cnt6+1;end if;case cnt6 iswhen "0000"=>light<="00000011"; when "0001"=>light<="00000110"; when "0010"=>light<="00001100"; when "0011"=>light<="00011000"; when "0100"=>light<="00110000"; when "0101"=>light<="01100000"; when "0110"=>light<="11000000"; when "0111"=>light<="01100000"; when "1000"=>light<="00110000"; when "1001"=>light<="00011000"; when "1010"=>light<="00001100"; when "1011"=>light<="00000110"; when "1100"=>light<="00000011"; when others=>light<="00000000";end case;end if;end if;END PROCESS P1;P2:PROCESS(clk) --分频进程variable cnt:integer range 0 to 10; BEGINIF(RST='0')thencnt:=0;ELSIF(clk'EVENT AND clk='1')thenif cnt<9 thencnt:=cnt+1;clk1ms<='0';elsecnt:=0;clk1ms<='1';end if;end if;end PROCESS P2;process(rst)--循环beginif (rst='1') thenstate<=s0;elseif(clk_use'event and clk_use='1') thencase state iswhen s0 =>state<=s1;when s1=>state<=s2;when s2=>state<=s3;when s3 =>state<=s4;when s4=>state<=s5;when s5=>state<=s1;end case;end if;end if;end process;end control;本控制电路采用VHDL语言设计。

基于FPGA的流水灯

基于FPGA的流水灯

基于FPGA的流水灯介绍流水灯(Traffic Light)是一种常见的电子实验项目,通过一组灯的亮灭变化来模拟交通信号灯的工作原理。

在本文档中,我们将介绍如何使用FPGA(Field-Programmable Gate Array)来实现流水灯功能。

背景知识FPGA概述FPGA是一种重新可编程的集成电路芯片,可以通过修改内部逻辑电路来实现不同的功能。

相比于传统的固定功能芯片,FPGA具有更高的灵活性和可重构能力。

流水灯原理流水灯由多个灯泡组成,每个灯泡在不同的时间点亮。

通过逐个点亮和熄灭灯泡,可以模拟交通信号灯的变化效果。

硬件设计硬件平台选择在本项目中,我们选择使用一块FPGA开发板作为硬件平台。

开发板上集成了FPGA芯片以及所需的外围器件,方便我们进行流水灯的实验。

硬件连接将FPGA开发板上的LED灯连接到FPGA芯片的GPIO(通用输入输出)引脚上。

通过配置FPGA芯片的GPIO引脚为输出模式,我们可以控制LED灯的亮灭状态。

软件设计硬件描述语言(HDL)为了描述FPGA中的逻辑电路,我们需要使用一种称为硬件描述语言(Hardware Description Language)的工具。

常用的硬件描述语言有Verilog和VHDL两种。

Verilog代码示例以下是一个使用Verilog描述的简单流水灯控制器的例子:module led_controller (input wire clk, // 时钟输入output wire [7:0] led // LED灯控制输出);reg [25:0] counter; // 计数器always @(posedge clk) beginif (counter == 0)led <= 8'h01; // 第一个灯亮else if (counter == 500000)led <= 8'h02; // 第二个灯亮else if (counter == 1000000)led <= 8'h04; // 第三个灯亮else if (counter == 1500000)led <= 8'h08; // 第四个灯亮else if (counter == 2000000)led <= 8'h10; // 第五个灯亮else if (counter == 2500000)led <= 8'h20; // 第六个灯亮else if (counter == 3000000)led <= 8'h40; // 第七个灯亮else if (counter == 3500000)led <= 8'h80; // 第八个灯亮counter <= counter + 1'b1;endendmodule在该代码中,我们定义了一个8位宽的led输出端口和一个26位宽的计数器。

fpga课程设计报告彩灯实验

fpga课程设计报告彩灯实验

fpga课程设计报告彩灯实验一、课程目标知识目标:1. 学生能理解FPGA的基本原理和结构,掌握彩灯实验相关的硬件描述语言(HDL)基础;2. 学生能描述数字电路设计的基本流程,并运用FPGA设计简单的数字电路;3. 学生掌握彩灯实验的原理,能够解释彩灯显示背后的逻辑控制过程。

技能目标:4. 学生能够运用所学知识,设计并实现一个基于FPGA的彩灯控制电路;5. 学生通过实际操作,提高问题解决能力和实验操作技能,包括电路调试和故障排查;6. 学生能够利用FPGA设计软件进行电路设计和仿真,并完成硬件的实现和测试。

情感态度价值观目标:7. 学生通过实验探究,培养对电子工程领域的兴趣,增强创新意识和实践能力;8. 学生在小组合作中,提升团队协作能力和沟通技巧,理解集体智慧的重要性;9. 学生能够在实验过程中,形成良好的工程伦理观念,认识到技术对社会发展的积极影响和责任。

二、教学内容本课程教学内容围绕FPGA的原理与应用,结合彩灯实验项目,进行以下组织和安排:1. FPGA基础知识:- 数字电路设计基础;- FPGA原理与结构;- 硬件描述语言(HDL)入门。

2. 彩灯实验原理与设计:- 彩灯显示原理;- FPGA在彩灯控制中的应用;- 彩灯控制电路设计流程。

3. 教学大纲与进度安排:- 第一周:FPGA基本原理学习,了解硬件描述语言;- 第二周:数字电路设计基础,学习彩灯显示原理;- 第三周:彩灯控制电路设计,进行FPGA编程与仿真;- 第四周:电路调试与测试,优化设计方案。

4. 教材关联内容:- 教材第3章:“数字电路设计基础”;- 教材第4章:“FPGA原理与结构”;- 教材第5章:“硬件描述语言(HDL)应用”;- 教材第6章:“数字电路设计实例”。

5. 实践环节:- 彩灯控制电路设计实践;- FPGA编程与仿真;- 电路调试与故障排查。

三、教学方法针对FPGA课程设计报告彩灯实验,采用以下多样化的教学方法,以激发学生的学习兴趣和主动性:1. 讲授法:- 对FPGA基本原理、数字电路设计基础和硬件描述语言(HDL)等理论知识进行系统讲解,为学生奠定扎实的理论基础。

小梅哥和你一起深入学习FPGA之点亮LED灯(上)

小梅哥和你一起深入学习FPGA之点亮LED灯(上)

小梅哥和你一起深入学习FPGA之点亮LED灯(上)关键词: FPGA , LED在之前更新的目录里面,并没有安排这个实验,第一个实验应该是独立按键的检测与消抖。

可是,当小梅哥来做按键消抖的实验时,才发现没有做基本的输出设备,因此按键检测的结果无法直观的展示出来。

也算是为后续实验做铺垫吧,第一个实验就安排成了点亮LED灯。

一、实验目的实现4个LED灯的亮灭控制二、实验原理LED灯的典型电路如下2-1所示,我们控制led灯的亮灭,实质就是去控制FPGA的IO输给LED负极一个低电平或者高电平。

从图中可知,我们给对应的led负极上一个低电平,就会有对应的电流通过电阻,流过led灯,于是LED灯就会被点亮;当给led负极一个高电平时,led两端电压相等,因此没有电流流过,led则呈熄灭状态。

图2-1 led灯典型电路三、硬件设计本实验的硬件电路即如图2-1所示,读者一看即懂,因此本节内容略。

四、架构设计虽然本实验只是一个简单的点亮led灯实验,整个实验代码不过四五行,但是为了遵循小梅哥一直喜欢的那种模块化的设计理念,因此本设计还是将led的驱动做成子模块的形式。

本实验由两个模块组成,分别为led驱动模块和顶层例化模块,可能看过其它开发板资料的同学会觉得这样反而增加了系统的复杂程度,但是,小梅哥如此设计必定有我的道理,图4-1为本实验的模块组织结构图4-1 led实验模块组织结构图由图可知本实验仅有n个输出端口,对应了n个led灯(为了代码的可移植性,这里并没有将led的个数限定死,而是采用了参数化的设计,因此,在实际使用过程中,就可根据实际不同的需要,自由的调整led的个数)。

在modelsim仿真过程中,所有信号必须要有复位初始值,因此复位信号(Rst_n)必不可少。

可能读者这里会发现,与我昨天所写的端口命名规范有出入。

如果按照我所出的规范中来命名的话,则应该将复位信号命名为Global_Rst,对于这个问题,暂时小梅哥不做深入解说,其实严格意义上来说,这里的这个Rst_n应该只能算是一个内部信号,该信号在实际工程应用中往往由锁相环产生。

fpga流水灯设计实验报告

fpga流水灯设计实验报告

fpga流水灯设计实验报告一、实验目的通过此实验进一步了解,熟悉FPGA开发软件的使用方法及,的编程方法:学习简单时序电路的设计。

二、实验原理和内容实验内容:在实验板上实现LED1~LED8发光二极管流水灯显示实验原理:在LED1~LED8引脚上周期性地输出流水数据,如原来输出的数据是则表示点亮LED1,LED2流水一次后,输出数据应该为,而此时则应点亮LED1-LED3三个LED发光二极管,这样就可以实现LED流水灯,为了观察方便,流水速率最好在2Hz左右。

在QuickSOPC核心板上有48MHz的标准时钟源,该时钟脉冲CLOCK与芯片的28脚相连,为了产生2Hz的时钟脉冲,在此调用了一个分频模块intdiv模块,通过修改分频系数来改变输出频率,int-div模块是一个占空比为50%的任意整数分频器。

三、实验步骤1、启动QuartusⅡ建立一个空白工程,然后命名为。

2、新建VerilogHDL源程序文件,输入程序代码并保存,然后进行综合编译。

若在编译过程中发现错误,则找出并更正错误,直至编译成功为止。

3、从设计文件创建模块,由生成名为的模块符号文件。

4、将光盘中EDA-Component目录下的和拷贝到工程目录。

5、新建图形设计文件命名为并保存。

在空白处双击鼠标左键,在Symbol对话框左上角的中,分别将project下的ledwater和int-div模块放在图形文件中,加入输入,输出引脚,双击各引脚符号进行引脚命名。

将与ledwater模块led[7.0]连接的引脚命名为led[7..0],与int-div模块clock连接的引脚命名为clock,int-div模块的clk-out与ledwater模块的clk相连接。

6、选择目标器件并对相应的引脚进行锁定,在这里所选择的器件为Altera公司Cyclone系列的EPIC12Q240C8芯片,引脚锁定方法见下表,将未使用的引脚设置为三态输入。

FPGA入门系列实验教程——按键消抖控制LED亮灭

FPGA入门系列实验教程——按键消抖控制LED亮灭

FPGA入门系列实验教程——按键消抖控制LED亮灭1.实验任务实现按键控制LED亮灭。

通过这个实验,掌握采用Verilog HDL语言编程实现按键控制LED亮灭及按键消抖方法。

2.实验环境硬件实验环境为艾米电子工作室型号EP2C8Q208C8增强版开发套件。

软件实验环境为Quartus II8.1开发软件。

3.实验原理当独立按键key1按下后,相应的LED被点亮;再次按下后,LED做翻转输出,即LED熄灭,从而实现按键控制LED亮灭。

本实验对按键进行了消抖处理。

作为机械开关的按键,操作时,机械触点的弹性及电压突跳等原因,在触点闭合或开启的瞬间会出现电压抖动,实际应用中如果不进行处理将会造成误触发。

按键去抖动的关键在于提取稳定的低电平状态,滤除前沿、后沿抖动毛刺。

按键消抖处理一般有硬件和软件两种方法。

软件消抖是检测到有触发后,延时一段时间后再检测触发状态,如果与之前检测到的状态相同,则认为有按键按下;如果没有则认为是误触发。

硬件就是加去抖电路。

4.实验程序module key_debounce(rst_n,clk,key,led);input rst_n;input clk;input key;output led;//通过降采样对key的输入做低通滤波,将其高频分量滤除,得到low_sw值reg[17:0]cnt;always@(posedge clk)if(!rst_n)cnt<=18'd0;elsecnt<=cnt+1'b1;wire sample_pulse=cnt==18'h3ffff;reg low_sw;always@(posedge clk)if(!rst_n)low_sw<=1'b1;else if(sample_pulse)low_sw<=key;//在整个low_sw(active_low)有效过程中取一个控制量作为led的控制信号//本实例中使用low_sw的下降沿reg low_sw_r;//将low_sw信号锁存一个时钟周期,延时不是真的“锁存”always@(posedge clk)low_sw_r<=low_sw;wire led_ctrl=low_sw_r&(!low_sw);reg led;always@(posedge clk or negedge rst_n)if(!rst_n)led<=1'b0;else if(led_ctrl)led<=~led;endmodule5.实验步骤(1)建立新工程项目:打开Quartus II软件,进入集成开发环境,点击File→New project wizard建立一个工程项目key_debounce。

FPGA实验一 Quartus II的使用及点亮LED灯

FPGA实验一 Quartus II的使用及点亮LED灯

图2.1 LED灯电路3.点击图2.1.2中的【N e xt】进入工作目录,工程名的设定对话框如图2.1.3所示。

第一个输入框为工程目录输入框,用户可以输入如:FPGA等工作路径来设定工程的目录,设定好后,所有的生成文件将放入这个工作目录。

的哥输入框为工程名称输入框,第三个输入框位顶层实体名称输入框。

用户可以设定E X P1,一般情况下工程名称与实体名称相同。

使用者也可以根据自己的实际情况来设定。

4.点击【Next】,进入下一个设定对话框,按默认选项直接点击【Next】进行器件选择对话框,如图2.1.4-A和图2.1.4-B所示。

这里我们选择Cyclone II系列芯片EP2C5T144C8。

首先在对话框的左上方的Family下拉菜单中选取Cyclone II,在中间右边的Speed grade下拉菜单中选取8,在左下方的Availa ble devices中选取EP2C5T144C8,点击【Next】完成器件的选取,进入EDA TOOL设定界面如图2.1.5所示。

5.按默认选项,点击【Next】出现新建工程以前所有的设定信息,如图2.1.6所示,点击Finish完成新建工程的建立,如图2.1.7所示。

6.点击File>New,新建一个VHDL文件。

如图2.1.8所示。

7.点击OK,将VHDL程序写入后,如图2.1.9所示,并点击File>Save,无需做任何更改,点击OK即可。

如图2.1.10所示。

8.按照自己的想法,在新建的VHDL文件中编写VHDL程序。

9.代码书写结束后,选择Processing>Start Compilation对编写的代码进行编译,直到编译通过。

10.编译通过后,对试验中用到的LED进行管脚绑定。

选择Assign ments> Pins,会出现管脚分配对话框,如图2.1.11所示。

11.首先选择对应的引脚,然后在l o c a t i o n中按表2.1-1中端口引脚对应关系输入V H D L设计中对应的端口名称引脚号,如图2.1.12所示。

FPGA开发流程简介——LED闪烁例程

FPGA开发流程简介——LED闪烁例程

图 15
图 16
图 17 至此,我们从原理图开始定义一个模块端口和功能,到用 verilog 具体实现这个模块功能,整个过程是一个典型 的自顶向下的设计方法。接下来,我们要对 divider 模块进行行为仿真(Behavioral Simulation) 。行为仿真需要一个 test bench(测试平台) ,虽然 ISE 提供了专门的 test bench 文件类型(test bench waveform) ,但是我们常用自己编 写一个 testbench 来做仿真。具体方法是在 Source 窗口 Source 标签页内右击选择 New Source,添加一个 verilog 文 件,该文件没有端口,为顶层模块,在模块内部实例化前面设计好的 divider 模块并初始化其端口,以及编写测试向 量,利用系统函数控制和显示仿真流程。如图 18、19、20
图 36 至此,我们已经用前仿真验证了 divider 模块的正确性。我们继续添加其他模块,关闭 ModelSim,回到 ISE。在 Source 窗口的 Source 标签页上部的 Sources for 下拉列表框中选择 Synthesis/Implementation。接着在 Source 标签页 内右击,在弹出菜单中选择 New Source,选择 IP 文件类型。所谓的 IP 是指具有 intellectual property 的器件/模 块/内核等等,针对每一款芯片,厂商都会提供一堆能用于该芯片设计的 IP,方便用户的开发。在这里我们将利用 ISE 集成的 IP 添加 Xilinx FPGA 内部的一个 DCM 模块到设计中来。DCM 模块是一个数字时钟管理模块,能够实现 输出时钟对输入时钟的相位锁定、频率变换、消除延迟等等功能。我们的设计中,用 DCM 模块对输入的晶振时钟 进行分频。在 Source 窗口的 Source 标签页中右击 led_demo.sch,在弹出菜单中选择 New Source,弹出如图 37 所示对话框,单击 Next,如图 38。

FPGA入门系列实验教程——按键控制LED亮灭

FPGA入门系列实验教程——按键控制LED亮灭

艾米电子工作室FPGA入门系列实验教程FPGA入门系列实验教程V1.0前言目前市场销售FPGA开发板的厂商很多,但大多只提供些简单的代码,没有详尽的文档和教程提供给初学者。

经验表明,很多学生在学习FPGA设计技术的过程中,虽然刚开始学习热情很高,但真正坚持下来一直到“学会”的却寥寥无几,除了学生个人毅力的因素外,另外一个更主要的原因就是所选的开发板缺少配套的说明文档和手把手系列的入门教程。

原本FPGA的学习门槛相对于单片机来说就高了不少,再加上缺少手把手系列教程资料,这就给初学者学习FPGA增添了更多的困难,很多初学者因为找不到入门的方法而渐渐失去了学习FPGA的兴趣和信心。

作者从接著到系统学习FPGA有两年多的时间了,学习FPGA的时间不长,期间因为没有专业的老师指导,自己摸索学习FPGA走了很多的弯路。

有过问题迎刃而解的快乐,也有过苦苦寻求结果和答案的痛苦历程,回想起自己学习FPGA的历程,从开始的茫然,到后来的疯狂看书,购买开发板,在开发板上练习各种FPGA实例,到最后能独立完成项目,一路走来,感受颇多。

发觉学习FPGA只要选择正确的方法是有捷径可走的,有很多人学习FPGA很长时间,因为没有找到正确的方法还是停留在入门阶段。

针对现状,作者从初学者的角度出发,结合作者学习FPGA的经验和亲身体会,遵循“宁可啰嗦一点,也不放过细节”的原则编写了详尽的实验教程作为艾米电子工作室开发套件的配套教程使用,主要面向FPGA初学者。

FPGA的学习只有通过大量的操作与实践才能很好并快速的掌握。

为此本实验教程从点亮LED 灯写起,深入浅出,以图文并茂的方式由易到难地列举了很多实例,采用手把手、Step by Step的方式让初学者以最快的方式掌握FPGA技术的开发流程以及Quartus II软件的使用,从而激起初学者学习FPGA的兴趣。

在教程中作者采用“授人以渔”的方式,努力做到不仅讲述怎样进行试验,而且分析为什么这样做,以便初学者深刻理解并快速掌握FPGA的学习方法。

FPGA基础教程系列 -- 玩转LED

FPGA基础教程系列 -- 玩转LED

FPGA基础教程系列电子工程世界 EE_FPGA基础教程系列玩转LEDV1.0作者:xieqiang整理: chenzhuflyQQ: 368860522011‐3‐14电子工程世界 EE_FPGA基础教程系列Revision HistoryVersion Author Description Date1.0 chenzhufly EE_FPGA 基础教程‐‐‐‐ 玩转LEDKeywords:Abstract:本文举例分析点亮LED的Verilog程序,同时讲了计数器和流水灯的概念。

Table of Contents1. 剧情回放 (4)2. 玩转LED (4)2.1 硬件连接 (4)2.2 程序编写 (4)2.3 程序简介 (5)2.4 换个玩法 (7)2.5 点灯进阶 (7)2.6 答疑解惑 (9)3. 总结 (10)1. 剧情回放话说上次在建立的第一个EE_FPGA工程的时候,我们使用了一个点亮LED 的范例,这里我们继续点亮LED这个话题。

2. 玩转LED2.1 硬件连接首先,我们得打开EE_FPGA的硬件手册,找到LED部分的原理图。

如下图所示,我们看到,LED的右端是连着上拉电阻的VDD3.3V高电平,左端则连着FPGA的管脚pin_31-35。

那我们想,假若我们的FPGA管脚输出的是高电平即3.3V,那么左右两端的电压相当,就不会有电流流过LED,也就不会发光了。

如果FPGA管脚输出的是低电平,那就有电流从LED流过,LED就点亮了。

原理就是这么简单。

2.2 程序编写一般FPGA的核心电平是1.2V,管脚电平是3.3V,所以,要想点亮哪个LED,只要给连接的那个管脚赋0,不点亮赋1就可以了。

上次点亮四个LED的程序我们是这样写的:module led (clk,rst_n,led);input clk;input rst_n;output[3:0] led;reg[3:0] led_r;always @(posedge clk or negedge rst_n)beginif(!rst_n)led_r <= 4'b1111;elseled_r <= 4'b0; // led是一端接上拉电阻,输入低电平点亮endassign led = led_r;endmodule2.3 程序简介这里我就讲点Verilog的经验之谈,有不妥的地方还请大家多指正。

小梅哥和你一起深入学习FPGA之点亮LED灯(下)

小梅哥和你一起深入学习FPGA之点亮LED灯(下)
第2页共3页
手头暂无开发板,板级验证略。 十、 总结 可能无数初学,又看过其它一些资料的学生会对小梅哥的这种组织方式 感觉不太习惯,认为原来一个代码模块就能搞定的事儿被我硬生生拆成 了两个,增强了系统的复杂性。其实,我这里主要是强调了一种建模的 思想,我们所做的模块一定要具有灵便性和通用性,当其它设计中需要 用到该外设时,只需要关怀其内部端口就行了,在顶层例化时只需要将 对应信号接到该端口上就能实现功能了,不用再特地为了特定应用再写 一次。目前系统容易,可能大家还看不出这种方式的优势,随着以后的 设计越来越复杂,大家就能很显然的看到这种设计方式的优势所在了。
小梅哥和你一起深入学习 FPGA 之点亮 LED 灯(下)
七、 测试平台设计 本试验主要对的输出和输入与复位的关系举行测试,通过仿真,即可验 证设计的正确性和合理性。相关 testbench 的代码如下: 以下是代码片段: `timescale 1ns/1ns module LED_Driver_tb; reg Rst_n; reg [3:0] Sig; wire [3:0] Led; LED_Driver ( /*参数例化*/ .Width (4) )
LED_Driver_inst(/*端口例化*/ .Rst_n(Rst_n), .Sig(Sig),/*OFF ON ON OFF*/ .Led(Led) ); initial begin Rst_n = 0; Sig = 4'b1010; 100; Rst_n = 1; 40 Sig = 4'b0001; 40 Sig = 4'b0010; 40 Sig = 4'b0011; 40 Sig = 4'b010Sig = 4'b0101; 40 Sig = 4'b0110; 40 Sig = 4'b0111; 40 Sig = 4'b1000; 40 Sig = 4'b1001; 40 Sig = 4'b1010; 40 Sig = 4'b1011; 40 Sig = 4'b1100; 40 Sig = 4'b1101; 40 Sig = 4'b1110; 40 Sig = 4'b1111; 40; $stop; end
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

FPGA入门系列实验教程——点亮LED
1.实验任务
点亮发光二极管。

通过这个实验,熟悉并掌握CPLD/FPGA开发软件Quartus II的使用方法和开发流程以及Verilog HDL的编程方法。

2.实验环境
硬件实验环境为艾米电子工作室型号EP2C5T144开发套件。

软件实验环境为Quartus II8.1开发软件。

3.实验原理
FPGA器件同单片机一样,为用户提供了许多灵活的独立的输入/输出I/O口(单元)。

FPGA每个I/O口可以配置为输入、输出、双向、集电极开路和三态门等各种组态。

作为输出口时,FPGA的I/O口可以吸收最大为24mA的电流,可以直接驱动发光二极管LED等器件。

图1.1为8个发光二极管硬件原理图,本原理图对应艾米电子工作室型号为EP2C5T144FPGA开发板及接口板。

通过原理图可知如果要点亮这八个LED,所以只要正确分配并锁定引脚后,在相应的引脚上输出相应高电平“1”,就可实现点亮该发光二极管的功能。

本工作室开发板均采用输出“1”点亮LED的模式,以后就不再另作说明。

图1.1发光二极管LED硬件原理图
4.实验程序(1)利用连续赋值assign 语句来实现(文件名led.v )
module led1(led);//模块名led
output[7:0]led;//定义输出端口
assign led=8'b10101010;//输出0x AA
endmodule
(2)利用过程赋值语句来实现(文件名led1.v )
module led1(led);//模块名led1
output[7:0]led;//定义输出端口
reg[7:0]led;
always
begin
led=8'b10101010;//输出0xAA
end
endmodule
5.实验步骤
1)打开Quartus II 软件并建立工程
(1)通过桌面上的快捷方式打开Quartus II 8.1软件,进入集成开发环境,软件界面如图1.2所示。

图1.2Quartus II
软件界面
工程栏资源管理器编译状态显示
信息显示窗
我们首先简单了解一下各部分的作用:
标题栏:显示当前工程的路径和程序的名称。

菜单栏:主要包括文件(File)、编辑(Edit)、视图(View)、工程(Project)、资源分配(Assignments)、操作(Processing)、工具(Tools)、
窗口(Window)、和帮助(Help)、9个下拉菜单组成。

工具栏:包含常用命令的快捷图标。

资源管理窗:显示当前工程中所有相关的文件。

工程工作区:对不同的工程文件进行各种操作。

编译状态显示窗:显示模块综合、布局布线过程和时间。

信息显示窗:显示软件综合、布局布线过程中的信息。

(2)在图1.2中选择File→New project wizard来新建一个工程。

新建工程向导说明对话框如图1.3所示。

图1.3新建工程向导说明对话框
(3)在图1.3中单击Next进入如图1.4所示对话框
保存工程路径
工程名称
顶层实体名
图1.4新建工程路径、名称、顶层实体指定对话框
注意:文件夹所在路径名和文件夹名不能用中文、空格和括号,可以用下划线,最好不要以数字开头。

建议使用顶层文件的实体名作为工程名,即工程名和顶层文件的实体名保持一致。

(4)在图1.4中单击Next进入如图1.5所示对话框
图1.5新建工程添加文件对话框
(5)在图1.5中单击Next进入如图1.6所示对话框。

在该对话框中指定目标器件,这里我们选择的是艾米电子工作室开发套件用的Cyclone II系列的EP2C5T144C8
图1.6新建工程器件选择对话框
(6)指定完器件后,单击Next 进入如图1.7所示对话框。

本实验利用的集成环境开发,不使用第三方的EDA 工具,采用默认设置。

元件系列选择
具体元器件选择
图1.7新建工程EDA工具设置对话框
(7)单击图1.7中的Next进入如图1.8所示对话框。

从该对话框中,可以看到工程配置信息报告。

单击Finish完成新工程的建立。

图1.8新建工程配置信息报告对话框
2)建立文本编辑文件
(1)在Quartus II主界面中选择File→New打开新建文件对话框如图1.9所示。

图1.9新建文件对话框
(2)选择VerilogHDL File点击OK建立一个空的VerilogHDL文件,将实验程序清单中的程序输入到文件中,然后在在Quartus II主界面中选择File→Save As 改名为led.v并保存。

(3)选择图1.10工具栏中的
图1.10led.v文件编译对话框
3)选择器件型号及器件和引脚的其他设置
(1)选择器件型号
每种型号的FPGA芯片的引脚可能都不相同,因此在进行引脚分配之前都应选择相应的目标FPGA芯片型号。

这一步在新建工程中已经完成,这里目的是初学者了解,在Quartus II工程创建好后仍然可以选择并修改器件型号。

在Quartus II软件主界面下选择Assignments→Device打开如图1.11所示对话框。

在该对话
框中指定所需的目标器件型号。

图1.11器件选择对话框
(2)器件和引脚的其他设置
单击图1.11中的Device and Options打开Device and Options对话框,在该对话框中选择Configuration选项卡,并按图1.12所示进行设置,即采用串行配置器件EPCS1的主动配置方式。

在Device and Options对话框中选择Unused Pins
选项卡对未使用的引脚按照图1.13所示设置为高阻输入。

配置方式图1.12Configuration 设置
未定义引脚定义
为三态输入
图1.13未用引脚设置
4)分配FPGA引脚
(1)在Quartus II软件主页面下,选择Assignments→Pins或选择工具栏上
按钮启动编译,直到出现“Full Compilation Report”对话框,点击OK即可。

6)波形仿真
由于本次试验比较简单,波形仿真将在后面实验详细讲解。

7)下载设计程序到目标FPGA
(1)在Quartus II主页面下,选择Tools→Pragrammer
或点击工具栏上的
开始使用配置文件对FPGA进行配置,Progress 框中显示配置进度,配置进度条为100%时说明配置成功,即可观察实验现象。

6.实验现象
第一个实验终于完成了,看到实验板上的8个LED灯间隔点亮,是不是特有成就感!只要动手,一切都这么简单!让我们进行下面的实验吧!以后
的实验将会更精彩!
实验教程配套开发板一览:
了解详情登陆淘宝店铺:
艾米电子淘宝店:/。

相关文档
最新文档