我试图为显示在七段显示上的一个简单计数器(0到9)编写代码。它的增量方式是通过一个从逻辑0到逻辑1的开关,逻辑1使它增加1,还有rest功能,它意味着将计数器重置为0。
我在这里查看过,并对大部分代码进行了排序。在编译时,我已经在ModelSim上进行了模拟,它的工作原理与预期一样。然而,当我将代码下载到我的DE0板上时,它就不起作用了--我甚至无法描述它所做的事情,因为它是如此的随机,而且没有明显的模式(随机LED会亮起来,随机数字会出现等等)。
重置(将计数器设置为0并将0输出到7段)工作得很好!
到目前为止,这是我的代码:
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段会在按钮被按下时显示一个随机值/模式,然后在按钮松开时切换到另一个随机值/模式。
发布于 2014-10-09 16:56:12
关于如何继续前进的一些建议:
switch_db。钟也是用来做这个的。'last_value属性不能用于代码中所写的边缘检测。相反,使用触发器使开关信号延迟一个周期,然后检查当前和以前的值,如(switch_db = '1') and (switch_db_delay_ = '0')。VHDL属性'last_value通常是一个测试平台特性,因此仅用于仿真。钟也是用来做这个的。counter转换为7段值可以在一个单独的过程中进行,以避免敏感性列表处理的问题,否则可能会在综合工具中生成警告。https://stackoverflow.com/questions/26282557
复制相似问题