Forum Discussion

Altera_Forum's avatar
Altera_Forum
Icon for Honored Contributor rankHonored Contributor
16 years ago

problem

hello

i do a clock to 24 hours in vhdl. i am using cyclone 2. I do vhdl files, test them with model sim, after that the comipations goes on with warnings, but it do not work on the fpga ? why ? i can not understand

please help

13 Replies

  • Altera_Forum's avatar
    Altera_Forum
    Icon for Honored Contributor rankHonored Contributor

    
    library ieee;
    use ieee.std_logic_1164.all ;
    use ieee.std_logic_1164.all;
    use ieee.std_logic_arith.all;
    use ieee.std_logic_unsigned.all;
    entity counterTo20Hours  is 
    port  (
    clk_10_hour , reset: in std_logic; 
    --q_2_HOURS : out   std_logic_vector (1 downto 0)  ;
    q_2_HOURS_7_segment : out   std_logic_vector (3 downto 0) ;
    rst : in std_logic 
    );
    end counterTo20Hours; 
    architecture arch of counterTo20Hours is  
    signal cnt : std_logic_vector (1 downto 0);
    signal cnt_7 : std_logic_vector (3 downto 0);
    begin
    process   (clk_10_hour, reset, rst ) 
    begin 
    if (reset = '1' or rst = '1') then  cnt <= "00" ;   cnt_7 <= "0000";  
      elsif (clk_10_hour'event and clk_10_hour = '0') then
      
      if (cnt = "11")  then cnt <= "00" ; else  cnt <= cnt +1 ; cnt_7 <= cnt_7  +1 ; end if ;
      
      end if ; 
      
    end process; 
    --q_2_HOURS <= cnt; 
    q_2_HOURS_7_segment <= cnt_7 ; 
    end arch; 
    
    
    library ieee;
    use ieee.std_logic_1164.all ;
    use ieee.std_logic_arith.all;
    entity decoder7seg is
        port (DIGIT : in std_logic_vector(3 downto 0);  
                SEG : out std_logic_vector(6 downto 0) );
    end entity decoder7seg; 
    architecture decoder7seg_a of decoder7seg is
        begin  
          --decode : process DIGIT is
          SEG <= "1000000" when DIGIT="0000" else   -- 0
                 "1111001" when DIGIT="0001" else   -- 1
                 "0100100" when DIGIT="0010" else   -- 2
                 "0110000" when DIGIT="0011" else   -- 3library ieee;
                 "0011001" when DIGIT="0100" else   -- 4
                 "0010010" when DIGIT="0101" else   -- 5
                 "0000010" when DIGIT="0110" else   -- 6
                 "1111000" when DIGIT="0111" else   -- 7
                 "0000000" when DIGIT="1000" else   -- 8
                 "0010000" when DIGIT="1001" else   -- 9
                 "0001000" when DIGIT="1010" else   -- A
                 "0000011" when DIGIT="1011" else   -- b
                 "1000110" when DIGIT="1100" else   -- C
                 "0100001" when DIGIT="1101" else   -- d
                 "0000110" when DIGIT="1110" else   -- E
                 "0001110" when DIGIT="1111" else   -- F
                 "0000000";
       
        end architecture decoder7seg_a;
    
    
    library ieee;
    use ieee.std_logic_1164.all ;
    use ieee.std_logic_arith.all; 
    use IEEE.STD_LOGIC_UNSIGNED.ALL;
    use IEEE.numeric_std.ALL;
    entity  clockTop is 
    port  (
     
    clk50Mhz :  in std_logic;
    resetTop : in std_logic;
    tenMinutesOut : out std_logic_vector (6 downto 0);
    sixtyMinOut : out std_logic_vector (6 downto 0);
    TenHoursOut : out std_logic_vector (6 downto 0);
    TwoHoursOut : out std_logic_vector (6 downto 0)
      );
    end clockTop;
      
      architecture struct of clockTop is
      
       component counter60seconds
     port  (
      clk, reset: in std_logic; 
      seconds60 : inout   std_logic  
    );  
    end component; 
      component  secondGenerator 
        port (
         CLK, RST :in std_logic;
         devided_clk : inout std_logic 
       --  Q :out std_logic_vector(24 downto 0)
    ) ;
      end component ; 
      
      
     component counterToTen is 
    port  (
    clk, reset: in std_logic; 
    q_MIN : out   std_logic_vector (3 downto 0)  ;
    q_10_minSignal : out std_logic;
    rst : in std_logic
    );
    end component;  
    component counterSixtyMin is 
    port  (
    clk_in_10_min, reset: in std_logic; 
    q_Sixty_min_7_segment : out   std_logic_vector (3 downto 0)  ;
    --q_Sixty_min : out   std_logic_vector (2 downto 0)  ;
    q_Sixty_min_Signal : out std_logic;
    rst : in std_logic
    );
    end component;
    component counterTenHours is 
    port  (
    clk_1_hour , reset: in std_logic; 
    q_10_HOURS : out   std_logic_vector (3 downto 0)  ;
    q_10_hoursSignal : out std_logic;
    rst : in std_logic
    );
    end component; 
    component counterTo20Hours  is 
    port  (
    clk_10_hour , reset: in std_logic; 
    --q_2_HOURS : out   std_logic_vector (1 downto 0)  ;
    q_2_HOURS_7_segment : out   std_logic_vector (3 downto 0)  ; 
    rst : in std_logic
    );
    end component; 
      component segment7
        port (DIGIT : in std_logic_vector(3 downto 0);  
                SEG : out std_logic_vector(6 downto 0) );
     end component;
     signal reset_sign : std_logic; 
     signal OneSecWire : std_logic ; 
     signal q_line : std_logic_vector(24 downto 0);
     signal OneMinWire : std_logic; 
     signal q_10_minutes_signal : std_logic_vector(3 downto 0);
     signal q_10_minSignal_IntSign : std_logic;
     signal q_Sixty_min_Signal_IntSign :   std_logic; 
     signal q_10_HOURS_IntSign_Vector :  std_logic_vector (3 downto 0); 
     signal q_10_hoursSignal_IntSign : std_logic; 
     signal q_2_HOURS_7_segment_IntSign : std_logic_vector (3 downto 0); 
     signal q_Sixty_min_7_segment_IntSign : std_logic_vector (3 downto 0);
     signal rst_signal : std_logic; 
     
     for ALL:  segment7 use entity work.decoder7seg(decoder7seg_a);
    for ALL : counterTo20Hours use entity work.counterTo20Hours;
     for ALL : counterTenHours use entity work.counterTenHours;
       for ALL : counterSixtyMin use entity work.counterSixtyMin;
       for ALL:  counterToTen use entity work.counterToTen;
     for ALL:  secondGenerator use entity work.counter_devidor;
       for ALL : counter60seconds use entity work.counter60seconds;
      begin 
        secondGeneratorInst : secondGenerator port map ( clk50Mhz, reset_sign ,OneSecWire ) ; 
    counter60secondsInst : counter60seconds port map (OneSecWire, reset_sign,  OneMinWire ) ;
    counterToTenInst : counterToTen port map (
    OneMinWire, reset_sign,
    q_10_minutes_signal,
    q_10_minSignal_IntSign,
    rst_signal
    );
    counterSixtyMinInst : counterSixtyMin  
    port  map(
    q_10_minSignal_IntSign, reset_sign,
    q_Sixty_min_7_segment_IntSign  ,
    --q_Sixty_min : out   std_logic_vector (2 downto 0)  ,
    q_Sixty_min_Signal_IntSign,
    rst_signal
    );
    counterTenHoursInst :counterTenHours 
    port map  (
    q_Sixty_min_Signal_IntSign , reset_sign, 
    q_10_HOURS_IntSign_Vector,
    q_10_hoursSignal_IntSign,
    rst_signal
    );
    counterTo20HoursInst: counterTo20Hours   
    port map (
    q_10_hoursSignal_IntSign , reset_sign,
    --q_2_HOURS : out   std_logic_vector (1 downto 0)  ;
    q_2_HOURS_7_segment_IntSign,
    rst_signal
    );
    segment7_10Min : segment7 port map (q_10_minutes_signal, tenMinutesOut); 
    segment7_60Min : segment7 port map (q_Sixty_min_7_segment_IntSign, sixtyMinOut); 
    segment7_10hours : segment7 port map (q_10_HOURS_IntSign_Vector, TenHoursOut); 
    segment7_2hours : segment7 port map (q_2_HOURS_7_segment_IntSign, TwoHoursOut); 
      process   (clk50Mhz, resetTop, q_2_HOURS_7_segment_IntSign ,  q_10_HOURS_IntSign_Vector , q_Sixty_min_7_segment_IntSign , q_10_minutes_signal ) 
      begin
        if (clk50Mhz'event and clk50Mhz = '1') then
        if (q_2_HOURS_7_segment_IntSign = "0010" and  q_10_HOURS_IntSign_Vector = "0011"   and  q_Sixty_min_7_segment_IntSign = "0101"   and q_10_minutes_signal = "1001" ) then 
           rst_signal <= '1';
    end if;
    end if ; 
      end process; 
     reset_sign <= resetTop;
    end; 
    
    that is ... in simulation is ok ... but ot nthe fpga do not works ...

  • Altera_Forum's avatar
    Altera_Forum
    Icon for Honored Contributor rankHonored Contributor

    
    library ieee;
    use ieee.std_logic_1164.all;
    use ieee.std_logic_arith.all;
    use ieee.std_logic_unsigned.all;
    entity counter_devidor is
    port (
         CLK, RST :in std_logic;
         devided_clk : inout std_logic
    --   Q :out std_logic_vector(24 downto 0)
    ) ;
    end counter_devidor;
    architecture beh of counter_devidor is
    signal QL : std_logic_vector (24 downto 0);
    begin
    process(CLK, RST) begin
      if (RST = '1') then
        QL <= "1011111010111100001000000";        
        devided_clk <= '0';
      elsif (CLK'event and CLK = '1') then
        if (QL = "0000000000000000000000000") then       
          QL <= "1011111010111100001000000";         
          devided_clk <= not(devided_clk);            
        else
          QL <= QL - 1; 
                              
        end if;
      end if;
    end process;
    --Q <= QL;
    end beh;
    

    
    library ieee;
    use ieee.std_logic_1164.all;
    use ieee.std_logic_arith.all;
    use ieee.std_logic_unsigned.all;
    entity counter60seconds  is 
    port  (
    clk, reset: in std_logic; 
    seconds60 : inout   std_logic  
    );
    end counter60seconds; 
    architecture beh of counter60seconds is  
    signal cnt : std_logic_vector (5 downto 0);
    --signal  sec_sign : std_logic; 
    begin
    process   (clk, reset ) 
    begin 
      if (reset = '1') then  cnt <= "111100" ; seconds60 <= '0' ;  else  
       if (clk'event and clk = '1') then
       if (reset /= '1') then if (cnt = "000001") then seconds60 <= not(seconds60);   cnt <= "011110";   else  cnt <= cnt - 1 ; end if;  end if ;  
        end if;                                                                                                                       
    end if ; 
    end process; 
    end beh; 
    
    
    library ieee;
    use ieee.std_logic_1164.all;
    use ieee.std_logic_arith.all;
    use ieee.std_logic_unsigned.all;
    entity counter_10_min is
    port (
         CLK, RST :in std_logic;
         devided_clk_10_sec : inout std_logic; 
         Q_10_min :out std_logic_vector(3 downto 0);
         numbers_min10 :inout std_logic_vector(3 downto 0);
         flagFirst : inout std_logic
    ) ;
    end counter_10_min;
    architecture beh of counter_10_min is
    signal QL : std_logic_vector (3 downto 0);
    --signal  numbers_sec10_sign  :  std_logic_vector (3 downto 0);
    begin
    process(CLK, RST) begin
      if (RST = '1') then
        QL <= "1010";       
        flagFirst <= '0';
      --  numbers_sec10 <= "0000";
       devided_clk_10_sec <= '0';
      elsif (CLK'event and CLK = '1') then
        if (QL = "0001") then       
          QL <= "0101";         
          devided_clk_10_sec <= not(devided_clk_10_sec);
           flagFirst <= '1';       
        else
       
          QL <= QL - 1; 
          
                              
        end if;
      end if;
    end process;
    --process(CLK, RST, devided_clk_10_sec) begin
      --  if (RST = '1') then
        -- numbers_sec10_sign <= "0000"; 
      --elsif (devided_clk_10_sec'event and devided_clk_10_sec='1' ) then 
      --numbers_sec10 <= "0000"; 
      --numbers_sec10_sign <= numbers_sec10_sign +1 ; 
      --end if ; 
     -- end if ; 
     -- end process;
      
    Q_10_min <= QL;
    --numbers_sec10 <=  numbers_sec10_sign;
    end beh;
    
    
    use ieee.std_logic_1164.all ;
    use ieee.std_logic_1164.all;
    use ieee.std_logic_arith.all;
    use ieee.std_logic_unsigned.all;
    entity counterSixtyMin is 
    port  (
    clk_in_10_min, reset: in std_logic; 
    q_Sixty_min_7_segment : out   std_logic_vector (3 downto 0)  ;
    --q_Sixty_min : out   std_logic_vector (2 downto 0)  ;
    q_Sixty_min_Signal : out std_logic;
    rst : in std_logic
    );
    end counterSixtyMin; 
    architecture arch of counterSixtyMin is  
    signal cnt : std_logic_vector (2 downto 0);
    signal cnt_7_segnent : std_logic_vector (3 downto 0);
    begin
    process   (clk_in_10_min, reset , rst ) 
    begin 
    if (reset = '1' or rst = '1') then  cnt <= "000"  ;   cnt_7_segnent <= "0000";
      elsif (clk_in_10_min'event and clk_in_10_min = '0') then
      
      if (cnt = "101")  then cnt <= "000" ;   cnt_7_segnent <= "0000"; else cnt <= cnt +1 ; cnt_7_segnent <= cnt_7_segnent+ 1; end if ;
      
      end if ; 
      
    end process; 
    --q_Sixty_min <= cnt; 
    q_Sixty_min_Signal <=  cnt(2);
    q_Sixty_min_7_segment <= cnt_7_segnent ;
    end arch; 
    
    
    library ieee;
    use ieee.std_logic_1164.all ;
    use ieee.std_logic_1164.all;
    use ieee.std_logic_arith.all;
    use ieee.std_logic_unsigned.all;
    entity counterTenHours is 
    port  (
    clk_1_hour , reset: in std_logic; 
    q_10_HOURS : out   std_logic_vector (3 downto 0)  ;
    q_10_hoursSignal : out std_logic;
    rst : in std_logic
    );
    end counterTenHours; 
    architecture arch of counterTenHours is  
    signal cnt : std_logic_vector (3 downto 0);
    begin
    process   (clk_1_hour, reset , rst) 
    begin 
    if (reset = '1' or rst = '1') then  cnt <= "0000" ;     
      elsif (clk_1_hour'event and clk_1_hour = '0') then
      
      if (cnt = "1001")  then cnt <= "0000" ; else cnt <= cnt +1 ; end if ;
      
      end if ; 
      
    end process; 
    q_10_HOURS <= cnt; 
    q_10_hoursSignal <=  cnt(3);
    end arch; 
    
  • Altera_Forum's avatar
    Altera_Forum
    Icon for Honored Contributor rankHonored Contributor

    Post some code and we can have a look.

    From what you say, I can only guess that you have use a bad coding style, but without seeing the code I cant say any more.