Chipscope调试IIC
0赞在之前用FPGA实现对AT24C02驱动时候,因为AT24C02是IIC总线,所以要设计IIC总线的程序。
之前已经说明了该程序是怎么设计的。但是在设计的过程中,我们不能保证我们写的程序第一次就是正确的,所以就需要调试。我在做的时候,就调试了好多次,用了各种方法,花了三天时间。
以下就介绍下使用chipscope进行调试。
当我们把软件生成的bit流下到芯片中后,就只能观察现象来看是否实现我们的功能。这里的功能是通过串口将数据写入到AT24C02中,然后在将数据读回来。那怎么知道数据是否正确写入以及数据是否正确回读。这就需要chipscope了。因为我用的是xilinx的开发板,而xilinx的在线逻辑分析仪就是chipscope。
首先新建一个chipscope。
建立后,会弹出chipscope的界面。
新建ILA。出现配置ILA界面
对其中参数说明一下:
1处触发端口数据组数,设置几组触发端口数据。有时候,我们可能需要观察多组数据。
2处触发宽度。指该触发组要观察的信号位数。
3处匹配类型。设置触发信号有效类型。X任意电平,R上升沿,F下降沿
4.计数器。这个用来指示在触发信号有效个数为多少的时候,才采集信号。
采样深度:采样多少个数据。
这里设置在时钟的什么边沿触发信号。
这里是设置触发和数据采集信号。
Clock port:设置采样的时钟端口。这个时钟一定要设对,这里不能用系统的50M时钟,因为这个时钟太快,在这个时钟下,采样1024个点,根本就完不成一次读写。
TRIGGER PORT:设置触发信号端口。
那么这里的界面就会变为
表示数据端口不能产生触发信号,只能采集信号。
进入设置信号端口:
首先是设置采样时钟端口。这里是选择delay_time[6]这个为采样时钟。这个delay_time是用来计时每个状态保持一定时间的计数器。
然后是设置触发信号。
这里选择状态机的状态,读取数据,SCL,SDA,这样就可以观测这么信号了。Enable_read表示SDA是读还是写,1表示读,0表示写。Look_i2c_sda_OBUF是SDA作为输入时候的输入值。I2c_sda_reg是SDA作为输出时候的输出值。
如果1没有红色出现,说明信号连接正确。否则连接错误,需要进行修改。无误后,点击2.这样就生成了一个chipscope了。
下面要设置生成bit流的属性。
时钟要设置为JTAG时钟。创建回读数据文件要选择。
然后就开始生成bit流。
生成位流后,双击最后一个,启动chipscope。
点击红色指示的初始化,这时候chipscope会自动搜寻FPGA芯片。选择OK。
按照图上操作,选择生成的bit文件。
点击开始。启动采集信号。这里设置的触发信号为任意。即在采样时钟的上升沿就采集数据。而采样数据是要在进行读或者写才会产生。
这里采集的读数据的波形。之前已经将数据写入。
数据采集完成后,点击waveform观看波形。
放大看波形。
这样,就可以根据波形,观测内部信号,从而判断写的程序是否正确。