1、JTAG抓取波形报错:
1、烧写器的JTAG时钟必须小于ILA输入时钟的2.5倍。可以根据实际工程情况,设置烧写器的JTAG时钟大小,位置如下图。
2、赛灵思 MPSOC系列FPGA 插上JTAG时,ARM会产生死机或者SPI读取数据不正确的情况,CPU读取SPI数据异常问题解决。
Zynq UltraScale+ MPSoC在未插JTAG情况下,ARM运行Linux系统正常,不会出现卡死现象,EMIO SPI读数正常。
当插上JTAG准备调试时,ARM会出现卡死现象,并且大多数情况下ARM通过EMIO SPI接口读取的数据会不正确
解决方法是:
a、上电启动后,即通过串口调试工具,比如SecureCRT软件快速按任意键,进入U-boot,当显示 "ZynqMP>"表示进入U-boot。此时输入指令关闭CPU_IDLE:
setenv bootargs 'console=ttyPS0,115200n8 earlycon clk_ignore_unused cpuidle.off=1'
b、继续进入系统
run bootcmd
c、使用JTAG正常调试即可。
3、vivado一直综合失败,但是语法无错误。
WARNING: [Vivado 12-1017] Problems encountered:
1. PID not specified
Abnormal program termination (EXCEPTION_ACCESS_VIOLATION)
Please check 'E:/***.runs/synth_1/hs_err_pid3712.log' for details
暂时发现是因为杀毒软件导致的,重新开机,关闭所有杀毒软件后恢复正常
另外怀疑*mark_debug="TRUE”*也有影响
4、FPGA引脚上电默认电平的设置。
赛灵思FPGA上电默认电平可以由引脚PUDC_B控制。当PUDC_B为低电平时,fpga引脚都通过内部电阻上拉;为高电平时,不通过内部电阻上拉。
vivado软件工具中,也可以先 Open implemented Design,打开之后,在Tool-setting路径下,点击Configure additional bitstream settings.
在下图中,选择PUDC_B的上拉与否,以及未使用IO的默认电平。
5、使用Spartan7 FPGA调试DDR3时,vivado MIG IP核校准失败 : init_calib_complete=0。打开IP的debug模式后,使用探针发现,dbg_wrcal_err = 1
该问题起初认为是硬件电路问题或者是DDR型号选择错误,经过多次测试后,一直未能解决问题。最终发现,是参考电压Vref选择错误。
FPGA硬件原理图上, 连接DDR3数据信号的 BANK,若其VREF(比如引脚IO_L6N_T0_VREF_34_R6.......)信号未连接参考电压,FPGA应该使用internal Vref。在我们的设计中,硬件上VREF引脚悬空 ,因此在vivado上,应该勾选internal Vref。如下图:
一般,DDR相关信号的电压为1.5V,则Vref为0.75V 。勾选上internal Vref后,vivado会生成如下的约束:
set_property INTERNAL_VREF 0.750 [get_iobanks 34]
set_property INTERNAL_VREF 0.750 [get_iobanks 36]
6、Xilinx异步时钟约束
进行异步约束时,vivado经常报出关键性警告:
set_clock_groups:No valid object(s) found for '-group [get_clocks *clk2*]'.
Resolution: Check if the specified object(s) exists in the current design. If it does, ensure that the correct design hierarchy was specified for the object. If you are working with clocks, make sure create_clock was used to create the clock object before it is referenced.
这是约束语言未编写正确导致的。下面记录一下正确的编写方式。
假设顶层模块如下
module top
(
...
);
Clk_gen clk_gen_inst0
(
....
.clk_100M(clk_100M),
.clk_200M(clk_200M),
....
)
endmodule
正常的异步时钟约束如下:
#时钟命名,时钟约束
create_clock -period 10.000 -name clk_100M -waveform {0.000 5.000} [get_pins clk_gen_inst0/clk_100M]
create_clock -period 5.000 -name clk_200M -waveform {0.000 2.500} [get_pins clk_gen_inst0/clk_200M]
#异步时钟约束
set_clock_groups -asynchronous -group [get_clocks clk_100M] -group [get_clocks clk_200M]
#或
set_clock_groups -asynchronous -group [get_clocks {clk_100M clk_200M}]
#或者不直接对时钟命名,直接约束异步时钟
set_clock_groups -asynchronous -group [get_clocks -of_objects [get_pins clk_gen_inst0/clk_100M] ] -group [get_clocks -of_objects [get_pins clk_gen_inst0/clk_200M] ]
7、vivado编译报错:[Vivado 12-172] File or Directory 'C:/Users/15253/Desktop/project_fir/project_1.srcs/sources_1/ip/fir_compiler_0/coef_data.coe' does not exist
原因是:内置COE文件的相关IP被删除后,vivado没有自动将coe文件从编译列表中移除,手动删除即可。
选中coe文件,右击---remove file from project。
8、vivado中使用ILA抓取信号时,某些bit位因为固定为高电平或者低电平,导致被优化,只会抓取不被优化的bit位。
防止数据被优化的方法是,在信号定义前添加(*keep="true"*),这样信号就不会被优化了。
9、vivado报错: [filemgmt 56-176] Module references are not supported in manual compile order mode and will be ignored.
解决方案:在当前工程中,在source界面下右击,选择“automatic update and compile order”
10、vivado警告:[Timing 38-316] Clock period '10.000' specified during out-of-context synthesis of instance 'image2DMA/grayImage2DMA/gray2dma_fifo' at clock pin 'wr_clk' is different from the actual clock period '5.000', this can lead to different synthesis results.
解决方法: 首先,此部分警告不会影响布局布线,但是如果还是想解决的话,可以参考UG896的第40页,进行处理:
第一步,在控制台console中输入命令:report_property [get_ips gray2dma_fifo]
第二步,在控制台console中输入命令:set_property CONFIG.core_clk.FREQ_HZ 250000000 [get_ips gray2dma_fifo] (注意此处的CONFIG.core_clk.FREQ_HZ参数,需要根据report_property的输出结果确定)
第三步,观察此IP的OOC约束文件,确认约束已经更改。
11、如何导出和导如block design.
新建工程时,需要复用原来的block design设计,就需要导出和导入block design文件
导出block design:
1、open block design
2、File —— Export —— Export block design
得到tcl文件。此时需要在新的工程中进行导入,直接在console中输入命令。
导入blcok design:
source C:/Users/ADMIN/Desktop/system.tcl