下冰雹 · 2022年03月06日

【安路 EG4S20 版本】基础实验设计与实现:实验6 加法计数器

实验设计目标

在FPGA中设计实现24进制加法计数器。
通过此实验学习Anlogic_FPGA开发板上的数码管的使用方法。

实验设计思路

本实验设计实现一个24进制的加法计数器,它由晶体振荡器、分频器、计数器和数码管显示器组成,图6.1是该加法计数器的示意图。
image.png
图6.1 24进制加法计数器示意图
晶体振荡器产生稳定的50MHz的脉冲信号CLK,经过分频器后输出标准秒脉冲CLK1,作为计数器的计数时钟。计数器按照“00-01-02…22-23-00-01”的规律计数,每增加1秒,计数器加1,信号Result[7:4]代表计数器输出结果的十位,Result[3:0]代表个位,RSTn为复位输入信号。将计数器的结果Result输出给数码管显示。

功能模块图与输入输出引脚说明

该工程包含顶层模块counter24与底层模块Accumulator_module、Digitron_NumDisplay_module。其中,Accumulator_module实现分频器和计数器的功能,Digitron_NumDisplay_module实现数码管显示器的功能。图6.2是整个工程的模块功能图。下面介绍一下顶层模块各引脚的功能:
image.png
图6.2 加法计数器模块功能图
CLK:50MHz的时钟信号输入。将其分频后产生标准秒脉冲CLK1。
RSTn:复位输入信号。低电平有效,复位后计数器输出Result变为00。
DigitronCS_Out[3:0],Digitron_Out[7:0]:数码管的输出,共有四位片选和八位段选总线。

程序设计

1.图6.3是截取自底层模块Accumulator_module的部分代码:

  • 16-24:CLK1是CLK通过分频代码产生的标准秒脉冲,周期为1s。
  • 28-29:RSTn为0时,系统复位,计数器输出Result[7:0] 变为“00”。
  • 31-42:这是一个24进制计数器,个位(Result[3:0])满10后向十位进位,整体按照“23”翻“00”规律计数。

image.png
图6.3 Accumulator_module核心代码
2.图6.4是截取自底层模块Digitron_NumDisplay的部分代码:
image.png

  • 11-40:分频和数码管位选程序,使用Count产生250KHz的扫描频率,每个扫描周期改变数码管位选W_DigitronCS_Out,这里数码管显示在低两位切换。

image.png

  • 45-48:参数型常量定义。定义了“_0_1_2…_9”这九个输送到数码管的常量的值。
  • 52-55:当数码管位选变化时,将该位上需要显示的值赋给SinleNum;
  • 57-68:根据SingleNum的值,选择要显示的数字对应的LED段码赋给W_Digitron_Out;

FPGA管脚配置

下面是本例中Anlogic FPGA的引脚分配。
set_pin_assignment { CLK } { LOCATION = R7; IOSTANDARD = LVCMOS33; }
set_pin_assignment { DigitronCS_Out[0] } { LOCATION = C9; IOSTANDARD = LVCMOS33; }
set_pin_assignment { DigitronCS_Out[1] } { LOCATION = B6; IOSTANDARD = LVCMOS33; }
set_pin_assignment { DigitronCS_Out[2] } { LOCATION = A5; IOSTANDARD = LVCMOS33; }
set_pin_assignment { DigitronCS_Out[3] } { LOCATION = A3; IOSTANDARD = LVCMOS33; }
set_pin_assignment { Digitron_Out[0] } { LOCATION = A4; IOSTANDARD = LVCMOS33; }
set_pin_assignment { Digitron_Out[1] } { LOCATION = A6; IOSTANDARD = LVCMOS33; }
set_pin_assignment { Digitron_Out[2] } { LOCATION = B8; IOSTANDARD = LVCMOS33; }
set_pin_assignment { Digitron_Out[3] } { LOCATION = E8; IOSTANDARD = LVCMOS33; }
set_pin_assignment { Digitron_Out[4] } { LOCATION = A7; IOSTANDARD = LVCMOS33; }
set_pin_assignment { Digitron_Out[5] } { LOCATION = B5; IOSTANDARD = LVCMOS33; }
set_pin_assignment { Digitron_Out[6] } { LOCATION = A8; IOSTANDARD = LVCMOS33; }
set_pin_assignment { Digitron_Out[7] } { LOCATION = C8; IOSTANDARD = LVCMOS33; }
set_pin_assignment { RSTn } { LOCATION = A9; IOSTANDARD = LVCMOS33; }

实验结果

当SW0拨至“UP”时的实验现象,数码管从00到23循环计数。当SW0拨至“DOWN”时,将显示“00”。

思考与拓展

本实验初次使用数码管验证实验输出,认真阅读代码,理解数码管的驱动原理,这将在后面的实验中频繁出现。

END

文章来源:https://www.yuque.com/yingmuketang/01/ho5w0k

推荐内容

更多内容请关注走进FPGA专栏
推荐阅读
关注数
1615
内容数
27
本专栏将以【安路EG4S开发板】为例,从基础板卡信息及使用教程,基础实验设计与实现及综合性实验设计与实现带大家学习FPGA。
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息