集成逻辑分析器(Integrated Logic Analyzer, ILA)IP核是一个可定制的逻辑分析器,用于监测设计的内部信号。ILA核心包含了现代逻辑分析器的许多高级特性,比如布尔触发方程(boolean trigger equations)和边沿转换触发(edge transition triggers)。
由于ILA核心与被监测的设计是同步的,因此应用于设计的所有时钟约束也会应用于ILA核心的组件。这意味着ILA能够准确地捕获和记录设计在特定时钟条件下的行为,这对于调试和验证复杂系统特别有用。
1 功能概述
在FPGA设计中,信号被连接到ILA IP核的时钟和探针(probe)输入(如图1-1所示)。这些连接到探针输入的信号以设计速度进行采样,并使用片上的块RAM(BRAM)进行存储。IP核的参数指定了探针数量、跟踪采样深度以及每个探针输入的位宽。
注意:在图1-1中,probe3到probe1022的数值范围用省略号(...)表示。
在将设计加载到FPGA后,使用Vivado逻辑分析器软件为ILA测量设置触发事件。当触发事件发生时,样本缓冲区将被填满并上传到Vivado逻辑分析器中。可以通过波形窗口查看这些数据。
探针采样和触发功能是通过常规的FPGA逻辑实现的。片上的块RAM(BRAM)用于存储数据,直到数据被软件上传。触发事件、捕获数据或与ILA核心通信不需要任何用户输入或输出。
简而言之,ILA提供了一个完全自动化的解决方案,用于捕获FPGA设计中的内部信号数据,而无需用户进行任何手动操作。通过Vivado逻辑分析器软件,可以轻松地设置触发条件、捕获数据并在波形窗口中查看结果。
ILA探针触发比较器
每个探针输入都连接到一个能够执行各种操作的触发比较器。在运行时,该比较器可以设置为执行等于(=)或不等于(!=)的比较。这包括匹配特定级别的模式,如X0XX101。此外,它还能检测边沿转换,如上升沿(R)、下降沿(F)、任一边沿(B)或无转换(N)。触发比较器还可以执行更复杂的比较,包括大于(>)、小于(<)、大于或等于(≥)和小于或等于(≤)。
重要提示:触发比较器是在运行时通过Vivado逻辑分析器进行设置的。
ILA触发条件
触发条件是每个ILA探针触发比较器结果的布尔“与”(AND)或“或”(OR)运算的结果。使用Vivado逻辑分析器,可以选择是将探针触发比较器进行“与”运算还是“或”运算。当所有ILA探针比较都满足时,“与”设置会触发事件。而当任何ILA探针比较满足时,“或”设置会触发事件。这个触发条件就是用于ILA跟踪测量的触发事件。
2 端口
时钟
clk输入端口是ILA IP核用于寄存探针值的时钟。为了获得最佳结果,它应该是与连接到ILA IP核探针端口的设计逻辑同步的时钟信号。
该时钟必须是一个自由运行时钟,即不会停止运行的时钟(时钟没有与其他时钟源相位锁定)。非自由运行时钟的例子包括GT TXOUTCLK、RXOUTCLK、RXRECCLK等。
探针
输入端口,探针端口的编号 <n>
的范围是从 0 到 1,023。每个探针端口的宽度 <m>
范围是从 1 到 4,096 位。这意味着可以捕获从单个位到高达4,096位的信号。
需要把端口声明为向量。例如,对于一个1位的探针端口,可以使用 probe<n>[0:0]
的方式来声明它。
触发输出(Trig_out)
可以由触发条件(trigger condition)或外部 trig_in
端口生成。这允许用户根据需要在运行时从逻辑分析仪中切换使用触发条件还是外部触发输入。
触发输入(Trig_in)
它通常用于基于处理器的系统,如 Zynq-7000 AP SoC,以实现嵌入式交叉触发(Embedded Cross Trigger)。这个端口允许用户从外部源(如另一个ILA或硬件调试器)接收触发信号,以控制数据捕获的开始。
触发输出的确认信号(trig_out_ack)
用于对 trig_out
输出端口进行确认。在ILA中,当另一个ILA、用户设计或处理器正确接收到trig_out
信号时,会发送trig_out_ack
作为确认。
触发输入的确认信号(trig_in_ack)
用于对 trig_in
输入端口进行确认。在ILA中,当 ILA 成功接收到来自外部源的 trig_in
触发信号时,它会通过 trig_in_ack
端口发送一个确认信号,以通知外部源触发信号已被正确接收。
3 定制 ILA IP核
要定制ILA IP核并对其配置时,请按照以下步骤操作:
(1)打开Vivado项目:选择“File” > “Open Project”以打开现有项目,或选择“File” > “New Project”以创建新项目。
(2)打开IP目录:在Vivado中,打开IP Catalog并找到ILA IP核。
(3)添加ILA IP核:双击ILA以打开ILA IP核的配置界面(在Vivado IDE中)。
3.1 常规选项面板
-
Component Name:使用此文本框为ILA IP核提供一个唯一的模块名称。
-
Monitor Type:此选项指定ILA应该调试的接口类型。当前此参数的值为“native”和“AXI”。
-
C_NUM_MONITOR_SLOTS(仅适用于AXI类型):此选项允许您选择需要连接到ILA的AXI接口插槽数量。
-
Number of Probes(探针数量):使用此文本框选择ILA IP核上的探针端口数量。在Vivado IDE中使用的有效范围是1到64。如果您需要超过64个探针端口,您需要使用Tcl命令流程来生成ILA IP核。
-
Sample Data Depth(样本数据深度):从下拉菜单中选择合适的样本数据深度。这决定了在触发时能够捕获的数据量。
-
Same No. of Comparators for all Probes(所有探针使用相同数量的比较器):勾选以启用此选项,以便所有已启用的端口和接口都使用相同数量的比较器。
-
No. of Comparators(比较器数量):选择适用于所有已启用探针的比较器数量。在这个IP版本中,每个探针的比较器数量限制增加到16个。现在,在基本触发模式和高级触发模式中,比较器数量都可以设置为1到16之间的任何数字。
-
Trigger Out Port(触发输出端口):勾选以启用可选的触发输出端口。此端口可以在触发发生时提供外部信号。
-
Trigger In Port(触发输入端口):勾选以启用可选的触发输入端口。此端口允许您从外部信号源接收触发。
-
Input Pipe Stages(输入管道阶段):选择您希望为探针添加的寄存器数量。此参数适用于所有探针。添加更多的输入管道阶段可以增加捕获数据的稳定性,但可能会增加延迟。
-
Capture Control(捕获控制):勾选以启用跟踪捕获的限定器。这允许您根据特定的条件(如时钟边缘)来限定捕获的数据。
-
Advanced Trigger(高级触发):勾选以启用基于状态机的触发序列。这提供了更复杂的触发条件,可以根据多个信号的状态和时序关系来触发捕获。
3.2 Probe Port Panels
Probe Widths:在Probe Port Panels中,您可以配置每个探针端口的宽度。
Number of Comparators:当选择了“Advanced Trigger”选项并且禁用了“Same No. of Comparator for all Probes”时,此面板上会出现每个探针的比较器数量配置选项。这允许您为每个探针独立设置比较器的数量。
3.3 AXI Monitor Configuration
C_ENABLE_AXI_MON:此选项用于在ILA IP核中启用AXI监控器。当您的设计包含AXI接口并希望在接口级别进行调试时,这会非常有用。
AXI Read/Write Channel User Widths(如C_SLOT_0_AXI_ARUSER_WIDTH、C_SLOT_0_AXI_RUSER_WIDTH等):这些选项用于配置AXI读写通道的用户数据宽度。默认值通常为1,但您可以根据需要进行更改。
C_SLOT_0_AXI_ID_WIDTH:此选项指定AXI ID的宽度。有效范围是从1到32。
C_SLOT_0_AXI_DATA_WIDTH:此选项指定AXI数据宽度。有效值包括32、64、128、256、512和1,024。
C_SLOT_0_AXI_ADDR_WIDTH:此选项指定AXI地址宽度。有效范围是从1到32。
C_SLOT_0_AXI_PROTOCOL:此选项指定AXI接口协议。支持的AXI协议包括AXI3、AXI4、AXI4-Lite和AXI4-Stream(AXIS)。
AXIS Interface Configurations(如C_SLOT_0_AXIS_TDATA_WIDTH、C_SLOT_0_AXIS_TID_WIDTH等):对于AXI Stream(AXIS)接口,也有类似的配置选项,如数据宽度、ID宽度、用户数据宽度和目的地址宽度。
3.4 约束
ILA IP核中的XDC文件包含适当的错误路径约束,用于防止对时钟域交叉同步路径的过度约束。这是非常重要的,因为时钟域交叉通常涉及复杂的时序关系,如果不正确处理,可能会导致时序违规或不必要的性能损失。
与ILA IP核的clk
输入端口相连的时钟信号应在设计中得到正确的约束。这包括时钟的频率、相位关系(如果有的话)以及时钟的不确定性(jitter和skew)。