大家好,这里是程序员 杰克 。一名平平无奇的嵌入式软件工程师。
在日常fpga开发过程中,逻辑代码设计完成后,为了验证代码逻辑的正确性,优先使用逻辑仿真(modesim)进行验证。仿真验证通过后进行板级验证时,使用逻辑分析仪进行分析和验证逻辑是否正确。fpga两大主流厂商的软件集成逻辑分析仪供使用,altera的quartus自带signaltap、xilinx的vivado自带ila逻辑调试工具。
本篇总结和分享在xilinx编译工具vivado环境下,使用内嵌的逻辑分析仪(ila)的4种方法:
hdl代码实例化ila ip核block design添加ila ip核synthesis后对nets执行mark debug操作在hdl代码中使用属性关键字mark_debug本文以led每0.5s间隔亮灭工程为例,观测 led[0]信号以及led_cnt[24:0]时钟计数信号 ,演示ila使用的4种方法以及相关的注意事项。
01 hdl代码实例化ila ip核
在ip catalog中搜索ila,然后双击该ip核进行配置。
本示例中led[0]、led_cnt[24:0]信号位宽分别为1、25bit,具体配置如下所示;配置完成后,点击“ok”;在弹出的界面点击“generate”完成ip核的配置和生成。
在verilog代码中对刚生成的ila核进行实例化,在具体代码添加例化代码,如下所示:
ila_0 ila_0_inst0 ( .clk (clk ), // input wire clk .probe0 (led ), // input wire [0:0] probe0 .probe1 (led_cnt) // input wire [24:0] probe1);综合、实现、生成bit后写到fpga芯片便可观测到信号(此处不做演示)。
特别说明:对于纯fpga工程,杰克推荐该方式去使用ila;
02 block design添加ila ip核
在vivado中,除了使用hdl语言去描述设计,还可以通过block design图形化连接的方式进行设计。7系列的软核microblaze、带硬核的soc芯片(zynq、mpsoc等)的设计都是通过block和hdl相结合来描述设计。本文仍以纯fpga方式来说明在block design中使用ila核(纯fpga开发不建议)。ila使用操作如下:
创建/打开block design,在diagram界面,点击“+”按钮,搜索ila,然后双击该ip核进行配置。
参数配置的方式与上一小节一致,这里不作赘述。不同之处是在block design中使用ila核,ila核的实例化hdl代码会自动生成到block design文件中。
综合、实现、生成bit后写到fpga芯片便可观测到信号(此处不做演示)。
特别说明:
带microblaze软核/arm硬核的fpga的复杂设计中,模块接口的信号观测ila使用该方法;模块内部信号的观测ila使用上一小节的方式;两者可结合使用。
03 综合后添加mark debug
对工程执行综合,综合完成后,找到要观测的信号的nets,右键选择“mark debug”;
要观测信号的nets选择并设置完成后,点击“set up debug”;按照下面步骤配置debug ila参数;
debug ila配置完成后,保存synthesized design后会在约束文件(.xdc)中生成ila的配置约束,如下图所示:
综合、实现、生成bit后写到fpga芯片便可观测到信号(此处不做演示)。
特别说明:mark_debug仅可以对nets类型进行操作,不能对cells操作;
04 hdl中使用mark_debug
mark_debug描述
vivado设计ide提供了一些属性供开发者使用,本篇推文主要是描述mark_debug属性约束的使用和注意事项。详细可参考ug912文档的内容。使用mark_debug的条件如下:
约束对象必须是nets类型
在nets信号的顶端声明处进行约束
vivado提供了包括verilog、vhdl、xdc三种语法。三种语法如下所示:
//verilog语法约束语法:(* mark_debug=value *) #value = true/flase使用示例:(* mark_debug=true *) output wire led;(* mark_debug=true *) reg [24:0] led_cnt;//vhdl语法约束语法:声明: attribute mark_debug : string;语法: attribute mark_debug of signal_name : signal is value;//signal_name-内部信号, value = true/false使用示例:signal led : std_logic;attribute mark_debug : string;attribute mark_debug of led : signal is true;//xdc语法约束语法: set_property mark_debug value [get_nets ] #value = true/flase#net_name-是信号名使用示例:set_property mark_debug ture [get_nets led];使用mark_debug标记生成ila观测信号步骤
在led[0]、led_cnt[24:0]信号的顶端声明处进行约束,省略代码如下:
module led_top( input wire clk_i, input wire rst_n, (* mark_debug=true *) output wire led_o);...(* mark_debug=true *) reg [24:0] led_cnt;...endmodule执行综合操作,综合完成后,打开综合设计,然后点击“set up debug”;
按照下面步骤配置debug ila参数;
* debug ila配置完成后,保存synthesized design后会在约束文件(.xdc)中生成ila的配置约束,如下图所示:
综合、实现、生成bit后写到fpga芯片便可观测到信号(此处不做演示)。
特别说明:
mark_debug约束标记会阻止vivado对该信号以及下级信号的优化。因此,在逻辑验证完成后,要删除mark_debug约束标记或者将其失能。
05 文章总结
上面总结和分享了4种vivado下使用ila的方法。杰克更推荐使用前面两种实例化的方法去使用ila ip核。对于 纯fpga hdl开发 ,配置生成ila核并在hdl代码中实例化使用便可;对于带软核/硬核的fpga开发 ,在block模块外部接口信号通过添加ila核,block模块内部信号则在hdl代码中实例化ila核,两者结合使用。
智慧交通的风口又来了吗
十五周年辉煌呈现,2022深圳国际全触与显示展开启交互新纪元,触达显示新赛道
中国联通已实现全国两会新闻媒体5个报道区域的5G全覆盖
【专家观点】应对智能公用事业中能源安全的挑战
自动驾驶能否解决马路拥堵问题?
集成逻辑分析仪(ILA)的使用方法
夏普4色LED电视亮相CES2012
基于PIC单片机的可编程电源的设计与应用
5G时代万物互联互通,我国芯片产业会有怎样的新突破
交换机的种类以及使用
骁龙845多核AIE加持,小米MIX 2S为您带来极致性能体验
三星Note7爆炸丑闻之后总算有好消息,赔付苹果的4个亿不用付
双核锁步安全芯片的关键技术
欧宝正召回迄今售出的所有Ampera-e电动车
苹果和英特尔大力发展的Thunderbolt会走向普及吗
维智科技WAYZONE场景时空智能平台荣获最佳技术营销平台
什么是电阻?电阻为什么会存在
中国联通将积极进行5G+工业互联网融合应用来推动行业数字化转型
数字图像解决方案开发商豪威科技发布了新品OAX4000
考勤机/收费机的印字颜色及其他特性