首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >VHDL计数器使用7段开关-不工作

VHDL计数器使用7段开关-不工作
EN

Stack Overflow用户
提问于 2014-10-09 15:40:14
回答 1查看 3.7K关注 0票数 1

我试图为显示在七段显示上的一个简单计数器(0到9)编写代码。它的增量方式是通过一个从逻辑0到逻辑1的开关,逻辑1使它增加1,还有rest功能,它意味着将计数器重置为0。

我在这里查看过,并对大部分代码进行了排序。在编译时,我已经在ModelSim上进行了模拟,它的工作原理与预期一样。然而,当我将代码下载到我的DE0板上时,它就不起作用了--我甚至无法描述它所做的事情,因为它是如此的随机,而且没有明显的模式(随机LED会亮起来,随机数字会出现等等)。

重置(将计数器设置为0并将0输出到7段)工作得很好!

到目前为止,这是我的代码:

代码语言:javascript
复制
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;

entity Lab_1 is port (
  switch : in  std_logic;
  rst    : in  std_logic;
  sseg   : out std_logic_vector(7 downto 0));
end Lab_1;

architecture top of Lab_1 is
  signal counter : unsigned (3 downto 0) := "0000";
begin

  display : process(switch, rst) is
  begin
    if rst = '1' and rst'last_value = '0' then
      counter <= "0000";
    elsif switch = '1' and switch'last_value = '0' then
      counter <= counter + 1;
    end if;
    case counter is
      when "0000" => sseg <= "11000000";
      when "0001" => sseg <= "11111001";
      when "0010" => sseg <= "10100100";
      when "0011" => sseg <= "10110000";
      when "0100" => sseg <= "10011001";
      when "0101" => sseg <= "10010010";
      when "0110" => sseg <= "10000010";
      when "0111" => sseg <= "11111000";
      when "1000" => sseg <= "10000000";
      when "1001" => sseg <= "10010000";
      when others => sseg <= "11111111";
    end case;
  end process;

end top;

对于出了什么问题,我们会很感激你的帮助。

编辑:

这是我为大学课程做的作业。这个问题实际上需要一个方法来保持两个“团队”的得分,方法是按下一个按钮/开关,然后重新设置它。我想,如果我能有一个简单的柜台工作,那么我可以很容易(我希望!)为2支球队保持得分。

DE0板上确实有按钮,但当我修改代码以便使用按钮时,7段会在按钮被按下时显示一个随机值/模式,然后在按钮松开时切换到另一个随机值/模式。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-09 16:56:12

关于如何继续前进的一些建议:

  1. 设计中没有时钟,但是由于下面列出的几个原因,需要一个时钟,因此在DE0参考板上添加一个基于可用时钟的时钟端口列表。
  2. 在时钟上升的边缘对计数器进行定时更新。
  3. 开关输入通常会产生一定数量的反弹,请参阅接触弹跳。因此,必须应用于联系人的退保器,参见脱去。下面的便签开关称为switch_db。钟也是用来做这个的。
  4. 'last_value属性不能用于代码中所写的边缘检测。相反,使用触发器使开关信号延迟一个周期,然后检查当前和以前的值,如(switch_db = '1') and (switch_db_delay_ = '0')。VHDL属性'last_value通常是一个测试平台特性,因此仅用于仿真。钟也是用来做这个的。
  5. counter转换为7段值可以在一个单独的过程中进行,以避免敏感性列表处理的问题,否则可能会在综合工具中生成警告。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26282557

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档