使用Chipscope时如何防止reg_wire型信号被优化掉

随着FPGA设计复杂程度越来越高,芯片内部逻辑分析功能显得越来越重要。硬件层次上的逻辑分析仪价格十分昂贵,而且操作比较复杂。目前,FPGA芯片的两大供应商都为自己的FPGA芯片提供了软件层面上的逻辑分析仪,可以帮助我们在线分析芯片内部逻辑。而且操作简单方便。但是往往因为某些原因,有些信号在综合的时候就会被优化掉,就可能会导致我们的设计失败,当然在为逻辑分析仪添加观察信号的时候也无法找到该信号。从而对设计、调试人员的工作带来一定的不便。下面就分别以Xilinx公司的逻辑分析仪ChipScope和Altera公司的SignalTap做以下总结:

一、使用Xilinx公司的ChipScope

ChipScope中添加一些引脚的信号,但列表中并没有显示,原因是综合的地方没设置好,应该将XST的属性设置成如下:keep hierarchy 处为YES

  使用ChipScope观察芯片内部的信号的之前先要在把需要观察的信号添加到ChipScope信号观察列表当中。也就是说,我们必须能够在综合的网表文件中找到相应的信号。如果是使用XST综合的话,最好保留芯片内部结构的层次,这样就可以在相应的子模块查找需要观察的信号。默认情况下,Chipscope只能观察reg类型的信号。但是通过设置属性也是可以观察wire型信号的。使用不同的综合工具需要添加的属性也不一样。

1、使用XST综合。

(1)对于reg型信号,如果被ISE优化掉,一般有可以把这个信号和其他没有被优化的信号进行“与”、“或”等操作。这样就可以达到观察信号的目的。

(2)对于wire型号,对于ISE12.3以后的版本,XST综合,以Spartan3为例,可以使用(* KEEP="TRUE"*) wire [15:0] CPLD_ _AD;这样就可以在查找信号的信号找到wire类型的CPLD_ _AD信号进行观察。再不行就用reg引出。

2、使用Synplify Pro综合

也可参考:http://hi.baidu.com/vvbaba/item/94bb1b33af6c4b33b3c0c56e

Synplify Pro对wire、reg类型的信号有着不同的综合属性。

(1) 对于wire型信号,使用/* synthesis syn_keep=1 */综合属性,例如下面的语句:

1 wire  [7:0]  data_in  /* synthesis syn_keep=1 */

(2) 对于reg型信号,使用/* synthesis preserve = 1 */综合属性,例如下面的语句:

1 reg  [7:0]   data_in  /* synthesis preserve = 1 */;

二、使用Altera公司的SignalTap

1、使用Altera自带的综合器综合

Altera自带的综合器为了防止某些信号综合器优化掉,也有自己的一套综合约束属性。

(1)对于reg型信号,为了防止Altera自带综合器将其优化掉,可以添加noprune属性。这样就可以防止某些寄存器信号被优化掉。也可以使用/*synthesis noprune*/综合属性。

01 `include "define.v"
02 module SignalTap_test(
03                 Clk     ,
04                 Rst     ,
05                 Cnt
06                 ) /*synthesis noprune*/ ;
07
08 input   wire        Clk ;
09 input   wire        Rst ;
10 output  reg [7:0]     Cnt ;
11 always@(posedge Clk or posedge Rst)
12 begin
13     if( Rst == 1'b1)
14         Cnt <= 8'h0;
15     else
16         Cnt <= #`ULDY Cnt + 1'b1;
17 end
18 endmodule

如上例(假设Cnt信号会被优化掉),这样添加综合属性之后,整个module的reg信号都不会被优化掉。

跟reg相关的综合属性,除了/*synthesis noprune*/可用,还有一个/*synthesis preserve*/可用

二者的差别在于:

/*synthesis noprune*/ 避免Quartus II优化掉output 型的reg信号。

/*synthesis preserve*/ 避免Quartus II把reg信号当成VCC或者GND等常数

同时单独的reg信号也可以: (*preserve*) reg [3:0] cnt;防止被优化掉。

(2) 对于wire类型的信号

对于wire型信号来说,要想观察此类信号,Altera综合器提供了/*synthesis keep*/ 综合属性。如 wire [7:0] Cnt /*synthesis keep*/; 对于Quartus II 9.0以后的版本也可以使用(“keep”) wire [7:0] Cnt ;的写法。

此外,/*synthesis keep*/也支持对reg型信号,使用它也可以防止reg型信号被优化掉。但是也有可能出现这样的情况,有的信号即使经过此处理,仍然会被综合工具优化掉,致使无法找到它。这个时候就需要对其使用“测试属性”,可以加入probe_port属性,把这两个属性结合在一起,即就是:

( *synthesis, probe_port,keep *) 即可,这种方法同时适应于wire和reg型信号类型。

2、使用Synplify Pro综合

使用Synplify Pro综合时防止信号被优化掉的方法和使用Xilinx公司 ChipScope使用Synplify Pro综合时添加的综合约束一样,因为Synplify Pro是专业的综合厂商,所以对主流的FPGA厂商都支持。

三、总结

1、以上的方法也不一定是全部都可以使用,有时候因为版本不对应就会导致信号依然会被优化掉。不过经过轮询之后发现,ISE 12.3以后的版本、Quartus II 9.0之后的版本、Synplify Pro 9.0.1以后的版本都可以使用。

2、一般情况下,信号经常被优化掉,还是与代码风格或者逻辑设计有冗余有关的,所以还是应该尽量提供代码质量。在不能解决的时候再添加综合约束。

<think>好的,我现在需要回答用户关于如何使用ChipScope捕获PIN上的信号的问题,以及是否支持此功能。首先,我需要回忆一下ChipScope的基本功能和操作流程。ChipScope是Xilinx(现在是AMD的一部分)提供的一个嵌入式逻辑分析工具,它通过插入IP核到FPGA设计中,实捕获内部信号进行分析。 用户的问题涉及到捕获PIN上的信号,也就是FPGA的物理引脚信号。根据之前的引用内容,特别是引用[3]中的例子,用户已经成功将计数器的输出绑定到LED灯,并通过按键进行复位。这说明用户可能已经了解如何在设计中将内部信号连接到输出引脚。但问题是,是否可以直接捕获这些PIN上的信号,而不仅仅是内部逻辑信号? 接下来,我需要考虑ChipScope的工作原理。ChipScope通常通过插入ILA(Integrated Logic Analyzer)核来监控内部信号。这些信号需要在综合和实现过程中被保留,否则会被优化。引用[1]提到如何防止信号优化,这可能涉及到KEEP或者DONT_TOUCH等约束,确保信号综合后仍然存在。 但是,PIN上的信号通常是FPGA与外部连接的物理引脚,这些信号综合后的网表中可能已经被映射到具体的IOB(Input/Output Block)结构。根据我的理解,ChipScope的ILA核通常监控的是内部逻辑信号,而不是直接监控物理引脚。不过,用户可能可以将PIN的信号通过逻辑连接到内部寄存器,然后再由ChipScope捕获。例如,将输入引脚连接到某个寄存器,然后监控该寄存器的值,这样就能间接捕获引脚上的信号。 另外,引用[3]中的代码示例显示,用户将计数器的输出绑定到LED(即输出引脚),并在ChipScope中监控这些信号。这说明输出引脚的状态可以通过内部逻辑来间接监控。但对于输入引脚,比如按键信号,可能需要类似的连接方式。例如,将输入引脚连接到设计中的一个寄存器,然后在ChipScope中监控该寄存器的值,这样就能捕获到输入引脚上的信号变化。 此外,用户需要确保在ChipScope设置过程中,正确添加需要监控的信号。根据引用[2],用户需要连接开发板的JTAG线并上电,然后在ChipScope界面中配置触发条件和捕获的信号。如果PIN的信号已经被正确地引入到设计中的某个节点,并且没有被优化,那么应该可以在ChipScope中看到这些信号。 总结一下,步骤可能包括: 1. 在设计中,将需要监控的PIN信号连接到内部寄存器或逻辑。 2. 使用KEEP或DONT_TOUCH约束防止这些信号综合优化。 3. 在ChipScope中插入ILA核,添加这些信号作为探测点。 4. 生成比特流并下载到FPGA,通过ChipScope Analyzer进行捕获。 需要注意的是,直接监控物理引脚可能不如内部信号稳定,因为引脚上的信号可能会受到外部电路的影响,比如抖动或噪声。此外,输入信号的同步处理(如去抖动、钟同步)也可能影响捕获的结果,因此用户可能需要确保设计中有适当的同步电路。 最后,回答用户的问题需要明确说明ChipScope支持通过间接方式捕获PIN上的信号,并给出具体的步骤和注意事项,同引用相关的参考资料来支持回答。</think>要使用ChipScope捕获FPGA引脚(PIN)上的信号,需通过以下步骤实现: ### 1. **信号连接与保留** - **内部信号映射**:将PIN信号连接到内部寄存器。例如,输入引脚可通过缓冲器或同步寄存器引入逻辑,输出引脚则直接绑定到对应寄存器。 示例代码(输入引脚同步处理): ```verilog reg pin_sync; always @(posedge I_clk) begin pin_sync <= PIN_input; // 将输入引脚信号同步到钟域 end ``` - **防止优化**:使用 `(* KEEP = "TRUE" *)` 或 `(* DONT_TOUCH = "TRUE" *)` 约束保留信号,避免综合工具将其优化[^1]。 示例: ```verilog (* KEEP = "TRUE" *) wire pin_debug; assign pin_debug = PIN_input; // 显式保留信号 ``` ### 2. **ChipScope配置** - **插入ILA核**:在代码或IP核配置工具中添加ILA(Integrated Logic Analyzer),选择需要捕获的信号(如 `pin_sync` 或 `O_led_out`),并设置采样深度与触发条件[^2]。 - **引脚约束**:在Xilinx约束文件(.xdc)中正确分配物理引脚位置,例如: ``` set_property PACKAGE_PIN "A12" [get_ports PIN_input] ``` ### 3. **捕获与分析** - **生成比特流**:完成综合、实现后生成.bit文件,通过JTAG下载到FPGA。 - **触发设置**:在ChipScope Analyzer中配置触发条件(如 `pin_sync` 上升沿),启动捕获即可查看实波形。 ### 是否支持直接捕获PIN信号ChipScope **无法直接监控物理引脚电平**,但可通过上述间接方式捕获。例如引用[3]中,用户将计数器输出绑定到LED(输出引脚),并通过监控内部寄存器 `O_led_out` 间接观察引脚状态。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值