UPGRADE YOUR BROWSER

We have detected your current browser version is not the latest one. Xilinx.com uses the latest web technologies to bring you the best online experience possible. Please upgrade to a Xilinx.com supported browser:Chrome, Firefox, Internet Explorer 11, Safari. Thank you!

cancel
Showing results for 
Search instead for 
Did you mean: 
Visitor sachinm1984
Visitor
12,755 Views
Registered: ‎03-24-2010

Connecting IO pins in ChipScope

Hello,

I am trying to debug my system using ChipScope CORE Generator tool. The system has I2C IP used in Microblaze. When I instantiate the MicroBlaze component in the top module and connect the bidirectional I2C pins to the data ports, I get the following error:

ERROR:NgdBuild:924 - bidirect pad net 'I2C_SCL' is driving non-buffer
   primitives:
     pin D on block CS_ILA1/U0/I_DQ.G_DW[0].U_DQ with type FDP


I read on the net that this problem can be solved by instantiating IBUF and OBUF for the I2C pins. But when I do that, I get the following error:


ERROR:Xst:528 - Multi-source in Unit <IIC_PLL> on signal <I2C_SCL>; this signal is connected to multiple drivers.
Drivers are:
   Output signal of OBUF instance <I2C_SCL_OBUF>
   Output port IOBUF:IO of instance <M1/iobuf_0>



Please suggest me the correct way to connect the I2C signals to the data ports.



Regards,

Sachin

0 Kudos
9 Replies
Xilinx Employee
Xilinx Employee
12,749 Views
Registered: ‎01-03-2008

Re: Connecting IO pins in ChipScope

You can not connect the O of an OBUF, the I of an IBUF or the IO of an IOBUF to anything other than a top level port because these pins on the primitives represent the external device connection.

 

Instead you need to use the nets connected to the I of the OBUF, O of an IBUF or the T, O, I of IOBUF to the ChipScope ILA core.

------Have you tried typing your question into Google? If not you should before posting.
Too many results? Try adding site:www.xilinx.com
0 Kudos
Visitor sachinm1984
Visitor
12,740 Views
Registered: ‎03-24-2010

Re: Connecting IO pins in ChipScope

Hello mcgett,

 

Thanks for your reply.  Yes that is what I am trying to do. This is what my code looks like

 

M1: MicroBlaze port map( uart_rx, uart_tx, leds, I2C_SCL, I2C_SDA, fpga_clock, fpga_reset_ex);
CS_ICON1: ChipScope_ICON port map(control_bus);
CS_ILA1: ChipScope_ILA port map(control_bus, fpga_clock, ILA_data, ILA_trig0);

I2C_SCL_IBUF: IBUF port map( I2C_SCL_I, I2C_SCL);
I2C_SDA_IBUF: IBUF port map( I2C_SDA_I, I2C_SDA);

I2C_SCL_OBUF: OBUF port map( I2C_SCL, I2C_SCL_O);
I2C_SDA_OBUF: OBUF port map( I2C_SDA, I2C_SDA_O);

 

ILA_data(0) <= I2C_SCL_I;
ILA_data(1) <= I2C_SDA_I;
ILA_data(2) <= I2C_SCL_O;
ILA_data(3) <= I2C_SDA_O;

 

 

This code is giving me the second error I mentioned before. Declaring IBUF and OBUF components for I2C signals in the code seems to cause problems because of the existing IBUF, OBUF and IOBUF components synthesized for the I2C signals by the ISE. Is there anyway I can use the signals from the IBUF and OBUF synthesized by ISE so that I don't have to instantiate IBUF and OBUF components?

 

 

Regards,

 

Sachin

0 Kudos
Xilinx Employee
Xilinx Employee
12,728 Views
Registered: ‎01-03-2008

Re: Connecting IO pins in ChipScope

A couple of things.

 

1) Instantiating modules without including the port names is a bad design practice as it relies about the ordering within the module definition to match the signals to the ports. Another designer looking at your code would have to have both the module and the instantiation viewable at the same time to determine if the connections are correct.  Your code should look like this.

         I2C_SCL_IBUF : IBUF port map (O=>I2C_SCL_I, I=>I2C_SCL); 

 

2) I2C is a bi-directional bus the SCL and SDA need to either be the IO pin of an IOBUF or an IBUF/OBUFT combination.

 

3) Your MicroBlaze module must include all of the IO cells (and the IOBUF for the I2C interface), so in order to observe the signals you must insert the ILA core in the MicroBlaze module.  I am not an EDK expert, but so I don't know if this is possible within EDK.  If it isn't then you could use the ChipScope Core Inserter to add the ILA after synthesis or connect these 4 ILA data pins to another available signal and after the design has been placed and routed use FPGA Editor to reassign the ILA data pins to these locations.

 

The ChipScope User Guide should have all of the information that you need to do this. 

 

 

 

------Have you tried typing your question into Google? If not you should before posting.
Too many results? Try adding site:www.xilinx.com
0 Kudos
Visitor sachinm1984
Visitor
12,711 Views
Registered: ‎03-24-2010

Re: Connecting IO pins in ChipScope

Thanks for the useful pointers. I will try using the Core Inserter.
0 Kudos
Visitor sachinm1984
Visitor
12,708 Views
Registered: ‎03-24-2010

Re: Connecting IO pins in ChipScope

When I use the core inserter, I am also able to connect the signals inside MicroBlaze to the ILA data port. When I connect the signals from MicroBlaze module such as M1/fpga_0_Generic_IIC_Bus_Scl_I, M1/fpga_0_Generic_IIC_Bus_Scl_O, M1/fpga_0_Generic_IIC_Bus_Sda_I, M1/fpga_0_Generic_IIC_Bus_Sda_O to the ILA data port, I see no change in signals in ChipScope. I have a working program for writing to a I2C device and I get the expected output out of the I2C device. So the problem is not with the program. Somehow, ChipScope is not detecting the changes. What could be the problem?
0 Kudos
Xilinx Employee
Xilinx Employee
12,703 Views
Registered: ‎01-03-2008

Re: Connecting IO pins in ChipScope

Are these pins also on the ILA trigger port?  and used as part of the trigger qualifier?   If not then this is likely your problem.

 

The other potential issue is the ILA clock that is used to capture the data.  The clock must be synchronous with the data.  Since IIC runs very slow (400kbps max), the IIC core is likely gating the data input/output to slow it down from the faster internal clock.  You will also need to take this into consideration.

------Have you tried typing your question into Google? If not you should before posting.
Too many results? Try adding site:www.xilinx.com
0 Kudos
Visitor sachinm1984
Visitor
12,695 Views
Registered: ‎03-24-2010

Re: Connecting IO pins in ChipScope

I have added the I2C signals as trigger and chosen the M1/sys_clk_s net as the clock. sys_clk_s is only clock I can see inside MicroBlaze. In the technology schematic, I can see that the I2C wrapper is getting this as the clock signal. Still I cannot see any change in the I2C signals in ChipScope.

 

Also I have observed that both these signals are always Low. They do not get triggered if I chose R, F or 1 trigger condition.


Do you want me to include some screenshots or part of code which will help you understand the cause of the problem better?
0 Kudos
Xilinx Employee
Xilinx Employee
12,687 Views
Registered: ‎01-03-2008

Re: Connecting IO pins in ChipScope

What you are reporting, the I2C link/application is working, but the transitions are not being shown in the ChipScope ILA core, doesn't make sense.

 

Do you have other trigger qualifiers?  Or are you just triggering on the SDA output signal?

 

I would suggest that you check the placed and routed design in FPGA Editor to verify that the right nets were connected.

------Have you tried typing your question into Google? If not you should before posting.
Too many results? Try adding site:www.xilinx.com
0 Kudos
Visitor sachinm1984
Visitor
12,668 Views
Registered: ‎03-24-2010

Re: Connecting IO pins in ChipScope

Yes, I have SDA as the other trigger qualifier. I did check the P&R design. It is correctly connected to the I2C signals. But the I2C signals do not show any change. I will get back to you if I find something new.

0 Kudos