kaiserschmarren87
Member level 4
- Joined
- May 15, 2013
- Messages
- 75
- Helped
- 9
- Reputation
- 18
- Reaction score
- 9
- Trophy points
- 1,288
- Location
- Germany
- Activity points
- 1,838
Read chapter 6 for information on how to control the DRP interface: https://www.xilinx.com/support/documentation/user_guides/ug071.pdf
Chapter 6 has some timing diagrams of how you will send data to it.
Read Appendix C for the registers accessible in the MGT and their DRP address: https://www.xilinx.com/support/documentation/user_guides/ug076.pdf
As there are such a large number of parameters in the V4 MGTs you might want to create the transceiver core(s) with each of the possible rates and take a look at the changes to the values for each of the parameters. Then it should be a lot easier to correlate that with the appropriate DRP registers you need to modify.
Regards
You take a look in the directory where you generate the various versions of the same MGT core. In that directory should be a file that has the definition of all the settings to generate that core again (I've forgotten the file extension for ISE). The file is text so you should be able to easily diff the files for each version of the core against whatever base version you use. Then you'll know exactly which settings get changed for each version.When you say "take a look at the changes to the values for each of the parameters", you mean the simulation output ? I have added the rocketIO wizard configuration of my project, I hope what I did is right in that. I am not using TX since I am receiving data from ADC.
You take a look in the directory where you generate the various versions of the same MGT core. In that directory should be a file that has the definition of all the settings to generate that core again (I've forgotten the file extension for ISE). The file is text so you should be able to easily diff the files for each version of the core against whatever base version you use. Then you'll know exactly which settings get changed for each version.
Regards
That was the whole point of this, isn't it? I'm assuming you couldn't afford to download different bit files for the design or perform partial reconfiguration.kaiserschmarren87 said:Also when I generate a rocketIO wrapper for 6.4 Gbps and synthesize the design and get a .bit file. Then the same bit file can be used to work for other versions too by using these DRP settings. Am I right ?
I'm not sure but I suspect you'll need to change them.
RXRCPADJ looks like it might be Receive recovered clock phase adjust. Check to see if the difference between the values is large or small, if it's small you can probably get away without changing it. I suspect it's probably not that small a difference between the values.
RXVCODAC_INIT seems to be part of the PLL adjustments based on the line rate and the reference clock, which probably needs to change if the line rate changes (which it does in your case)
Regards
%read the frequency or line rate from the user
frequnecy = input(prompt);
if (frequency == 6.4)
drp_data = 81; %DRP Address 7D for MGTA and 59 for MGTB
elseif (frequency == 4.8)
drp_data = A2; %DRP Address 7D for MGTA and 59 for MGTB
elseif (frequency == 3.125)
drp_data = A2; %DRP Address 7D for MGTA and 59 for MGTB
end
I recommend they be changed. The point of the note is that the settings selected by the wizard shouldn't be changed manually from the defaults selected by the tool for the requested transceiver implementation. You actually want to use different implementations for different line rates, therefore you aren't manually changing them to something different but to the wizard values for those other implementations.RXRCPADJ value is small for different line rate and RXVCODAC_INIT varies too. But from the document, it says not to change these values. So I hope it is not needed as you suspected. But the other two parameters are important. So I will use them in the protocol.
I don't follow this. Are you saying that you read the DRP (how are you reading this with a HW circuit you added to the design that interfaces to a microblaze/eternal_UC/FSM/something_else?) then write the new values back to the DRP through a PC from Matlab? How do you do this? I have no idea how you expect to control the DRP through Matlab.The current design reads the DRP data and then writes the data back to FPGA. When I change the line rate and reset, DRP value doesn't change. So I guess the protocol from PC is not getting the changed line rate value ? Does it mean I have to give manual line rate value that will choose proper DRP data which will be sent to FPGA ?
I have written something like this in MatLab:
Oh k. Thank you for that info. I thought it should not be changed. But I observe that, those two parameters haven't been used in the current design. So I will try to implement those two parameters into the protocol and see the changes.I recommend they be changed. The point of the note is that the settings selected by the wizard shouldn't be changed manually from the defaults selected by the tool for the requested transceiver implementation. You actually want to use different implementations for different line rates, therefore you aren't manually changing them to something different but to the wizard values for those other implementations.
Here is the block diagram of the logic for DRP the data flow in the design.I don't follow this. Are you saying that you read the DRP (how are you reading this with a HW circuit you added to the design that interfaces to a microblaze/eternal_UC/FSM/something_else?) then write the new values back to the DRP through a PC from Matlab? How do you do this? I have no idea how you expect to control the DRP through Matlab.
Perhaps you need to post a block diagram of the architecture of your system that interfaces Matlab to the DRP port.
Regards
Okay now that I have a picture of the design it's clear.
So your serial interface (SPI?) is communicating to the DRP. You've run simulations on that circuit for both the read and write? The model you use to drive the serial interface was verified to be producing the correct protocol?
If you have access to chipscope you might want to connect the DRP to that. Otherwise another option is to create your own chipscope by connecting a FIFO to the DRP port and writing to the FIFO on every clock cycle after the start of a read or write transaction. You can connect the read side of the FIFO to your serial interface so you can read back the waveform in your Matlab user interface.
PC to FPGA interface is RS232. MatLab is used to send address and data information using a protocol. This protocol carries DRP address and data which it will write into the DRP fo the transceiver.
I reprogrammed the MatLab which has all 3 different line rate DRP config values. I used ChipScope to check the value in DO[15:0] and found that they change as expected. But now I don't get the synchronized output values even if I am changing the line rate and the DRP values. Now I am guessing there may be some other issues in the design apart from this which I expected.
In #8,I already recommended that any value that was different in the wizard created transceiver should be modified.
Regards
I have tried bit file with 4.2 Gbps separately and it works perfectly for the wizard's default values. No issues. I give a reset to the Transceiver, after the DRP update.You've tried running the FPGA with the 4.2Gbps line rate bit file directly? You're give a reset to the transceivers after DRP update?
Based on the diagram I assume you are changing the REFCLK using the PLL? When do you change the value before or after you perform the DRP update? I would probably put the transceiver in reset, change the PLL settings for the 4.2Gbps REFCLK, reprogram the transceiver settings with DRP, and then release the reset. Are you doing something different and or have you tried different ordering of programming/reset/REFCLK changes?
This is what user guide says about RXCLKSTABLE:RXUSRCLK is a version of the recovered clock that is produced from the core. It's there so you can run the user interface side of your logic synchronously to the core. Don't know about RXCLKSTABLE but I suspect it's used like TXCLKSTABLE. They are probably used to keep things in reset until the clock goes stable. What does the datasheet say?
No issue with BER but I just wanted to confirm.BER shouldn't affect anything. It should be something that tells you the amount of bit errors you are getting on the link. (I admit I haven't looked it up).
It probably has something to do with the REFCLK changing. Have you tried chipscoping the transceiver a bit and determine if any of the error status is reporting anything?
I haven't worked with the V4 transceiver for a long time, so I don't remember all the status that you can observe from the IP.
If it takes several resets to get 6.4 to sync to the input, then you might want to carefully verify there isn't some reset syncrhonization required and/or reset ordering required. I remember having to change the reset ordering based on suggestions from our FAE.
Regards
The transceiver has no issues. 3.2, 4.2 and 6.4 line rates work perfectly when they are worked with separate .bit files. But I still could not figure out why 4.2 line rate is not working when the same .bit file works for 6.4 and 3.2 line rate ! I load correct DRP values from PC and Reset the transceiver as I did for other line rates.
6.4 and 3.2 have same values for DRP parameters under consideration except for RXOUTDIV2SEL.
Whereas for 4.2, all the parameter values are different and even the REFCLK. I tried various combinations of REFCLKs for 4.2 Gbps but ended up with no change in the output. Not sure whether I am missing something here but I am not going to giveup now....
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?