modulo 100 VHDL

OP #7397574
Rate this post
• ▲ useful
▼ not useful

Hi ! I am trying to implement a modulo 100 counter.

I encounter some issues with the Bin2BCD part. The thing is that the incrementation of the tens digit is done two by two, like it goes from 0 to 2 then to 4 etc... and I don't understand why ?

Any help is deeply appreciated.

P.S: In the attachment I also added the code of the other parts in the Codes.rar file.

P.S2: I am running the simulation on ISE and it takes too much time. Any tips in order to reduce the simulation time ?

Attached files:
Moderator (Company: Titel) #7400388
Rate this post
• ▲ useful
▼ not useful

Matlabo wrote:

Any help is deeply appreciated.

Do you have a working test bench for that design?

I made one and it does not schow anything making any kind of sense to me...

Matlabo wrote:

P.S2: I am running the simulation on ISE and it takes too much time. Any tips in order to reduce the simulation time ?

You must speed up your clock enables:

1
architecture Behavioral of diviseur is
2
:
3
    elsif rising_edge (Clk) then 
4
--      if qt=50000000 then 
5
      if qt=4999 then 
6
        enlh <='1' ;
7
:
8
--      if qt100 = 500000 then 
9
      if qt100 = 49 then 
10
        en100h <= '1';
11
:
12
  end process;
13
end Behavioral;

50000000 ... 500000

The usual "off-by-one" problem: with a compare value of 500000 you count 500001 clock cycles. Considering that it is very crude to handle the ones and hundreds by two separate prescalers:

1
    elsif rising_edge (Clk) then 
2
      if qt=50000000 then 
3
        enlh <='1' ;
4
        qt := 0;
5
      else enlh <= '0' ;
6
        qt := qt+1 ;
7
      end if;
8

9
      if qt100 = 500000 then 
10
        en100h <= '1';
11
        qt100 := 0;
12
      else
13
        qt100 := qt100 + 1;
14
      end if;
15
    
16

17
    end if;

Why don't you handle the digits in a way every "usual" counter does: when the ones reach 9, then with the next clock the tens are incremented and the ones are reset to 0. When the tens reach 9 then with the next clock the hundreds are incremented and the tens are reset. And so on...

Have a look at the code of the stop watch there: http://www.lothar-miller.de/s9y/archives/88-VHDL-vs.-Verilog-am-Beispiel-einer-Stoppuhr.html

Its German, try Google translator.

BTW:

1
use IEEE. numeric_STD.ALL;
2
use IEEE.STD_LOGIC_UNSIGNED.ALL;

Never ever both of them together! The numeric_std has all you need. With both of them you will now and then encounter weird error messages due to double definitions of some data types.

Attached files:

Reply

Note: the original post is older than 6 months. Please don't ask any new questions in this thread, but start a new one.

Formatting
  • [c]C-Code[/c]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]code in other languages, ASCII drawings[/code]
  • [math]formula (LaTeX syntax)[/math]
  • [[Title]] – link to an article
  • Link to another post: right-click its post ID (#8078628), copy the address, paste it into the text

More about formatting

Post long source code as an attachment, not in the text.

Already registered? Log in

Not shown to anyone. We send you a link; your post appears once you confirm it there.

By submitting you create a free account and accept the terms of use.