Forum Discussion

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

CPLD selection suggestion

Hi,

We want to interface two devices (A and B) working at 148.5MHz.

The first device (A) gives out data at the negative edge and the second device (B) captures at the positive edge.

The clock to output delay of A varies from 1.64 to 5.3872ns.

The minimum setup and hold times required at B are 1.3 and 0.8ns respectively.

As per the timings, the ideal time for sampling the data will be at the negative edge. But as device B captures at the positive edge, the timings are not met when these two devices are connected directly.

So, we want to interface these devices through a CPLD. The CPLD will capture the data from A at the negative edge and give out data to B at the rising edge.

Can you please suggest me some suitable CPLD device that can be used for this purpose?

Regards,

Prachi

14 Replies

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

    Pranchi,

    do not pay too much attention to the datasheet values, as this can be design dependent.

    You need to make a test design, apply timing constraints and see if it can meet them, as josyb did.

    Would the I/O timing improve if you use the reverse edges?

    Ie, use the rising edge to capture the data and use the falling edge to transmit data?

    (I don't have access to Quartus right now)
  • Altera_Forum's avatar
    Altera_Forum
    Icon for Honored Contributor rankHonored Contributor

    Taking josyb's project, I made it meet timing with the MAX V by

    a) using the rising edge to capture A.

    b) applying a multi-cycle exception of 2/0 to paths from A.

    c) applying a multi-cycle expcetion of 2/0 to paths to B.
  • Altera_Forum's avatar
    Altera_Forum
    Icon for Honored Contributor rankHonored Contributor

    Thanks for the update. I now better understand multi-cycle exceptions.

    I played around with the code a bit. If I refactor 'B' into the clocked process in stead of using 'rb' TimeQuest says the design doesn't meet the timing. Anything fundamental I'm overlooking?

    We can eliminate the 'rb' register and directly assign 'B' from 'ra'. This may possibly allow using a smaller device. I also played around using a variable -> same results.
  • Altera_Forum's avatar
    Altera_Forum
    Icon for Honored Contributor rankHonored Contributor

    It's a caveat with naming and name matching in the SDC.

    When you put the B assignment into the clocked process, you get a registers named B[...]~reg instead of rb[...].

    These match the B* patterns in the multi-cycle exceptions, which causes havoc. The transfers from ra[...] to B[...]~reg are now subject to the same 2/0 multi-cycle and they can't meet the hold requirement.

    If I had properly selected the paths, with [get_ports B[*]], you wouldn't have had such problem.