通过chipscope抓取不到信号怎么办?(加粗字体来自百度经验,斜体来自21ic电子技术论坛GoldSunMonkey)
1、更改优化选项设置。
在ChipScope中添加一些引脚的信号,但列表中并没有显示,原因是综合的地方没设置好,应该将ISE中XST-synthesis的属性做如下设置:keep hierarchy设为YES或者soft。
注解:列表中没有显示信号的原因可能是很多的。我的理解:
首先是设计考虑不周全,比如一段设计有输入,有逻辑设计,但是没有输出使用,那么综合的时候很可能就会被优化掉,反之有输出没有输入也会被优化。例如,一个简单的计数器,clk引入时钟信号,rst引入复位信号,cnt寄存器在clk时钟上升沿累计加一,当累计到1的时候,产生flag(wire或reg)信号。但是flag在后面的设计中从来没有输出使用过,那这个flag就很有可能被优化掉看不到。但是我们在初期测试的时候,又非常想取出这个信号怎么办呢?可以通过将flag锁存2次及以上的形式来解决。
always @(posedge clk)
begin
if(rst)
cnt <= 4'd0;
else
cnt <= cnt + 4'd1;
end
assign flag = cnt == 4'd1;
always @(posedge clk)
begin
flag_a <= flag;
flag_b <= flag_a;
end
其次是组合逻辑往往不如时序逻辑容易综合出相关信号,且综合出的信号往往名字超级长不容易引用
第三就是综合器的一些默认设置特点。比如keep hierarchy。下面说一下这个keep hierarchy。
打开xilinx的帮助索引,说明如下:
Keep Hierarchy
Specifies whether or not the corresponding design unit should be preserved and not merged with the rest of the design. You can specify Yes, No and Soft. Soft is used when you wish to maintain the hierarchy through synthesis, but you do not wish to pass the keep_hierarchy attributes to Place and Route.
简单的说,就是设置为yes就是根据模块分类来综合,而no就是打乱模块设计的特点,根据优化要求来综合。soft则是两种方案的折中处理。因此当设置为yes时,有利于将信号综合出来;而为no的时候,则可能会被优化掉。
所以,我的理解时,在开发阶段,接该项设置为yes有利于chipscope抓取信号,而在设计稳定后修改为no更有利于优化出更好的综合结果(尤其是在逻辑资源紧张的情况下)。
2、为了更好的取得信号,可以在RTL代码中进行一些声明。声明过后,再锁存两次信号,一般都可以抓取到
(1)Verilog。对于ISE12.3以后的版本,XST综合,可以使用
(* KEEP="TRUE"*) reg [15:0] AD_reg;
这样的声明,就可以在查找信号时候找到wire类型的AD_reg信号进行观察。
(2)VHDL。
为了观察sys_rst信号,sys_rst往往是组合逻辑,如果在chipscope中很难找到.我们先将 sys_rst用采样时钟打2拍,输出为sys_rst_d.
process(sys_clk)
begin
if sys_clk'event and sys_clk='1' then
sys_rst_d <= sys_rst;
end if;
end process;
然后在信号定义下面加上
attribute keep : string;
attribute keep of sys_rst_d : signal is "true";
这样在chipscope中很容易就能找到sys_rst_d 信号.