FPGA软件篇——ISE软件的硬件调试

ISE软件硬件调试

硬件调试是FPGA开发中非常重要的一环,能够占据开发周期的40%。本文主要是利用ISE的Chipscope插件进行硬件调试,侧重基本功能。

内置逻辑分析仪

ISE内部集成了逻辑分析仪,在线逻辑分析仪会占用一定数量的内部逻辑资源,如块 RAM、查找表、触发器等等。
在线逻辑分析仪的功能称为 Chipscope,以 IP 核的形式被加入设计中。有两种插入方式,core inserter ,直接创建IP核,以及core generator,需要例化之后才能使用。前者缺点是步骤比较繁杂,每换一个工程就需要重新生成一个IP核,每次编译时间都比较长。后者的优点就是可以拷贝,直接把.v文件拷贝,例化时改一下端口即可用到下一个工程。

代码优化

ISE在编译时会根据自己的算法对代码进行优化,把认为对工程影响不大或者没有作为输出的一些信号给优化掉,这样在ChipScope中就看不到这个信号。解决办法:
1.输出
新定义一个输出信号

module flow_led(
    input               sys_clk  ,  //系统时钟
    input               sys_rst_n,  //系统复位,低电平有效
	 
    output  reg  [3:0]  led,         //4个LED灯
    output  [23:0] counter_1  //定义一个输出
    );

//reg define
reg [23:0] counter; 
assign counter_1 = counter; //给输出赋值

2.添加KEEP TRUE语句
Edit——Language Templates——Synthesis Constructs——Attributes——Synthesis——Keep/Preserve a Signal (KEEP)——复制 (* KEEP=“TRUE” *)语句到指定语句之前。

3.Sythesize的Keep Hierarchy
Sythesize之前需要对Sythesize Properties做调整,把Keep Hierarchy改为Yes,这样在ChipScope中信号会有一种层次性,代码被优化的可能性就变低。
在这里插入图片描述
在这里插入图片描述

创建文件,放在prj文件夹中。
在这里插入图片描述
打开.cdc文件,连续next直到以下界面,Trigger Width为要监测的端口个数,此处流水灯为4个,但是如果工程大,不知道多少个,就用256,到后面把想抓取的信号全部添加完成后还可以再回到这步修改。
在这里插入图片描述
Match Type:触发类型,选择Basic w/edges在这里插入图片描述在这里插入图片描述
(参考正点原子) 然后再next:

在这里插入图片描述
在这里插入图片描述
在这个页面双击这两个红色的,选择相应的信号。
注意TRIGGER PORTS选择的时候,在这里插入图片描述
然后,此时,还是红色,因为Trigger Width不对,回到之前界面改成4就可以了。(clk的不计入数)在这里插入图片描述在这里插入图片描述
在这里插入图片描述
然后,对原来的rtl文件即.V文件全编译,生成bit流文件,用ChipScope下载到开发板中即可。

core inserter在线调试

下载bit流文件到开发板

1.点击左上角按钮,匹配硬件
在这里插入图片描述
2.configure,下载bit流文件。
在这里插入图片描述
这种方法主要是第二种,我们只看弹窗的下半部分,直接点击OK即可。在这里插入图片描述

在线调试

  • 图中标号1处为 Value 触发条件设置;Radix 为信号显示的进制,默认二进制;
  • Depth 采样深度,表示一共抓取多少个数据;
  • 图中标号2处为Position 偏移量,默认情况是 0,但是最好设置一个偏移量,例如设置300,表示的是把触发条件满足之前的300个数据和触发条件满足之后的724(1024-300)个数据显示到波形窗中,这样就可以捕捉到在触发之前的部分信息,有助于问题的定位。
    在这里插入图片描述
    打开Listing,没有数据,这时按下图添加进去。
    在这里插入图片描述

core generator 插入例化IP核

1.创建例化IP核

1.创建ILA文件

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
然后生成generate,等待一段时间即可。

2.创建ICON文件

在这里插入图片描述
其他工程中,可以直接复制这个文件夹。然后add source把.V添加进去即可。
在这里插入图片描述

3.例化

先选中icon,
在这里插入图片描述
将这段代码复制到流水灯的rtl文件中,
在这里插入图片描述
然后再选择ILA文件,同样操作,最后效果如下(重命名)。在这里插入图片描述

//最终完整代码,例化部分已标注
module flow_led(
    input               sys_clk  ,  //系统时钟
    input               sys_rst_n,  //系统复位,低电平有效
	 
    output  reg  [3:0]  led         //4个LED灯
    );
//reg define
reg [23:0] counter; 

**********例化部分1**********
//wire define
wire [35:0] CONTROL0;
wire [255:0] TRIG0;
**********例化部分1**********
//*****************************************************
//**                    main code
//***************************************************** 
**********例化部分2**********  
assign TRIG0 [3:0] = led;
**********例化部分2**********  

//计数器对系统时钟计数,计时0.2秒(仿真时,设置为10)
always @(posedge sys_clk or negedge sys_rst_n) begin
    if (!sys_rst_n)
        counter <= 24'd0;
    else if (counter < 24'd10)
        counter <= counter + 1'b1;
    else
        counter <= 24'd0;
end

//通过移位寄存器控制IO口的高低电平,从而改变LED的显示状态
always @(posedge sys_clk or negedge sys_rst_n) begin
    if (!sys_rst_n)
        led <= 4'b0001;
    else if(counter == 24'd10) 
        led[3:0] <= {led[2:0],led[3]};
    else
        led <= led;
end
**********例化部分3**********
//----------- Begin Cut here for INSTANTIATION Template ---// INST_TAG
flow_led_icon flow_led_icon_u (
    .CONTROL0(CONTROL0) // INOUT BUS [35:0]
);

//----------- Begin Cut here for INSTANTIATION Template ---// INST_TAG
flow_led_ila flow_led_ila_u (
    .CONTROL(CONTROL0), // INOUT BUS [35:0]
    .CLK(sys_clk), // IN
    .TRIG0(TRIG0) // IN BUS [255:0]
);
**********例化部分3**********
endmodule 

然后全编译,生成bit流文件,打开ChipScope。

2.在线调试

打开ChipScope后,重新Configure
在这里插入图片描述
把四个窗口添加到一根总线上。如下
在这里插入图片描述

那么,基本上ChipScope的使用就到这了,具体使用还是要以后多练习才行。

  • 2
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值