vivado 错误怎么改
2个回答
展开全部
Vivado Logic Analyzer的使用
chipscope中,通常有两种方法设置需要捕获的信号。
1.添加cdc文件,然后在网表中寻找并添加信号
2.添加ICON、ILA和VIO的IP Core
第一种方法,代码的修改量小,适当的保留设计的层级和网线名,图形化界面便于找到
需要捕获的信号。
第二种方法,对代码的改动量大一些,同时需要熟悉相关IP的设置,优点是,可以控制
ICON,并调用VIO。
与之类似,Vivado也有着两种方法进行设置。
1.在综合后的网表中寻找相关信号,右键点开菜单,然后设置mark debug
2.添加ILA,VIO的IP Core
第一种方法与chipscope的第一种方法极为类似:
1.都需要综合后才能设置;
2.都需要保留一定的设计层级或者网线名来便于寻找信号;
3.并非所有信号都可以被捕获,不能捕获的信号,chipscope中是显示为灰色,vivado
中是没有mark debug的选项在右键菜单中;
第二种方法就更为类似了,vivado可以兼容ISE的IP,所以可以直接调用chipscope的相
关IP,调试时也只是用Chipscope,另外可以使用Vivado自己的ILA IP,来进行设计,
但最大的问题是Vivado不提供ICON的IP以供选择,进一步埋没了ICON的地位。
另外,早起的Vivado IP Catalog提供Chipscope的ICON、ILA和VIO IP Core可以选择,目前已经取消了这些IP,只支持Vivado自己的ILA/VIO IP Core。
这里提供一个非常简单的设计代码,用于Vivado Logic Analyzer的研究。
`timescale 1ns / 1ps
module Nexy_4 (
input I_CLK,
output [3:0] O_ST_COUNTER,
output O_TIMECOUNTER_OUTPUT
);
wire CLK_100;
clk_wiz_0 CLK_UNIT
(
.clk_in1 (I_CLK),
.clk_out1 (CLK_100),
.locked ()
);
reg [7:0] startup_counter = 'b0;
always @ (posedge CLK_100)begin
if(startup_counter == 8'b11111111)begin
startup_counter <= 8'b00000011;
end else begin
startup_counter <= startup_counter + 8'b1;
end
end
assign O_ST_COUNTER = startup_counter[7:4];
wire [47:0] TimeCounter_Result_wire ;
reg [47:0] TimeCounter_Result_reg = 'b0 ;
reg TimeCounter_Output ;
always @ (posedge CLK_100)begin
TimeCounter_Result_reg <= TimeCounter_Result_wire;
end
TimeCounter TimeCounter_Unit (
.CLK ( CLK_100 ), // input wire CLK
.A ( 2'b01 ), // input wire [1 : 0] A
.C ( TimeCounter_Result_reg ), // input wire [47 : 0] C
.P ( TimeCounter_Result_wire ) // output wire [47 : 0] P
);
always @ ( posedge CLK_100 )begin
TimeCounter_Output <= TimeCounter_Result_reg[47];
end
assign O_TIMECOUNTER_OUTPUT = TimeCounter_Output ;
endmodule
综合后的Netlist中选择信号进行捕获的方法。
只有Nets下的信号可以设置mark debug。
从原理上来说是很不合理的。Chipscope的捕获界面中,只有Reg信号可以被抓取,而Vivado是Net,从实际的角度说也是很不合理的,LUT可以直接被抓去,从原理上和时序上,对设计都是不合适的。
在Set Up Debug中,工具会自动分析信号的所在时钟域,并添加时钟。少数情况,可以通过右键点击Select Clock Domain来修改时钟域。
下一页设置存储深度,相比较ChipScope,信号的宽度不需要事先设定好,而是根据捕获信号来自动设定,Vivado确实方便了很多。
设置好之后,可以在属性中修改ILA Core的属性。确认无误后进行Implementation。
不过,从Implementation的结果可以看到,虽然抓取的是LUT的信号,但是ILA的IP已经添加了寄存器进行隔离。从这一结果考虑,Vivado的ILA设计还是很优秀的。
但即使是这样,为了netlist中的Reg型信号无法设置mark debug,确实是一个不好理解的解释。
最终,Vivado Logic Analyzer的设置会以Tcl脚本的形式反应到XDC文件中。
完成Implementation后,生成bit文件,打开Hardware Manager,下载并配置好FPGA,开始Vivado Logic Analyzer的使用。
1. 下载好bit文件后的界面如下图所示。
2. 这里有个问题,Vivado 2014.2中,Debug Probes窗口不会自动打开,可以再Windows选项单中找到该窗口。
3. 打开Debug Probes窗口后的界面如下图所示。
4. 在Debug Probes中,把需要观察的信号拖到Basic Trigger Setup中,可以设置触发信号。
5. 设置好触发信号之后,就可以开始捕获信号。
6. 每一组触发条件可以设置Operator、Radix和Value来设置具体的触发条件,多个触发条件还可以进行组合。
7. 为了便于观察,在Window data depth将数据设为16个数据。
8. 设置好之后重新捕获数据,可以看到一次只捕获16个数据。
9. 可以设置窗口的数目,这里将Number of Windows设为2,代表两个窗口,每次捕获的数据为4个。
10. 重新触发后,可以看到,触发了两次,每次的触发条件都是一致的,即startup_counter = 8’h03。从下方的两个计数器可以看到,是先后的两次捕获。
其实,与chipscope类似,可以设置捕获数据的条件。
1. 将Capture mode设置为BASIC。
2. 在Basic Trigger Setup下面可以看到Basic Capture Setup的界面。
3. 从上两张图可以看到,触发信号为starup_counter,触发条件为03,捕获条件为88,触发位置为7。
4. 从捕获结果图来看,一共捕获了16个数据,触发条件处在第7个数据的位置上,该触发条件会被捕获。另外,在触发条件前后的数据,只有数据位88时才会被捕获。
5. 将触发位置设为0后重新捕获,可以看到第一个数据是触发条件,随后的数据只有为88才会被捕获。
6. 这里,对ChipScope和Vivado Logic Analyzer的功能进行一个初步的比较。
ChipScope Vivado Logic Analyzer Basic
多种触发值 支持 支持
触发条件组合 支持 支持
触发位置选择 支持 支持
多窗口触发 支持 支持
重复触发 支持 支持
条件捕获 支持 支持
状态机触发 16状态 不支持
计数器辅助 支持 不支持
标志位显示 不支持 不支持
重复触发功能在文章中没有涉及。
从该表可以看到,ChipScope的功能似乎较为强大。虽然在设置捕获信号时Vivado较为便捷,但是在调试时似乎不如ChipScope的方便。
需要注意的是,Vivado并没有确实这些功能,而是没有提供在Basic功能中,关于Advancedd用法,会在后续博文中描述。
chipscope中,通常有两种方法设置需要捕获的信号。
1.添加cdc文件,然后在网表中寻找并添加信号
2.添加ICON、ILA和VIO的IP Core
第一种方法,代码的修改量小,适当的保留设计的层级和网线名,图形化界面便于找到
需要捕获的信号。
第二种方法,对代码的改动量大一些,同时需要熟悉相关IP的设置,优点是,可以控制
ICON,并调用VIO。
与之类似,Vivado也有着两种方法进行设置。
1.在综合后的网表中寻找相关信号,右键点开菜单,然后设置mark debug
2.添加ILA,VIO的IP Core
第一种方法与chipscope的第一种方法极为类似:
1.都需要综合后才能设置;
2.都需要保留一定的设计层级或者网线名来便于寻找信号;
3.并非所有信号都可以被捕获,不能捕获的信号,chipscope中是显示为灰色,vivado
中是没有mark debug的选项在右键菜单中;
第二种方法就更为类似了,vivado可以兼容ISE的IP,所以可以直接调用chipscope的相
关IP,调试时也只是用Chipscope,另外可以使用Vivado自己的ILA IP,来进行设计,
但最大的问题是Vivado不提供ICON的IP以供选择,进一步埋没了ICON的地位。
另外,早起的Vivado IP Catalog提供Chipscope的ICON、ILA和VIO IP Core可以选择,目前已经取消了这些IP,只支持Vivado自己的ILA/VIO IP Core。
这里提供一个非常简单的设计代码,用于Vivado Logic Analyzer的研究。
`timescale 1ns / 1ps
module Nexy_4 (
input I_CLK,
output [3:0] O_ST_COUNTER,
output O_TIMECOUNTER_OUTPUT
);
wire CLK_100;
clk_wiz_0 CLK_UNIT
(
.clk_in1 (I_CLK),
.clk_out1 (CLK_100),
.locked ()
);
reg [7:0] startup_counter = 'b0;
always @ (posedge CLK_100)begin
if(startup_counter == 8'b11111111)begin
startup_counter <= 8'b00000011;
end else begin
startup_counter <= startup_counter + 8'b1;
end
end
assign O_ST_COUNTER = startup_counter[7:4];
wire [47:0] TimeCounter_Result_wire ;
reg [47:0] TimeCounter_Result_reg = 'b0 ;
reg TimeCounter_Output ;
always @ (posedge CLK_100)begin
TimeCounter_Result_reg <= TimeCounter_Result_wire;
end
TimeCounter TimeCounter_Unit (
.CLK ( CLK_100 ), // input wire CLK
.A ( 2'b01 ), // input wire [1 : 0] A
.C ( TimeCounter_Result_reg ), // input wire [47 : 0] C
.P ( TimeCounter_Result_wire ) // output wire [47 : 0] P
);
always @ ( posedge CLK_100 )begin
TimeCounter_Output <= TimeCounter_Result_reg[47];
end
assign O_TIMECOUNTER_OUTPUT = TimeCounter_Output ;
endmodule
综合后的Netlist中选择信号进行捕获的方法。
只有Nets下的信号可以设置mark debug。
从原理上来说是很不合理的。Chipscope的捕获界面中,只有Reg信号可以被抓取,而Vivado是Net,从实际的角度说也是很不合理的,LUT可以直接被抓去,从原理上和时序上,对设计都是不合适的。
在Set Up Debug中,工具会自动分析信号的所在时钟域,并添加时钟。少数情况,可以通过右键点击Select Clock Domain来修改时钟域。
下一页设置存储深度,相比较ChipScope,信号的宽度不需要事先设定好,而是根据捕获信号来自动设定,Vivado确实方便了很多。
设置好之后,可以在属性中修改ILA Core的属性。确认无误后进行Implementation。
不过,从Implementation的结果可以看到,虽然抓取的是LUT的信号,但是ILA的IP已经添加了寄存器进行隔离。从这一结果考虑,Vivado的ILA设计还是很优秀的。
但即使是这样,为了netlist中的Reg型信号无法设置mark debug,确实是一个不好理解的解释。
最终,Vivado Logic Analyzer的设置会以Tcl脚本的形式反应到XDC文件中。
完成Implementation后,生成bit文件,打开Hardware Manager,下载并配置好FPGA,开始Vivado Logic Analyzer的使用。
1. 下载好bit文件后的界面如下图所示。
2. 这里有个问题,Vivado 2014.2中,Debug Probes窗口不会自动打开,可以再Windows选项单中找到该窗口。
3. 打开Debug Probes窗口后的界面如下图所示。
4. 在Debug Probes中,把需要观察的信号拖到Basic Trigger Setup中,可以设置触发信号。
5. 设置好触发信号之后,就可以开始捕获信号。
6. 每一组触发条件可以设置Operator、Radix和Value来设置具体的触发条件,多个触发条件还可以进行组合。
7. 为了便于观察,在Window data depth将数据设为16个数据。
8. 设置好之后重新捕获数据,可以看到一次只捕获16个数据。
9. 可以设置窗口的数目,这里将Number of Windows设为2,代表两个窗口,每次捕获的数据为4个。
10. 重新触发后,可以看到,触发了两次,每次的触发条件都是一致的,即startup_counter = 8’h03。从下方的两个计数器可以看到,是先后的两次捕获。
其实,与chipscope类似,可以设置捕获数据的条件。
1. 将Capture mode设置为BASIC。
2. 在Basic Trigger Setup下面可以看到Basic Capture Setup的界面。
3. 从上两张图可以看到,触发信号为starup_counter,触发条件为03,捕获条件为88,触发位置为7。
4. 从捕获结果图来看,一共捕获了16个数据,触发条件处在第7个数据的位置上,该触发条件会被捕获。另外,在触发条件前后的数据,只有数据位88时才会被捕获。
5. 将触发位置设为0后重新捕获,可以看到第一个数据是触发条件,随后的数据只有为88才会被捕获。
6. 这里,对ChipScope和Vivado Logic Analyzer的功能进行一个初步的比较。
ChipScope Vivado Logic Analyzer Basic
多种触发值 支持 支持
触发条件组合 支持 支持
触发位置选择 支持 支持
多窗口触发 支持 支持
重复触发 支持 支持
条件捕获 支持 支持
状态机触发 16状态 不支持
计数器辅助 支持 不支持
标志位显示 不支持 不支持
重复触发功能在文章中没有涉及。
从该表可以看到,ChipScope的功能似乎较为强大。虽然在设置捕获信号时Vivado较为便捷,但是在调试时似乎不如ChipScope的方便。
需要注意的是,Vivado并没有确实这些功能,而是没有提供在Basic功能中,关于Advancedd用法,会在后续博文中描述。
推荐于2016-01-12 · 知道合伙人数码行家
可以叫我表哥
知道合伙人数码行家
向TA提问 私信TA
知道合伙人数码行家
采纳数:25897
获赞数:1464973
2010年毕业于北京化工大学北方学院计算机科学与技术专业毕业,学士学位,工程电子技术行业4年从业经验。
向TA提问 私信TA
关注
展开全部
1、Logic Analyzer的使用
《vivado逻辑分析仪的使用》一文中提到如下问题:
打开Hardware Manager,选择Open New Target,按照向导走完,发现无法和ILA建立通信链接。
原因:在选择待抓取信号的时钟域时,Vivado一般默认定位PS_CLK0,所以只有PS运行起来了,该时钟信号有输出,ILA才正常工作。因此在程序未run起来的情况下,会出现无法建立通信的错误。
解决:首先在SDK中完成FPGA Bitstream的download,设置断点,点击Debug按钮,进入main函数(直接run也可以,视需求而定);然后再返回Vivado主界面,打开Hardware Manager,Open New Target,这时,Vivado会自动检测到正在工作的ILA。
2、如何删除整个net网络中的某根连线
在Block Design阶段,将某个IP的pin连接到net网络中时,一旦连接成功,会发现单击刚刚连接的线,会选中整个net网络,那么如何删除net中的某一段连线呢?
如果你很快意识到自己的失误,那么有可能利用“撤销”功能实现该线的删除。但是,如果是保存过的工程,或者是后期检查时发现某根线不需要,该怎么办呢?
方法如下:选中你想删除的线所连接的pin,单击鼠标右键,在弹出的菜单中选择“Disconnect Pin”命令,就会删除连接在该pin上的连线,而不是删除该连线所属的网络,如下图所示。
3、TCL的使用
利用TCL实现工程的快速搭建、移植备份是相当方便的,然而单纯地从编程的角度去实现这些想法,可能就没那么简单,需要对Vivado控制指令,IP核属性等方方面面相当了解才行,其实有一个方法可以偷懒:
Vivado主界面中有一个Tcl Concole,我们所执行的所有GUI操作,在Tcl Concole中都会有对应的Tcl命令,如下图所示。
借助这一点,我们可以把自己感兴趣的操作、常用的操作对应的指令copy一下,保存起来,这样就可以加速Tcl脚本文件的设计。
4、如何查看IP的Example Desigan
在接触一个新东西,如开发环境、IP核等,Example Design可以帮助我们快速了解它们,从而降低使用难度,缩短开发周期。因此,如何利用Example Design是比较重要的,本小节简要介绍在Vivado下,如何查看IP核的Example Design。
加入到Block Design中的IP是无法查看Example Design的,并不是所有的IP都有Example Design,例如fir、cordic、dds等IP都是没有Example Design的。本文以AXI DMA这个IP为例,介绍如何查看IP核的样例工程。
Step1:打开IP Catalog,搜索到AXI DMA这个IP,如下图所示。
双击AXI Direct Memory Access,弹出下图所示的对话框。
注意,不要选择Add IP to Block Design,点击红色方框内的按钮,弹出下图所示的IP定制对话框。
配置完毕后,选择OK,IP的相关资源会添加到工程的Design Sources文件夹下,如下图所示。
选中axi_dma_0,右击鼠标,在弹出的菜单中选择“Open IP Example Design…”,按照向导打开样例工程即可。
《vivado逻辑分析仪的使用》一文中提到如下问题:
打开Hardware Manager,选择Open New Target,按照向导走完,发现无法和ILA建立通信链接。
原因:在选择待抓取信号的时钟域时,Vivado一般默认定位PS_CLK0,所以只有PS运行起来了,该时钟信号有输出,ILA才正常工作。因此在程序未run起来的情况下,会出现无法建立通信的错误。
解决:首先在SDK中完成FPGA Bitstream的download,设置断点,点击Debug按钮,进入main函数(直接run也可以,视需求而定);然后再返回Vivado主界面,打开Hardware Manager,Open New Target,这时,Vivado会自动检测到正在工作的ILA。
2、如何删除整个net网络中的某根连线
在Block Design阶段,将某个IP的pin连接到net网络中时,一旦连接成功,会发现单击刚刚连接的线,会选中整个net网络,那么如何删除net中的某一段连线呢?
如果你很快意识到自己的失误,那么有可能利用“撤销”功能实现该线的删除。但是,如果是保存过的工程,或者是后期检查时发现某根线不需要,该怎么办呢?
方法如下:选中你想删除的线所连接的pin,单击鼠标右键,在弹出的菜单中选择“Disconnect Pin”命令,就会删除连接在该pin上的连线,而不是删除该连线所属的网络,如下图所示。
3、TCL的使用
利用TCL实现工程的快速搭建、移植备份是相当方便的,然而单纯地从编程的角度去实现这些想法,可能就没那么简单,需要对Vivado控制指令,IP核属性等方方面面相当了解才行,其实有一个方法可以偷懒:
Vivado主界面中有一个Tcl Concole,我们所执行的所有GUI操作,在Tcl Concole中都会有对应的Tcl命令,如下图所示。
借助这一点,我们可以把自己感兴趣的操作、常用的操作对应的指令copy一下,保存起来,这样就可以加速Tcl脚本文件的设计。
4、如何查看IP的Example Desigan
在接触一个新东西,如开发环境、IP核等,Example Design可以帮助我们快速了解它们,从而降低使用难度,缩短开发周期。因此,如何利用Example Design是比较重要的,本小节简要介绍在Vivado下,如何查看IP核的Example Design。
加入到Block Design中的IP是无法查看Example Design的,并不是所有的IP都有Example Design,例如fir、cordic、dds等IP都是没有Example Design的。本文以AXI DMA这个IP为例,介绍如何查看IP核的样例工程。
Step1:打开IP Catalog,搜索到AXI DMA这个IP,如下图所示。
双击AXI Direct Memory Access,弹出下图所示的对话框。
注意,不要选择Add IP to Block Design,点击红色方框内的按钮,弹出下图所示的IP定制对话框。
配置完毕后,选择OK,IP的相关资源会添加到工程的Design Sources文件夹下,如下图所示。
选中axi_dma_0,右击鼠标,在弹出的菜单中选择“Open IP Example Design…”,按照向导打开样例工程即可。
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询