开关控制发光二极管

项目二:使用开关控制led

这个项目演示了如何使用Verilog HDL与FPGA板。在本项目中,您将使用FPGA板上的一个开关来打开领导.在此过程中,您将学习编写Verilog代码的第一步,并观察开关如何在FPGA板上控制led。你不需要对数字工程有真正透彻的了解来完成这个项目;然而,如果你想知道数字电路的内部工作,更多的信息可以在项目1

先决条件

  • 安装Xilinx®ISE WebPACK™。
  • 设置FPGA板。

软件

硬件


背景知识


基本输入/输出设备

印刷电路板

连接器

集成电路

引入Verilog

Verilog:第一个例子

数字电路包括电源、器件和导通网。有些网为电路提供来自“外部世界”的输入,而另一些网则相反地提供电路到外部世界的信息。在电路和外界之间提供接口的网称为端口。

电路需要输入设备来产生输入信号。输入设备可以采用多种形式,其中有键盘(如PC上的)、按钮和开关。电路也需要输出设备来将它们的状态传达给用户。在这个项目中,一个开关被用作输入设备和一个领导作为输出设备。

我们将构建的数字电路称为“led_sw”,如下图1所示。在这个项目中创建的电路将在FPGA板内实现。该板有一个输入端口叫“sw”,它接收来自电路外部开关的输入信号和一个输出端口叫“led”,它驱动外部领导电路中。“led_sw”是一个简单的电路,它绕过输入端口上的信号,直接将信息发送到输出端口。你可以把它看成是网络“sw”和网络“led”之间的直接有线连接。该电路将使用Verilog HDL实现。在不同的FPGA板上,开关和led连接到FPGA芯片上的不同引脚上。因此,需要一个用户约束文件(UCF)来将电路的输入输出网络映射到FPGA芯片上的物理引脚位置。以Nexys 3为例,SW0 (Slide Switch 0)连接FPGA引脚T10和FPGA引脚U16驱动器领导0 (LD0)。

当您将开关滑动到ON位置时,将在FPGA引脚T10上放置一个高电压,该电压映射到电路“led_sw”的输入端口。然后数字电路将信号传输到输出端口领导,连接到FPGA引脚U16。输出端口“led”上的高电压将导致节点a和节点b之间的电压降。这个电压降将驱动电流通过领导,它将照亮领导并通知用户开关已打开。

图1所示。数字电路图。

过程

1.创建一个新项目

  1. 创建一个Verilog模块(可以通过右侧提供的链接访问),并将其命名为“led sw”。
  2. 创建模块后,将出现一个输入和输出设置页面。
    • 添加“sw”作为输入;忽略“总线”、“MSB”和“LSB”。
    • 添加“led”作为输出;忽略“总线”、“MSB”和“LSB”。

2.用Verilog HDL语言设计电路

在步骤1中,Xilinx工具已生成模板,如下所示:

模块led_sw输出led,输入sw

在这段代码中,您已经演示了网络“led”是输出,而“sw”是输入。现在是实现电路的时候了。此时,我们将在Verilog中使用“assign”语句将输出端口“led”连接到输入端口“sw”。使用“assign”语句的目的是,当一个信号被放在输入网络上时,它将被直接传输到输出端口。

分配了西南

最后,必须始终确保以“endmodule”代码结束模块。当你完成了这个项目文件,它应该是这样的:

的时间表1纳秒/1 ps模块led_sw输出led,输入sw分配了西南endmodule

3.创建用户约束文件(UCF)

电路已经实现,但Xilinx工具仍然需要知道输入和输出端口映射到FPGA上的物理引脚。UCF文件将提供用于此信息的工具。请查看下面的代码部分,以找到与您的板对应的UCF文件,因为每个板的引脚位置不同:

在下4

“西南”疯狂的U9“领导”疯狂的T8

在下3

“西南”疯狂的T10“领导”疯狂的U16

在下2 - 500

“西南”疯狂的G18“领导”疯狂的J14

在下2 - 1200

“西南”疯狂的G18“领导”疯狂的J14

Basys 2

“西南”疯狂的“领导”疯狂的M5

您可以从FPGA电路板的原理图中找到所需的位置,或者您可以从Digilent网站下载电路板的主UCF,并复制此步骤的相应线路。

4.生成位文件并在FPGA板上测试

双击“Generate Programming File”生成位文件并下载到FPGA板。在编写电路板程序后,您可以在电路板上滑动SW0来打开LD0。


测试你的知识

现在你已经完成了这个项目,尝试这些修改:

  • 在这个项目中,我们只用一个开关来控制一个领导.你可以稍微修改一下代码,使用板上的所有8个开关来控制8个led。为此,您可以将SW0分配给控制LD0,将SW1分配给控制LD1,等等。
  • 现在想一个方法来修改你的项目来改变哪个开关控制哪个领导.例如,使SW0控制LD6。