我是eda小白。我这有一段基于fpga的自己编的程序,有点问....

2019-07-16 01:36发布

我这段程序实现的是脉冲输入然后在三个数码管,一个显示百位,一个十位,一个个位。想要实现的是当脉冲计数到256的时候能够归0,也就是说最大显示到255.可是不知道为什么,试验台上测试的时候,他却能一直走到999.到了255之后根本没能归0.跟同学商量了商量也没有发现问题所在。大家帮我瞅瞅怎么回事。





library ieee;use ieee.std_logic_1164.all;entity counter is   port(a,reset:in std_logic;   digit1,digit2,digit3:out std_logic_vector(6 downto 0));end counter;architecture counter of counter isbegin    process(a,reset)       variable temp1: integer range 0 to 10;                          variable temp2: integer range 0 to 10;               variable temp3: integer range 0 to 10;begin   if(reset='1') then      temp1 :=0;             temp2 :=0;      temp3 :=0;    elsif(a'event and a='1') then      temp1:=temp1+1;      if(temp1=10) then         temp1:=0;         temp2:=temp2+1;           if(temp2=10) then            temp1:=0;            temp2:=0;            temp3:=temp3+1;               if(temp3=2 and temp2=5 andtemp1=6) then                 temp1:=0;                 temp2:=0;                 temp3:=0;               end if;            end if;        end if;      end if;   case temp1 is         when 0=>digit1<="1111110";                             when 1=>digit1<="0110000";         when 2=>digit1<="1101101";         when 3=>digit1<="1111001";         when 4=>digit1<="0110011";         when 5=>digit1<="1011011";         when 6=>digit1<="1011111";         when 7=>digit1<="1110000";         when 8=>digit1<="1111111";         when 9=>digit1<="1111011";         when others => NULL;  end case;         case temp2 is         when 0=>digit2<="1111110";                             when 1=>digit2<="0110000";         when 2=>digit2<="1101101";         when 3=>digit2<="1111001";         when 4=>digit2<="0110011";         when 5=>digit2<="1011011";         when 6=>digit2<="1011111";         when 7=>digit2<="1110000";         when 8=>digit2<="1111111";         when 9=>digit2<="1111011";         when others => NULL;  end case;                 case temp3 is         when 0=>digit3<="1111110";                             when 1=>digit3<="0110000";         when 2=>digit3<="1101101";         when others => NULL;  end case;         end process;  end counter;
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
xiewenbin520
1楼-- · 2019-07-16 03:03
temp1,temp2,temp3,怎么会计数到10呢,建议先将计数部分独立出来写个模块,做个仿真,看仿真结果,这比较容易找到错误
郭小胖要坚强
2楼-- · 2019-07-16 04:44
没看出来程序有什么问题 求楼主给出问题所在!
菩提wei
3楼-- · 2019-07-16 06:21
library ieee;
use ieee.std_logic_1164.all;
entity counter is   
port(  a,reset:in std_logic;   
       digit1,digit2,digit3:out std_logic_vector(6 downto 0)
    );
end counter;
architecture counter of counter is
begin   
process(a,reset)      
   variable temp1: integer range 0 to 10;                          
   variable temp2: integer range 0 to 10;               
   variable temp3: integer range 0 to 10;
begin   
  if(reset='1') then      
     temp1 :=0;            
     temp2 :=0;      
     temp3 :=0;   
  elsif(a'event and a='1') then      
      temp1:=temp1+1;      
      if(temp1=10) then         
         temp1:=0;         
         temp2:=temp2+1;           
         if(temp2=10) then            
            temp1:=0;            
            temp2:=0;            
            temp3:=temp3+1;
         end if;
       end if;               
       if(temp3=2 and temp2=5 andt emp1=6) then                 
              temp1:=0;                 
              temp2:=0;                 
              temp3:=0;               
       end if;                 
  end if;   
case temp1 is         
      when 0=>digit1<="1111110";                             
      when 1=>digit1<="0110000";         
      when 2=>digit1<="1101101";         
      when 3=>digit1<="1111001";         
      when 4=>digit1<="0110011";         
      when 5=>digit1<="1011011";         
      when 6=>digit1<="1011111";         
      when 7=>digit1<="1110000";         
      when 8=>digit1<="1111111";         
      when 9=>digit1<="1111011";         
      when others => NULL;  
end case;
        
case temp2 is         
    when 0=>digit2<="1111110";                             
    when 1=>digit2<="0110000";         
    when 2=>digit2<="1101101";         
    when 3=>digit2<="1111001";         
    when 4=>digit2<="0110011";         
    when 5=>digit2<="1011011";        
    when 6=>digit2<="1011111";         
    when 7=>digit2<="1110000";         
    when 8=>digit2<="1111111";         
    when 9=>digit2<="1111011";         
    when others => NULL;  
end case;                 

case temp3 is         
    when 0=>digit3<="1111110";                             
    when 1=>digit3<="0110000";         
    when 2=>digit3<="1101101";         
    when others => NULL;  
end case;         
end process;  
end counter;  
菩提wei
4楼-- · 2019-07-16 08:45
  elsif(a'event and a='1') then      
      temp1:=temp1+1;      
      if(temp1=10) then         
         temp1:=0;         
         temp2:=temp2+1;           
         if(temp2=10) then            
            temp1:=0;            
            temp2:=0;            
            temp3:=temp3+1;
         end if;
       end if;               
       if(temp3=2 and temp2=5 andt emp1=6) then                 
              temp1:=0;                 
              temp2:=0;                 
              temp3:=0;               
       end if;                 
  end if;
你这样就没问题了

一周热门 更多>