weiqi7777

Chipscope调试IIC

0
阅读(4050)

在之前用FPGA实现对AT24C02驱动时候,因为AT24C02是IIC总线,所以要设计IIC总线的程序。

之前已经说明了该程序是怎么设计的。但是在设计的过程中,我们不能保证我们写的程序第一次就是正确的,所以就需要调试。我在做的时候,就调试了好多次,用了各种方法,花了三天时间。

以下就介绍下使用chipscope进行调试。

当我们把软件生成的bit流下到芯片中后,就只能观察现象来看是否实现我们的功能。这里的功能是通过串口将数据写入到AT24C02中,然后在将数据读回来。那怎么知道数据是否正确写入以及数据是否正确回读。这就需要chipscope了。因为我用的是xilinx的开发板,而xilinx的在线逻辑分析仪就是chipscope。

首先新建一个chipscope。

clip_image002

建立后,会弹出chipscope的界面。

clip_image004

新建ILA。出现配置ILA界面

clip_image006

对其中参数说明一下:

1处触发端口数据组数,设置几组触发端口数据。有时候,我们可能需要观察多组数据。

2处触发宽度。指该触发组要观察的信号位数。

3处匹配类型。设置触发信号有效类型。X任意电平,R上升沿,F下降沿

4.计数器。这个用来指示在触发信号有效个数为多少的时候,才采集信号。

clip_image008

采样深度:采样多少个数据。

这里设置在时钟的什么边沿触发信号。

clip_image010

这里是设置触发和数据采集信号。

Clock port:设置采样的时钟端口。这个时钟一定要设对,这里不能用系统的50M时钟,因为这个时钟太快,在这个时钟下,采样1024个点,根本就完不成一次读写。

TRIGGER PORT:设置触发信号端口。

如果在前一页设置中,没有勾选clip_image011

那么这里的界面就会变为

clip_image013

表示数据端口不能产生触发信号,只能采集信号。

点击clip_image014

进入设置信号端口:

clip_image016

首先是设置采样时钟端口。这里是选择delay_time[6]这个为采样时钟。这个delay_time是用来计时每个状态保持一定时间的计数器。

然后是设置触发信号。

clip_image018

这里选择状态机的状态,读取数据,SCL,SDA,这样就可以观测这么信号了。Enable_read表示SDA是读还是写,1表示读,0表示写。Look_i2c_sda_OBUF是SDA作为输入时候的输入值。I2c_sda_reg是SDA作为输出时候的输出值。

clip_image020

如果1没有红色出现,说明信号连接正确。否则连接错误,需要进行修改。无误后,点击2.这样就生成了一个chipscope了。

下面要设置生成bit流的属性。

clip_image022clip_image024clip_image025

时钟要设置为JTAG时钟。创建回读数据文件要选择。

然后就开始生成bit流。

生成位流后,双击最后一个,启动chipscope。

clip_image026

点击红色指示的初始化,这时候chipscope会自动搜寻FPGA芯片。选择OK。

clip_image028clip_image030

clip_image032

按照图上操作,选择生成的bit文件。

clip_image034

点击开始。启动采集信号。这里设置的触发信号为任意。即在采样时钟的上升沿就采集数据。而采样数据是要在进行读或者写才会产生。

这里采集的读数据的波形。之前已经将数据写入。

数据采集完成后,点击waveform观看波形。

clip_image036

放大看波形。

clip_image038

这样,就可以根据波形,观测内部信号,从而判断写的程序是否正确。