• 0
CKV

Pmod IOXP: I/O Expansion Module

Question

Can I implement the ADC and DAC at the same time using Pmod IOXP: I/O Expansion Module on Virtex ultra scale+ FPGA?

 

Thanks in advance. 

Share this post


Link to post
Share on other sites

18 answers to this question

Recommended Posts

  • 0

Hello @CKV,

I'm not certain which ADC and DAC you are referring to, but if they can communicate with a host board using 8 or less I/O pins at a voltage range between 1.65V and 3.6V (as per the datasheet for the embedded chip on the Pmod IOXP), then they can both be used on the Pmod IOXP.

It should be noted though that the Pmod is more akin to a multiplexer so you will not to be able to communicate to the ADC and DAC simultaneously through the Pmod; you will only be able to address them one at a time. The Pmod IOXP also communicates via I2C at a rate up to 1 MHz, so depending on your requirements it may be too slow of a data acquisition rate for both the DAC and ADC to send data to and from the Virtex Ultra Scale+ FPGA.

Thanks,
JColvin

Share this post


Link to post
Share on other sites
  • 0

Hi JColvin,

Thank you for the reply. I would like to use Pmod AD1: Two 12-bit A/D Inputs and Pmod DA4: Eight 12-bit D/A Outputs, Both are the 6-pin Devices. 

My Board Virtex ultra scale+ have the 12 pin PMOD (8-I/O and 2-Vdd and 2-GND). Can I use 6pins for connecting  ADC and another 6pins for DAC Simultaneously?                                                       Here I am attaching my Board PMOD pin Information.

            image.thumb.png.0a1eedb14fb507330f60a4bdd5bfe4d0.png

Share this post


Link to post
Share on other sites
  • 0

Hi @CKV,

Yes, you can use both Pmod simultaneously directly with your board. The catch here though is that you will need to use some cables to connect the two Pmods to the Pmod port (female receptacle is easiest in my mind), such as this cable since the two Pmods will not both physically fit into the two halves of the port. Realistically though, any cable that has 100 mil pitch between the wires will work.

Let me know if you have any questions.

Share this post


Link to post
Share on other sites
  • 0

Hi JColvin,

Thank you for the reply. So now by using the pmod splitter cable, I can connect both ADC and DAC, also I can send and receive data from DA/AD simultaneously.  If I buy AD1 and DA4 from Digilent, will they provide example RTL code?  

Share this post


Link to post
Share on other sites
  • 0

Hi @CKV,

We have a IP Core for a Pmod AD1 available on our GitHub here. It does not appear that we have an IP Core currently available for the Pmod DA4 (I'll ask if one can be created), but as a Pmod that uses the SPI protocol, it will implemented in a similar fashion to the Pmod NAV. Since you are using a non-Digilent board, when adding the IP to your project you will need to also make the Pmod interface external and then change your xdc file to constrain the pins.

Let me know if you have any questions.

Thanks,
JColvin

Share this post


Link to post
Share on other sites
  • 0

Hi JColvin,

Can I use AD2 and DA1 simultaneously by connecting to my 12 pin pmod on virtex ultra scale+? I found reference VHDL codes in digilent for both so I am planning to use the AD2 and DA1, instead of AD1 and DA4. 

 

Share this post


Link to post
Share on other sites
  • 0

Hi @CKV,

Since they are both 6-pin modules, yes, that combination will also work. Well, I guess the Pmod AD2 as a I2C based Pmod only has 4 pins (it shows 8 since it was designed with the idea that it can be part of a "daisy chain", but you will only need to attach one of the rows of 4 pins via a cable as mentioned earlier).

Let me know if you have any other questions.

Thanks,
JColvin

Share this post


Link to post
Share on other sites
  • 0

Hi @CKV,

Yes, that is correct, though looking at the project you might also need to change the vhdl for the clock portions if you have a different system clock frequency than the Nexys 3. I imagine if you are using a newer Virtex board, that you will likely be using Vivado which uses .xdc files as the constraint files rather than .ucf, but the principle is the same.

Let me know if you have any other questions.

Thank you,
JColvin

Share this post


Link to post
Share on other sites
  • 0

Hi JColvin,

Thank you for the reply. I can change from nexys 3 UCF to Virtex ultra scale+ XDC for those VHDL codes. The main module needs 100MHz clock, I can provide that frequency from one of the clock generators on Virtex ultra scale+.  What would be the maximum AD2 conversion rate?

Share this post


Link to post
Share on other sites
  • 0

Hi @CKV,

Based on page 8 of the datasheet for the embedded part of the Pmod AD2 (and provided my math is correct), I believe the maximum throughput rate for the Pmod AD2 using the 3.4 MHz frequency for I2C, would be a bit shy of 140 kHz.

Let me know if you have any other questions.

Thank you,
JColvin

Share this post


Link to post
Share on other sites
  • 0

Hi JColvin,

I am using Nexys 4 and trying to make Pmod AD2 works in high speed (3.4Mhz) but I couldn't.  I used the code diligent provided and works fine but only in standar mode (100khz).  I followed the sequence showed in page 25 of AD7991 datasheet but there is no way I can make it work.  It also says something about fast mode (400khz) but I haven't found any instruction to put ad7991 in fast mode neither.  Do you have something that can help me to work in high speed mode? I will really apreciate it.

Regards,

Danny

Share this post


Link to post
Share on other sites
  • 0

Hi @danny,

I would use the hackster.io arduino demo which is set to high speed mode here as a reference to what you need to do in your project. Are you using the Pmod AD2 IP core here and microblaze or are you using the  VHDL code from the resource center here?

thank you,

Jon

Share this post


Link to post
Share on other sites
  • 0

Hi Jon.  Actually, I was working on my own vhdl code for a specific aplication with high speed in ISE software because in the resource center I haven't found a code for high speed mode, only standar mode, which works perfect.

thanks,

Danny

Share this post


Link to post
Share on other sites
  • 0

Hi @danny,

 

I believe you need to send 0x08 to the  the address 0x28 as shown in the below Adruino code

void Init_AD7991(void)
{
 Wire.beginTransmission(AD7991_Adresse);
 Wire.write(0x08); // configuration of the I2C communication in HIGH SPEED Mode
 Wire.write(0x10); // configuration of Pmod AD2 (read of V0)
 Wire.endTransmission();
}

thank you,

Jon

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now