FPGA——多路选择器实现按键控制LED灯的亮灭

文章目录

  • 前言
  • 一、多路选择器
  • 二、绘制模块框图及波形图
  • 三、Verilog HDL代码及测试代码
  • 四、创建工程
  • 五、仿真
  • 六、上板验证
    • 1、分配引脚
    • 2、烧录
  • 七、效果演示
  • 八、总结


前言

  • 软件:Quartus Prime Standard 18.0
  • 仿真软件:modelsim 10.5
  • 代码编写软件:VSCode
  • 波形绘制工具:Visio 2013
  • 硬件:小脚丫 Altera MAX10

期望效果:
我们希望通过一个按键对输入LED的信号进行选择,在当我们摁下key3时,即当key3为低信号时,LED选择Key2为LED的信号,反之则取key1的信号进行参考。


一、多路选择器

多路选择器是数据选择器的别称,在多路数据传输中,能够根据需要将其中任一路选择出来的电路,叫做数据选择器,也称多路选择器或多路开关。是一种简单的组合逻辑电路。

  • 组合逻辑:

组合逻辑实际是VerilogHDL设计中的一个重要组成部分。从电路本质上讲,组合逻辑电路的特点是输出信号只是当前时刻输入信号的函数,与其他时刻的输入状态无关,无存储电路,也没有反馈电路。

二、绘制模块框图及波形图

在工程开始时,新建一个项目文件,里面新建四个文件夹,分别为:
prj(工程文件)、rtl(.v文件)、sim(仿真测试文件)、doc(波形绘制文件)

  • 添加形状
    FPGA——多路选择器实现按键控制LED灯的亮灭_第1张图片
    FPGA——多路选择器实现按键控制LED灯的亮灭_第2张图片

  • 模块框图
    FPGA——多路选择器实现按键控制LED灯的亮灭_第3张图片

  • 波形图

在sel为0时,Out输出信号是in_2波形、反之为in_1波形。

FPGA——多路选择器实现按键控制LED灯的亮灭_第4张图片

三、Verilog HDL代码及测试代码

在rtl文件夹里创建一个mus2_1.v的文件,定义的模块名需要与文件名一致。此时双击打开VSCode进行代码编写。

module mus2_1(
    input wire  in_1,
    input wire in_2,
    input wire sel,//选通信号
    output reg out
);
always @(*)//组合逻辑进行阻塞赋值
    if(sel == 1'b1)
    out=in_1;
    else
    out =in_2;

endmodule

在sim文件夹里新建测试文件tb_mus2_1.v

`timescale 1ns/1ns //时间尺度
module tb_mus2_1();
reg in_1;
reg in_2;
reg sel;
wire out;
initial begin //初始化变量,上电后只执行一次
    in_1<=1'b0;
    in_2<=1'b0;
    sel <=1'b0;
end  
//设置随机波形图
always #10 in_1<={$random}%2;
always #10 in_2<={$random}%2;
always #10 sel<={$random}%2;


mus2_1   mus2_1_inst  ( //实例化模块
     .in_1(in_1),
     .in_2(in_2),
     .sel(sel),//选通信号
     .out(out)
);
endmodule

四、创建工程

  • 打开quartus,new一个工程

FPGA——多路选择器实现按键控制LED灯的亮灭_第5张图片

  • 点击next
    FPGA——多路选择器实现按键控制LED灯的亮灭_第6张图片

  • 选择工程路径,选择到前面我们创建的prj文件夹下。填写工程名,这里尽量选择与我们的.v文件一致的名字—mus2_1。
    FPGA——多路选择器实现按键控制LED灯的亮灭_第7张图片

  • 这里我们不选择模板,直接next。
    FPGA——多路选择器实现按键控制LED灯的亮灭_第8张图片

  • 文件我们后面再添加,先next。

FPGA——多路选择器实现按键控制LED灯的亮灭_第9张图片

  • 对板子进行选型,这里我使用的是Altera max10,如果你用的是别的板子需要到英特尔的官网下载对应quartus版本的器件库,即使同样是max 10,如果quartus的版本不一样,器件库也不一样。需要注意。
    FPGA——多路选择器实现按键控制LED灯的亮灭_第10张图片
  • 选择仿真软件及语言
    FPGA——多路选择器实现按键控制LED灯的亮灭_第11张图片
  • 检查配置是否正确,然后点击finish完成工程创建。
    FPGA——多路选择器实现按键控制LED灯的亮灭_第12张图片
  • 添加源文件和测试文件

FPGA——多路选择器实现按键控制LED灯的亮灭_第13张图片

  • 双击
    FPGA——多路选择器实现按键控制LED灯的亮灭_第14张图片

  • 选择文件进行添加
    FPGA——多路选择器实现按键控制LED灯的亮灭_第15张图片

  • 将测试文件添加到仿真中

FPGA——多路选择器实现按键控制LED灯的亮灭_第16张图片
FPGA——多路选择器实现按键控制LED灯的亮灭_第17张图片
FPGA——多路选择器实现按键控制LED灯的亮灭_第18张图片
FPGA——多路选择器实现按键控制LED灯的亮灭_第19张图片

在上图的1下,选择测试文件,在2处填写测试文件名。

五、仿真

点击下方自动打开仿真软件

FPGA——多路选择器实现按键控制LED灯的亮灭_第20张图片

  • 仿真波形图

FPGA——多路选择器实现按键控制LED灯的亮灭_第21张图片

解释:在标线所处位置sel为1时,输出电平应为in_1的信号为0,此时out也为0。仿真成功!如何进行仿真的具体步骤这里不进行介绍。

六、上板验证

1、分配引脚

根据厂商提供的引脚分配图进行分配

FPGA——多路选择器实现按键控制LED灯的亮灭_第22张图片

  • 设置引脚
    FPGA——多路选择器实现按键控制LED灯的亮灭_第23张图片

  • 依次填写对应的引脚
    FPGA——多路选择器实现按键控制LED灯的亮灭_第24张图片

这里key1控制in_1信号,key2控制in_2信号,key3作为选通信号。初始时,三个按键均未摁下,key3为高电平,输出信号为key1,此时摁下key1时,key1处低电平灯亮。反之,摁下key3,选通信号选择的是key2信号,此时摁下key2,灯亮。总结,就是摁下key1灯亮,或者摁下key2+key3灯亮。

2、烧录

FPGA——多路选择器实现按键控制LED灯的亮灭_第25张图片

  • 选择USB

FPGA——多路选择器实现按键控制LED灯的亮灭_第26张图片

这里如果没有检测到USB-Blaster,有两种情况一是你的数据线不支持数据的传输、二是你驱动没有更新,搜一下进行更新即可识别。

  • 点击添加文件,在prj文件夹下寻找outputfiles文件夹下的sof文件
    FPGA——多路选择器实现按键控制LED灯的亮灭_第27张图片
  • 点击start开始烧录在,右边是进度条
    FPGA——多路选择器实现按键控制LED灯的亮灭_第28张图片

七、效果演示

keyofLED


八、总结

这是第一次实物操作fpga板子,感觉很棒,总体来说这次的操作还是比较简单,但是通过自己画模块框图及波形图,对后面的仿真及代码的理解具有很强的理解性上的帮助!通过这次实验,应该算是入坑了吧,哈哈!

你可能感兴趣的:(FPGA,fpga开发)