• 我的 FPGA 学习历程(08)—— 实验:点亮单个数码管


            数码管是一种常见的用于显示的电子器件,根据数码管大致可以分为共阴极和共阳极两种,下图所示的是一个共阳极的数码管的电路图(摘自金沙滩工作室的 51 开发板电路图),我的 AX301 开发板与这张图的情况类似,几乎所有的教科书上都会讲到数码管的原理,这里我就不再详述了。

            由于多个数码管的段选信号(下图中的 DB0~DB7)是共用的,想要显示多个数字需要用到动态扫描,动态扫描电路需要使用时钟。冒然的使用时钟会使得初学者不知所措,所以在这篇基础的组合逻辑电路中只点亮单个数码管,这样就不必涉及到时钟了。时钟、时序逻辑这些概念则会留到后面的章节中介绍。

    数码管

            由上图可知,所有的引脚都是低电平有效的,如果想要在上图中的 DS6 上显示 8,需要把 LEDS5、DB7 ~ DB10 都置为低电平。

            这次我们的实验目的是在数码管上显示一个 8,在查看自己开发板的电路图后得知,需要将 FPGA 的输出管脚 SEL0、DIG0~DIG6 设为低电平(DIG7 为小数点 DP),需要注意的是 SEL0 控制的是最右边的数码管。

    我的开发板电路图(摘自 黑金AX301 提供的 PDF 文件):

    seg

    根据上面的总结,新建名为 seg 的工程,为了使我们的代码有一定的通用性,这里用到了参数声明。

    数码管显示模块 seg_display 接受输入信号 num 的值,并转化编码用于显示。

    代码片段

            顶层模块 seg(必须和工程同名),在顶层模块中调用了 seg_display 显示模块,并且告诉 seg_display 模块需要在 SEL0 上显示 8,这段代码如下:

    顶层模块

    由于工程需要用到的管脚较多,如果手动分配可能会出现错误,这里介绍使用 tcl 脚本来分配管脚的方法。

    如图新建一个 TCL 文件:

    TCL 脚本

    板子附带的资料有一个厂家写好名为 ax301.tcl 的管脚分配文件,粘贴以下内容并保存为 ax301.tcl。

    可以看到,tcl 文件在第 2 行定义了芯片家族,第 3 行定义芯片型号,第 4 行设置不用的管脚为三态……

    复制tcl文件

    在 Quartus 主窗口下点击 Tools,找到以下选项:

    tcl设置

    运行 tcl 文件。

    运行脚本

    最后编译整个工程,编译结束后查看管脚分配窗口,可以看到所有的管脚都自动分配成功了。

    管脚分配成功

    最后下载 sof 文件到您的板子上,看到您期待的数字了吗?(*^__^*) ,此外如需显示其他的数字,只需要修改 seg.v 中 num 的值即可。

  • 相关阅读:
    NodeJS笔记:处理非utf8编码
    SQL Server存储过程中的异常处理
    "岛主" 同学给我出的算法题
    学 Win32 汇编[18]: 关于压栈(PUSH)与出栈(POP) 之二
    如何在数据表中存取图片 回复 "三足乌" 的问题
    学 Win32 汇编[19]: 查看二进制等相关函数
    如何删除动态数组的指定元素 回复 "Splendour" 的部分问题
    学 Win32 汇编[17]: 关于压栈(PUSH)与出栈(POP) 之一
    学 Win32 汇编[22] 逻辑运算指令: AND、OR、XOR、NOT、TEST
    学 Win32 汇编[20]: 洞察标志寄存器
  • 原文地址:https://www.cnblogs.com/SummerSunnyDay/p/5026465.html
Copyright © 2020-2023  润新知