我的 FPGA 学习历程(08)—— 实验:点亮单个数码管
数码管是一种常见的用于显示的电子器件,根据数码管大致可以分为共阴极和共阳极两种,下图所示的是一个共阳极的数码管的电路图(摘自金沙滩工作室的 51 开发板电路图),我的 AX301 开发板与这张图的情况类似,几乎所有的教科书上都会讲到数码管的原理,这里我就不再详述了。
由于多个数码管的段选信号(下图中的 DB0~DB7)是共用的,想要显示多个数字需要用到动态扫描,动态扫描电路需要使用时钟。冒然的使用时钟会使得初学者不知所措,所以在这篇基础的组合逻辑电路中只点亮单个数码管,这样就不必涉及到时钟了。时钟、时序逻辑这些概念则会留到后面的章节中介绍。

由上图可知,所有的引脚都是低电平有效的,如果想要在上图中的 DS6 上显示 8,需要把 LEDS5、DB7 ~ DB10 都置为低电平。
这次我们的实验目的是在数码管上显示一个 8,在查看自己开发板的电路图后得知,需要将 FPGA 的输出管脚 SEL0、DIG0~DIG6 设为低电平(DIG7 为小数点 DP),需要注意的是 SEL0 控制的是最右边的数码管。
我的开发板电路图(摘自 黑金AX301 提供的 PDF 文件):

根据上面的总结,新建名为 seg 的工程,为了使我们的代码有一定的通用性,这里用到了参数声明。
数码管显示模块 seg_display 接受输入信号 num 的值,并转化编码用于显示。

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

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

板子附带的资料有一个厂家写好名为 ax301.tcl 的管脚分配文件,粘贴以下内容并保存为 ax301.tcl。
可以看到,tcl 文件在第 2 行定义了芯片家族,第 3 行定义芯片型号,第 4 行设置不用的管脚为三态……

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

运行 tcl 文件。

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

最后下载 sof 文件到您的板子上,看到您期待的数字了吗?(*^__^*) ,此外如需显示其他的数字,只需要修改 seg.v 中 num 的值即可。
我的 FPGA 学习历程(08)—— 实验:点亮单个数码管的更多相关文章
- 我的 FPGA 学习历程(02)—— 实验:点亮 LED 灯
关于 Quartus 的操作可以使用 Quartus 自带的帮助,帮助中带有全套的操作教程. 中文网络教程链接(链接至 altera中文官网,点击观看) Quartus II 软件设计系列:基础 Qu ...
- 我的 FPGA 学习历程(11)—— 实验:按键消抖
按键是一个输入设备,在理论上可以归为开关一类,理想的按键波形如下: 然而由于按键的机械特性,断开和闭合动作是不可能在一瞬间完成的,实际的波形如下: 抖动期间电平处于临界值,由于晶振的频率相当的高,数字 ...
- 我的 FPGA 学习历程(10)—— 实验:数码管驱动
根据黑金 AX301 手册,数码管位选信号命名为 SEL[5:0],其中 SEL[5] 对应最左边的数码管,而SEL[0] 对应最右边数码管:作为约定,在下面的描述中我们对应的称之为数码管 5 和数码 ...
- 我的 FPGA 学习历程(01)—— FPGA 基础知识和 Quartus 的安装
高级的嵌入式市场主要分为以下三类:ARM.DSP 和 FPGA. 其中 ARM 是行业内的佼佼者,目前几乎所有的安卓智能手机都使用 ARM 授权的 CPU架构:而 DSP(数字信号处理器) 早年就被大 ...
- 我的 FPGA 学习历程(12)—— 电子钟项目准备
初学 FPGA 的时候,我们总是存在很多疑问,比如:xilinx 和 altera 的 FPGA 那种比较好.verilog 语言被如何综合成具体硬件电路.RTL 级电路是什么意思等等.现在我们就不会 ...
- 我的 FPGA 学习历程(09)—— 时序逻辑入门
讲到这篇时,组合逻辑就告一段落了,下面是一些总结: 描述组合逻辑时,always 语句中的敏感信号列表中需要列出全部的可能影响输出的变量 描述组合逻辑时,always 语句中的赋值总是使用阻塞赋值符号 ...
- 我的 FPGA 学习历程(05)—— 使用 Modelsim 仿真工具
在第 3 篇中讲到了如何使用图形进行仿真激励输入,图形输入法尽管简单易学,但如若要求复杂的仿真输入激励.较长的仿真时间或是要求打印输出信息乃至输出文件日志则显得不够用了. 本篇以上一篇的 3-8 译码 ...
- 我的 FPGA 学习历程(14)—— PWM 脉冲宽度调制
PWM 是一种调节输出功率的技术(俗称调压),其原理在于改变输出方波的占空比,具体输出见下图: 输出信号为电压值,当负载为恒阻时,上图中的输出功率分别为 25%.50%.75%. 实现方法如下: 设置 ...
- 我的 FPGA 学习历程(07)—— BCD 编码:移位加 3 算法
2-10 进制码,也称为 BCD 码,它的编码方式则是通过一个 4 位二进制来表示一个 10 进制数,部分十进制对应的 BCD 码如下 十进制数 | BCD 码 13 --> 0001_0011 ...
随机推荐
- 一、C语言调试—— gdb 的使用
1.1 gdb 调试工具常用命令 list:展开调试的源代码,缩写 l: break:设置断点,缩写为 b: info break:查看断点信息,缩写为 i b delete:删除断点 print:打 ...
- java多线程基础篇第一篇
1.在开始多线程之前,我们先来聊聊计算机的缓存 计算机处理一个程序需要cpu处理器与存储设备的交互.但是在计算机发展的过程中,cpu处理器的处理速度不断提高,而存储设备的读写速度却没有得到与cpu同样 ...
- Navicat连接阿里云服务器Linux下的Mysql
用Navicat连接阿里云ECS服务器上的MySQL数据库 今天用navtive连接阿里云服务器(Linux)的数据库时,老是连接不上,并且报10060错误,要通过以下两个步骤解决: 1.先进入l ...
- npx 是什么?
参考链接:https://www.jianshu.com/p/cee806439865
- SpringMVC使用CommonsMultipartResolver上传文件
DispatcherServlet并没有实现任何解析multipart请求数据的功能,它将该任务委托给了Spring中MultipartResolver策略接口的实现,通过该接口的实现类来解析mult ...
- Java基础——Instanceof 运算符
Instanceof 运算符 java 中的instanceof 运算符是用来在运行时指出对象是否为特定类的一个实例 instanceof运算返回值:boolean类型 用法 boolean resu ...
- cURL error 60: SSL certificate problem: unable to get local issuer
github 问题连接 https://github.com/yabacon/paystack-php/wiki/cURL-error-60:-SSL-certificate-problem:-una ...
- 那什么时候会触发BFC呢?块级格式化上下文
<html>根元素: float的值不为none: overflow的值为auto.scroll或hidden: display的值为table-cell.table-caption和in ...
- ext window嵌jsp页面自适应
//定义window调用方法传入jsp所需参数function getWindow(obj,obj1,obj2,obj3,obj4,obj5,obj6,obj7,obj8,obj9){ Ext.def ...
- ESP8266莫名重启或者死机问题
多半是内存使用不当 1. 如果你要用很大长度的数组,那么可以换用更小的数据类型.比如,int值要占用两个字节,你可以用byte(只占用一个字节)代替: 2. esp8266有时会莫明重启,大部分 ...