如何在 vhdl 的 basys 3 中的七段显示中使用单独的数字
How can I use seperate digits in seven segment display in basys 3 in vhdl
我正在做一个关于制作秒表的项目。为此,我必须在 7 段显示器上使用单独的数字。但是,当我尝试时,所有数字的行为都相同。我使用以下代码作为约束。
set_property PACKAGE_PIN W7 [get_ports {clk_out[6]}]
set_property IOSTANDARD LVCMOS33 [get_ports {clk_out[6]}]
set_property PACKAGE_PIN W6 [get_ports {clk_out[5]}]
set_property IOSTANDARD LVCMOS33 [get_ports {clk_out[5]}]
set_property PACKAGE_PIN U8 [get_ports {clk_out[4]}]
set_property IOSTANDARD LVCMOS33 [get_ports {clk_out[4]}]
set_property PACKAGE_PIN V8 [get_ports {clk_out[3]}]
set_property IOSTANDARD LVCMOS33 [get_ports {clk_out[3]}]
set_property PACKAGE_PIN U5 [get_ports {clk_out[2]}]
set_property IOSTANDARD LVCMOS33 [get_ports {clk_out[2]}]
set_property PACKAGE_PIN V5 [get_ports {clk_out[1]}]
set_property IOSTANDARD LVCMOS33 [get_ports {clk_out[1]}]
set_property PACKAGE_PIN U7 [get_ports {clk_out[0]}]
set_property IOSTANDARD LVCMOS33 [get_ports {clk_out[0]}]
如何使用单独的数字?如果您通过示例向我解释,那将非常有帮助。提前致谢。
@Brian Drummond 和@user1155120 真的回答了你的问题。显示是时间多路复用的。你需要一遍又一遍地重复这个序列,速度要快到人眼无法察觉你一次只驱动一个数字:
- 启用 U2 并驱动单位列的 7 段输出;
- 然后使能U4并驱动十位列的7段输出;
- 然后启用V4并驱动百列的7段输出;
- 然后启用W4并驱动千位列的7段输出。
因此,您需要一些 VHDL 代码来驱动 U2,然后是 U4,然后是 V4,然后是 W4,然后是 U2 等等,以及一些其他的 VHDL 代码,可以为每个数字适当地驱动 7 段输出。
我首先要熟悉 7 段显示的数据 sheet。您需要做的是 运行 每个数字分别(例如,每个数字的计数器溢出到下一个计数器),然后使状态机以列表 60hz x 显示数 = x 振荡。因此,您将有两个时钟,一个用于计算您的时间,另一个 运行s 显示在每个数字 60hz 列表中。
然后,您的统计机器应该具有每个数字的状态(激活正确的引脚输出)和更可取的 "others" 状态,如果错误进入无法到达的状态,该状态将返回到第一个状态。
这应该可以帮助您入门。
此致,
塞巴斯蒂安
P.S 这里的问题与您的类似,但针对计时器:
我正在做一个关于制作秒表的项目。为此,我必须在 7 段显示器上使用单独的数字。但是,当我尝试时,所有数字的行为都相同。我使用以下代码作为约束。
set_property PACKAGE_PIN W7 [get_ports {clk_out[6]}]
set_property IOSTANDARD LVCMOS33 [get_ports {clk_out[6]}]
set_property PACKAGE_PIN W6 [get_ports {clk_out[5]}]
set_property IOSTANDARD LVCMOS33 [get_ports {clk_out[5]}]
set_property PACKAGE_PIN U8 [get_ports {clk_out[4]}]
set_property IOSTANDARD LVCMOS33 [get_ports {clk_out[4]}]
set_property PACKAGE_PIN V8 [get_ports {clk_out[3]}]
set_property IOSTANDARD LVCMOS33 [get_ports {clk_out[3]}]
set_property PACKAGE_PIN U5 [get_ports {clk_out[2]}]
set_property IOSTANDARD LVCMOS33 [get_ports {clk_out[2]}]
set_property PACKAGE_PIN V5 [get_ports {clk_out[1]}]
set_property IOSTANDARD LVCMOS33 [get_ports {clk_out[1]}]
set_property PACKAGE_PIN U7 [get_ports {clk_out[0]}]
set_property IOSTANDARD LVCMOS33 [get_ports {clk_out[0]}]
如何使用单独的数字?如果您通过示例向我解释,那将非常有帮助。提前致谢。
@Brian Drummond 和@user1155120 真的回答了你的问题。显示是时间多路复用的。你需要一遍又一遍地重复这个序列,速度要快到人眼无法察觉你一次只驱动一个数字:
- 启用 U2 并驱动单位列的 7 段输出;
- 然后使能U4并驱动十位列的7段输出;
- 然后启用V4并驱动百列的7段输出;
- 然后启用W4并驱动千位列的7段输出。
因此,您需要一些 VHDL 代码来驱动 U2,然后是 U4,然后是 V4,然后是 W4,然后是 U2 等等,以及一些其他的 VHDL 代码,可以为每个数字适当地驱动 7 段输出。
我首先要熟悉 7 段显示的数据 sheet。您需要做的是 运行 每个数字分别(例如,每个数字的计数器溢出到下一个计数器),然后使状态机以列表 60hz x 显示数 = x 振荡。因此,您将有两个时钟,一个用于计算您的时间,另一个 运行s 显示在每个数字 60hz 列表中。
然后,您的统计机器应该具有每个数字的状态(激活正确的引脚输出)和更可取的 "others" 状态,如果错误进入无法到达的状态,该状态将返回到第一个状态。
这应该可以帮助您入门。
此致, 塞巴斯蒂安
P.S 这里的问题与您的类似,但针对计时器: