显示页面 讨论 修订记录 反向链接 本页面只读。您可以查看源文件,但不能更改它。如果您觉得这是系统错误,请联系管理员。 ## 点亮LED 就像软件编程里的“Hello World”,点灯是FPGA学习的第一步,不要小瞧这么一颗小小的灯,点灯的方式可以有多种。在本节,我们通过几个点灯的程序达到以下的目标: - 体验LED的工作原理; - 了解Verilog代码的结构 - 体验FPGA设计从创建工程 --》 输入代码 --》 逻辑综合 --》 分配管脚 --》 生成可下载的JED文件 --》 配置FPGA整个过程(理论知识参见[[fpga_design_tool|FPGA设计流程]]) 在本实例中,我们以Web IDE为例,同样的示例也可以通过Lattice的官方FPGA设计工具[[Diamond]]或Intel的官方设计工具[[quartus_prime]]来实现。 ### 1. 硬件说明 在这个实验中,我们主要用到小脚丫FPGA开发板上的以下几个外设: * 板上有8个LED灯,可以选用其中的任何一个做单LED的实验 \\ {{ :led.png?600 |}} <WRAP centeralign> 这是开发板上的8个红色LED,LED1~8信号连接到FPGA的引脚,作为FPGA输出信号控制。当FPGA输出低电平时LED变亮,当FPGA输出高电平时LED熄灭。</WRAP> * 板上有4个按键和4个开关,用做输入控制 \\ {{ ::button.png?600 |}} <WRAP centeralign> 这是开发板上4个按键和4个开关,Key1~4是按键控制信号,SW1~4是开关控制信号,都连接到FPGA的引脚,作为FPGA的输入信号。当按键断开时,FPGA输入为高电平,当按键按下时,FPGA输入为低电平;当开关断开(OFF)时,FPGA输入为低电平,当开关合上(ON)时,FPGA输入为高电平。</WRAP> 所以我们可以用开关或者按键来控制LED的亮灭。 \\ ### 2. 用最简单Verilog代码点亮一颗LED 根据Web IDE的使用流程介绍,我们先创建一个叫one_led_onoff的工程,并在该工程里面创建一个叫one_led_on.v的代码(代码名字跟工程的名字不需要一致): <code verilog> module one_led_on(led); output led; assign led = 1'b0; endmodule </code> 这段代码可以说是最简单的一段[[Verilog]]程序了,从这段程序中可以看出Verilog语言的基本结构 * 以module(模块)开始,endmodule结束的一段程序为描述某一项功能的基本单元,类似软件里面的子程序; * 每个模块都有其名字,建议用贴切含义的英文来命名(比如本示例里面的one_led_on),可读性强,也不会出现莫名其妙的编译错误; * 每个模块都有用()包裹起来的端口 - 跟其它模块或FPGA的外围电路打交道的输入输出信号,在本示例只用了一个端口led,因此()中只有一个端口的名字; * 对每一个端口的属性进行定义 - 是输入还是输出,是导线wire类型,还是存储器reg类型,在这里只用了一个输出端口led,对其属性“output”进行了定义,指定其为输出信号; * 定义完端口,就开始逻辑的主体,在这里也很简单,只是让led这个管脚信号为低电平,使用assign语句 - assign led = 1'b0, 1’b0表示为一位的数字,而且值为“0” 点击Web IDE的第二个功能键“逻辑综合”,系统会自动将你写好的Verilog代码进行综合,如果没有语法错误,则给你一个Success的信息,你就可以走到下一步 - “管脚”了。 我们的Web IDE会根据你写好的module自动提取输入输出管脚的名字,你只要使用鼠标,通过图形化的界面将这些module里的端口信号的名字映射到相应的管脚上即可,在这里我们将led映射到板子上的第三个led,鼠标指向led3,其右侧会弹出一个向下的箭头,点击该箭头,就可以看到led的名字了(如果多个端口还没有分配管脚,这些未分配的端口信号的名字会出现在列表中),选中led,完成映射 {{ :oneled_on.jpg?800 |}} <WRAP centeralign> 在“管脚分配”里将第三颗LED配置为亮 (ON)</WRAP> 点击“FPGA映射”,系统会自动根据你分配好的管脚执行,生成JED文件,如果没有错误,会列出一堆的信息后,告诉你生成了jed的文件,在这段信息中也会有详细的资源使用报告,这些资源报告的信息也是很重要的,未完成同样一个功能,不同的人写出来的逻辑占用的资源也是不同的。 这时候您可以点击“文件下载”,选择第二个按钮“下载JED文件”,鼠标右键 --》另存为。。。指向到StepFPGA的盘即可完成对FPGA的下载编程。 {{ :one_led_on.jpg?300 |}} ### 2. Verilog代码 <code verilog> // ******************************************************************** // >>>>>>>>>>>>>>>>>>>>>>>>> COPYRIGHT NOTICE <<<<<<<<<<<<<<<<<<<<<<<<< // ******************************************************************** // File name : LED.v // Module name : LED // Author : STEP // Description : control LED // Web : www.stepfpga.com // // -------------------------------------------------------------------- // Code Revision History : // -------------------------------------------------------------------- // Version: |Mod. Date: |Changes Made: // V1.0 |2017/03/02 |Initial ver // -------------------------------------------------------------------- // Module Function:利用按键和开关的状态来控制LED灯的亮灭。 module LED (key,sw,led); input [3:0] key; //按键输入信号 input [3:0] sw; //开关输入信号 output [7:0] led; //输出信号到LED assign led = {key,sw}; //assign连续赋值。大括号是拼接符,表示把key和sw拼接组成一个新的8位数赋值给led endmodule </code> \\ \\ ### 3. 引脚分配 综合(synthesize)完成之后一定要配置FPGA的引脚到相应的外设,这样下载FPGA程序后才能达到我们想要的效果。 \\ {{led1.png?300|}} {{button1.png?300|}} \\ ### 4. 小结 下载完程序后就可以实现按键开关控制LED灯的亮灭。了解小脚丫STEP-MXO2 V2上的外设LED、按键和开关的使用。如果你对Diamond软件的使用不了解,请参考这里:[[lattice_diamond的使用|Diamond的使用]]。