验证MAP_BACK核的功能 及时序匹配
一般是这种情况Clock Path Skew: 0.017ns (3.882 - 3.865)
问题1:快时钟域到慢时钟域出的错,
Requirement: 0.250ns
Data Path Delay: 1.215ns (Levels of Logic = 1)(Component delays alone exceeds
constraint)
Clock Path Skew: -0.214ns (3.878 - 4.092)
Source Clock: clk_160MHzPLL1 rising at 143.750ns
Destination Clock: clk_125_0000MHzPLL0 rising at 144.000ns
Clock Uncertainty: 0.300ns
Slack (setup path): -1.479ns (requirement - (data path - clock path skew +
uncertainty))
可以对clk_125_0000MHzPLL0 rising at 144.000ns 时钟延迟1.38ns编译一次看看
Clock Path Skew: -0.214ns (3.878 - 4.092)
编译不行的话,增加约束或是两个时钟用同一个锁相环
约束为:TIMESPEC TS_clkA_to_clkB=FORM CLK_A TO CLK_B 1.38ns
问题已经解决
问题2:同源时钟
Slack (setup path): -1.618ns (requirement - (data path - clock path skew + uncertainty))
Requirement: 6.250ns
Data Path Delay: 7.787ns (Levels of Logic = 2)
Clock Path Skew: 0.000ns
Source Clock: clk_160MHzPLL1 rising at 0.000ns
Destination Clock: clk_160MHzPLL1 rising at 6.250ns
Clock Uncertainty: 0.081ns
路径:
impro_all_hard_ram_plbw_0/impro_all_hard_ram_plbw_0/sysgen_dut/impro_all_hard_ram_x0/ram122_5
ccb6b6655/x1024_buffer_deb56067cf/dual_port_ram/comp0.core_instance0/BU2/U0/blk_mem_generator
/valid.cstr/ramloop[0].ram.r/v5_init.ram/TRUE_DP.SINGLE_PRIM18.TDP
impro_all_hard_ram_plbw_0/impro_all_hard_ram_plbw_0/
sysgen_dut/impro_all_hard_ram_x0/
subsystem2_10a9109033/serial_to_parallel_luoqiwu_80958df441/
serial_to_parallel/msb_is_first.fd_array1[0].comp/partial_one.last_srl17e/reg_array
[2].fde_used.u2
解决办法:问题在于ram122这个bram,是否可采用Distributed memorey类型,由于bram资源用的太多,局
域分配就不是那么理想。路径延迟太长由设计原因引起的?控制读信号来的太晚,可否用多周期路径来解决?查看控制信号的时钟频率是不是160M?
同源时钟,SLACK为负,线延时太多,使用Floorplanner工具解决,(组合逻辑不是太长,不然可以采取寄
存器流水操作,)
问题3:PCIE时序问题,6级路径延时 还有可以优化扇出,优化工具设置应该可以解决找个合适的综合工具,做些优化综合设置,先把项目转换成VHDL,添加约束综合后,再回到EDK工具,极端方式 修改网表一旦了解了最基本的概念和操作,就可以开始察看FPGA构造。通常我都从时钟逻辑开始。这包括数字时钟管理器(DCM)、锁相环(PLL)、全局时钟缓冲器(BUFG)、区域时钟缓冲器(BUFR)、I/O缓冲器(BUFIO)以及不同的时钟区域。(要想按字母列出项目表,可以到LIST窗口点击Type来排序。)点击一个DCM并按F11。ARRAY窗口会定位到选择的DCM并放大显示它。继续点击DCM并观察GUI底部的Console窗口,其中会显示与下面类似的内容:
comp “DCM_BASE_inst_star”, site
“DCM_ADV_X0Y9”, type = DCM_ADV
(RPM grid X73Y202)这是有用的数据。 拷贝并粘贴上述内容到UCF文件中,并作如下更改以锁定这一DCM逻辑:
INST “DCM_BASE_inst_star”
LOC=DCM_ADV_X0Y9;
利用这一方法,几乎可以锁定FPGA中的任何项目。 下面是BUFG锁定的另一个例子:
c o m p “ B U F G _ i n s t _ s t a r ” , s i t e
“BUFGCTRL_X0Y20”, type = BUFG
(RPM grid X73Y124)
INST “BUFG_inst_star”
LOC=BUFGCTRL_X0Y20;
再次回到 List 窗口并标注同一DCM。 双击之后将会在Block视图中显示该DCM以及所有设置和参数。这是一项非常强大的功能,可用于FPGA构造中的任何逻辑项目。如果选择一个逻辑片并双击它,就可以看到逻辑片是如何布线连接的,以及是否使用了进位链或本地触发器。Block视图的按钮条包含许多其它选项。值得一提的是 F= button 按钮,其功能是显示逻辑片中使用的项目的完整配置。例如,如果使用了一个LUT6和一个触发器,按下 F= 按钮将会给出LUT的布尔议程以及触发器的配置模式。
阅读赛灵思用户指南是一回事,而从计算机屏幕上展开的视图上探察所有逻辑、开关和参数则是另一回事。一旦熟悉了FPGA构造及所有资源,那么在编写和验证设计时获得的帮助将会令人感到惊奇。
——————————————
1、图像处理核的阈值设置影响到显示图片显示效果
2、查看BROM 的布局分布是不是限定为RAMB36的呢 怎么限定的呢
3、只是进行了功能仿真,时序仿真如何验证?
20130205
反馈信号采用多周期路径,添加时钟始能信号
NET CLK_A TNM=A_GRP
NET CLK_B TNM=B_GRP
TIMESPEC TS_CLKA=PERIOD A_GRP 6.25ns
TIMESPEC TS_CLKA=PERIOD B_GRP TS_CLKA*1.28
TIMESPEC TS_CLKA2B=FROM:A_GRP:TO:B_GRP:7
干脆把总线频率提高到160M,目前是图像处理核125M提高到160M 仿真中,但是带来的DDR错误,DDR时序约束必须修改,可以放宽一倍通过不同时钟的约束试试看
Slack: -1.377ns (requirement - (data path - clock path skew + uncertainty))
Source:
impro_all_hard_ram_plbw_0/impro_all_hard_ram_plbw_0/sysgen_dut/impro_all_hard_ram_x0/subsyste
m2_10a9109033/serial_to_parallel_luoqiwu_80958df441/counter2/comp3.core_instance3/BU2/U0/i_ba
seblox.i_baseblox_counter/the_addsub/no_pipelining.the_addsub/i_lut6.i_lut6_addsub/i_q.i_simp
le.qreg/fd/output_11 (FF)
Destination: bram_block_0/bram_block_0/ramb36_16 (RAM)
Requirement: 6.250ns
Data Path Delay: 7.742ns (Levels of Logic = 1)
Clock Path Skew: 0.196ns (1.576 - 1.380)
Source Clock: clk_160MHzPLL1 rising at 0.000ns
Destination Clock: clk_160MHzPLL1 rising at 6.250ns
Clock Uncertainty: 0.081ns
Clock Uncertainty: 0.081ns ((TSJ^2 + DJ^2)^1/2) / 2 + PE
Total System Jitter (TSJ): 0.070ns
Discrete Jitter (DJ): 0.146ns
Phase Error (PE): 0.000ns
Maximum Data Path:
impro_all_hard_ram_plbw_0/impro_all_hard_ram_plbw_0/sysgen_dut/impro_all_hard_ram_x0/subsyste
m2_10a9109033/serial_to_parallel_luoqiwu_80958df441/counter2/comp3.core_instance3/BU2/U0/i_ba
seblox.i_baseblox_counter/the_addsub/no_pipelining.the_addsub/i_lut6.i_lut6_addsub/i_q.i_simp
le.qreg/fd/output_11 to bram_block_0/bram_block_0/ramb36_16
Location Delay type Delay(ns) Physical Resource
Logical Resource(s)
---------------------------------------------------- -------------------
SLICE_X31Y75.CQ Tcko 0.450
impro_all_hard_ram_plbw_0/impro_all_hard_ram_plbw_0/sysgen_dut/impro_all_hard_ram_x0/subsyste
m2_10a9109033/addr_share_mem_x1<11>
impro_all_hard_ram_plbw_0/impro_all_hard_ram_plbw_0/sysgen_dut/impro_all_hard_ram_x0/subsyste
m2_10a9109033/serial_to_parallel_luoqiwu_80958df441/counter2/comp3.core_instance3/BU2/U0/i_ba
seblox.i_baseblox_counter/the_addsub/no_pipelining.the_addsub/i_lut6.i_lut6_addsub/i_q.i_simp
le.qreg/fd/output_11
DSP48_X0Y29.B10 net (fanout=2) 0.645
impro_all_hard_ram_plbw_0/impro_all_hard_ram_plbw_0/sysgen_dut/impro_all_hard_ram_x0/subsyste
m2_10a9109033/addr_share_mem_x1<10>
DSP48_X0Y29.P5 Tdspdo_BP_M 3.646
impro_all_hard_ram_plbw_0/impro_all_hard_ram_plbw_0/sysgen_dut/impro_all_hard_ram_x0/subsyste
m2_10a9109033/mult/comp2.core_instance2/blk00000003/blk00000007
impro_all_hard_ram_plbw_0/impro_all_hard_ram_plbw_0/sysgen_dut/impro_all_hard_ram_x0/subsyste
m2_10a9109033/mult/comp2.core_instance2/blk00000003/blk00000007
RAMB36_X1Y25.ADDRBU3 net (fanout=64) 2.654
impro_all_hard_ram_plbw_0_addr_to_portb<26>
RAMB36_X1Y25.CLKBWRCLKU Trcck_ADDRB 0.347 bram_block_0/bram_block_0/ramb36_16
bram_block_0/bram_block_0/ramb36_16
---------------------------------------------------- ---------------------------
Total 7.742ns (4.443ns logic, 3.299ns route)
(57.4% logic, 42.6% route)
——————————————————
同源时钟数据路径过长的解决方法:
1、源时钟和目的时钟都用160M做时钟,都是不够的,核可以跑起来的最高频率只有125M,异步解决,增加
约束,目的时钟频率降低一点,采取以慢采快策略;后患:怎么不丢数据?就是是每传一组数据过来必须
进过两个时钟周期以上才能满足。
2、如果方法1不行,根据时序违背路径,可以知道图像处理核的频率计算后可在125M在内跑起来是没问题
的,因此可在核尾部添加FIFO从160M转换到125M频率,再传入BRAM里面去,目前发现一个问题是由于以前
设计的频率接入确实有误导,本应该接40M而接了160M,已经改正,直接解决这个问题的一部分,这条数据
路径的前半部还是存在时序错误。
3、问题出在FPGA资源BRAM的布局,由于耗用了93%,在系统分配的时候,跟附近的SLICE相距有点远,耗时
较多,没法保证160M的频率。最多可以跑到125M。在BRAM资源耗用不减少的情况下,改设计也没用,不能
解决。现在解决办法,试图用FPGA EDITOR去手动布局 BRAM看看或找综合工具自动处理。或是指定这个路
径的延时长度试试,别无它法。
RAM输出通过一个或门(查看延时多少),不可取,必须修改。由于或门需要的资源分配离RAM很远,或直
接去掉或换(这个门耗时3.632ns,设计空出2ns左右就能满足时序要求),类似总线结构挂载。或在这个增
加一排寄存器分流
PCIE启动识别问题
xilinx xapp1052文档里的说明:
For a system to recognize an add-in card for PCI Express, the card must be present during bus
enumeration, which is performed by the BIOS during the boot process. For this reason, the
FPGA must be programmed in one of two ways:
1. Using an on-board PROM so that when the system is powered on the FPGA is? programmed and
enumerated by the BIOS. The PROM must configure the FPGA fast enough for it to be recognized
by the system. Refer to the FPGA Configuration chapter in the core user guide.
2. Through the JTAG interface after the OS has started. However, a warm reset must be
performed for the card to be recognized. In Windows, this equates to performing a restart.
Note: Re-programming the FPGA after the OS has started may result in the system hanging.