module adc(
iclk,rst_n,spi_cs,spi_clk,spi_din,spi_dout,busy,shift_done,adc12,adc_data
,test );
input iclk;
input rst_n;
output spi_cs;
output spi_clk;
output spi_dout;
input spi_din;
input busy;
input shift_done;
output [11:0] adc12/* synthesis syn_keep = 1 */;
output [15:0] adc_data;
reg [11:0] adc12;
output [3:0] test/* synthesis syn_keep = 1 */;
reg [3:0] test;
reg spi_cs;
reg spi_clk/* synthesis syn_keep = 1 */;
reg spi_dout;
不行啊,我定义了1个内部的[3:0] test,内部也没有使用. 但是chipscope里面还是没有看到
为了调试逻辑,现在很少再将FPGA中的信号引出,通过示波器或者逻辑分析仪来观察,更多的是在工程中生成stp或者cdc文件,通过signalTAP或者chipscope这两个工具来调试.
但我们发现,有时候在chipscope中很难找到你预期的信号,这往往是被综合器优化掉了,或者更改了信号名.我发现有效的方法是在源代码中加上约束语句,这样就不用对代码做大的改动.
例如:
在VHDL中:
为了观察sys_rst信号,sys_rst往往是组合逻辑,如果在chipscope中很难找到.我们先将 sys_rst用采样时钟打一拍,输出为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 信号.
在Verilog中:
只需将需要监测的信号输出到port,然后加上约束就行.
例如:
output rx_sof_det_out /* synthesis syn_keep = 1 */;
output rx_eof_det_out /* synthesis syn_keep = 1 */
这篇**里面不是要说把要观察的信号"输出到port,然后加上约束就行." |