Forum Discussion

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

how to turn seconds into h:m:s???

for example:

"56783"seconds turn into the format of "h:m:s" is "15:46:23".

I used the method of comparasion,i.e.confirm the hours first,

15*3600 < 56783 < 16*3600,so I confim the hour is 15.

Then,comfirm the minutes is 46...

But the question is that the "<" or ">" is rather delayed,a long path generated.

So ,I want to ask a advice&#65306;can I find another way to realize the function ,not using the "<" and ">"?

Thank U !

7 Replies

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

    In vhdl, you can run multiple counters on the 1 sec clock edge:

    
    if(Seconds /= 59) then
            Seconds <= Seconds + 1;
    else
            Seconds <= (others => '0');
            if(Minutes /= 59) then
                  Minutes <= Minutes + 1;
            else
                  Minutes <= (others => '0');
                 if(Hours /=23) then
                       Hours <= Hours + 1;
                 else
                       Hours <= (others => '0');
                 end if;
            end if;
    end if;
    
  • Altera_Forum's avatar
    Altera_Forum
    Icon for Honored Contributor rankHonored Contributor

    We don't expect to use the "/=" ,it causes delay.

    when the value of seconds is big,it may need several clocks.
  • Altera_Forum's avatar
    Altera_Forum
    Icon for Honored Contributor rankHonored Contributor

    It is a comparator either way (= checks all bits, /= checks all bits). Any difference in implementation or length of paths is target/tool dependant

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

    --- Quote Start ---

    We don't expect to use the "/=" ,it causes delay.

    when the value of seconds is big,it may need several clocks.

    --- Quote End ---

    There is no big value for seconds. Its counter goes 0 ~ 59. You count on clock edge every 1sec time.