Forum Discussion

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

Clock Divider

I have a input clock 128*Fs(Sampling Frequency). I need derived clocks of Fs, 2Fs, 4Fs, 8Fs, 16Fs ... 64Fs.

However, there are 2 ways in my mind to implement it.

1st:

1 module only and multiple output

use modulus 128-counter:

- if (count == 2, 4, 6, 8, ...) a = 1;//64*Fs

- else if (count== 4, 8, 12,...) b =1; //32*Fs

....

2nd:

Multiple Module and 1 output each module

- modulus 2 counter

- modulus 4 counter

etc

Which method is better?

Besides, how to check the value is multiple of 4, 8 and 16?

Thanks

3 Replies

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

    Neither.

    Either use:

    1. use Phase lock loops instead. Logic generated clocks will give you large skew and you'll have all sorts of failures.

    2. Instead of using your outputs from your counters as clocks, use them as enables on registers running at sampling frequency.
  • Altera_Forum's avatar
    Altera_Forum
    Icon for Honored Contributor rankHonored Contributor

    1. My input clock rate can't fullfill the requirement of pll.

    2. Yes, i am using this method. However, the structure can be different as i mentioned.
  • Altera_Forum's avatar
    Altera_Forum
    Icon for Honored Contributor rankHonored Contributor

    Hi,

    1) It doesn't work as expected :

    - if (count == 2, 4, 6, 8, ...) a = 1;//64*Fs

    - else if (count == 4, 8, 12,...) b =1; //32*Fs // count == 4,8 already done in the above condition.

    2)too numerous counters

    I give a 3rd solution : one counter (range 5 downto 0 for example) and take each bit that switches on divided frequence :

    count(0) for signal f/2,

    count(1) for f/4,

    count(2) for f/8

    ....

    May it help you !

    EDIT :

    I see you need F/6 for example : take a counter modulo 6

    F/12 take (F/6)/2 : be aware about their "phase".