完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛|
大家好。
我正在尝试使用Spartan6 -3芯片从ti的400 Msps adc(ADS5474)获取数据。 我想我对selectIO结构,s6数据表,adc数据表等有很好的了解。 由外部合成器计时的ADC,频率可以从大约30到400 MHz变化。 ADC输出-LVDS,最大200 MHz ddr,数据边沿与adc的输出时钟对齐。 我有一些限制: 1)样板设计和制造。 2)ADC数据对达到整个边缘,不仅是一半。 3)ADC频率可以随时改变。 由于ADC频率变化,我不能将PLL与BUFPLL一起使用(我不想每次都使用DRP) 由于整个银行跨越,我不能在输入时钟上使用IDELAY。 我现在看到的唯一方法 - 使用四个BUFIO2(两个因为ddr模式而x2因为全银行数据跨度) 现在我正试图只实施银行的一半,然后将两者兼顾。 这是ADC用于iserdes的时钟输入代码: IBUFDS #( .DIFF_TERM(“TRUE”),//差分端接(Virtex-4/5,Spartan-3E / 3A) .IOSTANDARD(“LVDS_25”)//指定输入I / O标准 ) IBUFDS_ADC_CLK ( .O(w_adc_dry_ibuf),//缓冲输出 .I(ADC_DRY_P),// Diff_p缓冲输入(直接连接到顶级端口) .IB(ADC_DRY_N)// Diff_n缓冲输入(直接连接到顶级端口) ); BUFIO2 #( .USE_DOUBLER(“TRUE”), .DIVIDE(2), .DIVIDE_BYPASS(“FALSE”), .I_INVERT(“FALSE”) ) BUFIO_inst ( .I(w_adc_dry_ibuf),//时钟缓冲输入 .IOCLK(w_adc_dry_bufio1), .SERDESSTROBE(w_bufio_serdesstrobe), .DIVCLK(w_adc_dry_bufiodiv) ); BUFIO2 #( .USE_DOUBLER(“FALSE”), .DIVIDE(1), .DIVIDE_BYPASS(“TRUE”), .I_INVERT(“TRUE”) ) BUFIO_inst2 ( .I(w_adc_dry_ibuf),//时钟缓冲输入 .IOCLK(w_adc_dry_bufio2)//时钟缓冲输出 ); w_adc_dry_bufio1 - posedge,w_adc_dry_bufio2- negedge。 我写约束: NET“ADC1_DRDY_P”TNM_NET = ADC1_DRDY_P; TIMESPEC TS_ADC1_DRDY_P = PERIOD“ADC1_DRDY_P”6 ns HIGH 50%; TIMEGRP“TG_ADC0”= pads(“ADC1_ *”)除了PADS(“ADC1_DRDY *”); 在ADC1_DRDY_P上升之前,TIMEGRP“TG_ADC0”OFFSET = IN -0.500 ns有效2.000 ns; TIMEGRP“TG_ADC0”OFFSET = IN -0.500 ns有效2.000 ns在ADC1_DRDY_P下降之前; (现在是333 MHz,因为400 MHz的约束根本无法满足.arelay有一些问题(AR#38408),我尽量不使用它:)) 最后,我的问题:) 在这种配置中(两个bufio,一个倒置)ISE不分析FALLING路径。 它试图用两个时钟“击中”一个RISING有效窗口(2.0 ns) - w_adc_dry_bufio1和w_adc_dry_bufio2。 以下是时序分析器的一些词: 时序约束:TIMEGRP“TG_ADC0”OFFSET = IN -0.5 ns有效2 ns COMP COMP“ADC1_DRDY_P”“上升”; ........设置路径: 松弛:0.268ns(要求 - (数据路径 - 时钟路径 - 时钟到达+不确定性)) 来源:ADC1_DATA_N(PAD) 目的地:ts11_adc_inst / input_flops_loop [4] .ISERDES2_inst(FF) 目标时钟:ts11_adc_inst / w_adc_dry_bufio1以0.000ns的速度上升 要求:-0.500ns ........松弛:3.318ns(要求 - (数据路径 - 时钟路径 - 时钟到达+不确定性)) 来源:ADC1_DATA_P(PAD) 目的地:ts11_adc_inst / input_flops_loop [4] .ISERDES2_inst(FF) 目的地时钟:ts11_adc_inst / w_adc_dry_bufio2以3.000ns的速度上升 要求:-0.500ns ........保持路径: 松弛(保持路径):-3.040ns(要求 - (时钟路径+时钟到达+不确定性 - 数据路径)) 来源:ADC1_DATA_P(PAD) 目的地:ts11_adc_inst / input_flops_loop [2] .ISERDES2_inst(FF) 目的地时钟:ts11_adc_inst / w_adc_dry_bufio2以3.000ns的速度上升 要求:2.500ns ........松弛(保持路径):0.035ns(要求 - (时钟路径+时钟到达+不确定性 - 数据路径)) 来源:ADC1_DATA_P(PAD) 目的地:ts11_adc_inst / input_flops_loop [2] .ISERDES2_inst(FF) 目标时钟:ts11_adc_inst / w_adc_dry_bufio1以0.000ns的速度上升 要求:2.500ns 我看到,上升的约束(bufio1时钟)有一些余量,但下降的约束没有以正确的方式分析。 目标时钟:ts11_adc_inst / w_adc_dry_bufio2以3.000ns上升,分析了“RISING”部分的时序约束... 我应该如何编写OFFSET或其他任何东西才能使其工作? :) 谢谢。 --Dies diem docet。 以上来自于谷歌翻译 以下为原文 Hello everybody. I'm trying to acquire data from TI's 400 Msps adc (ADS5474) with Spartan6 -3 chip. I think I have pretty good knowledge of selectIO structure, s6 datasheets, adc datasheet etc. ADC clocked by external synth, frequency can change from about 30 to 400 MHz. ADC output - LVDS, maximum 200 MHz ddr, data edge aligned with adc's output clock. Some restrictions I have: 1) Sample board is designed and manufactured. 2) ADC data pairs comes to whole edge, not only one half. 3) ADC frequency can change on the fly. I cannot use PLL with BUFPLL because of ADC frequency changing (i don't want to use DRP every time) I cannot use IDELAY on input clock because of whole bank spanning. Only way i see now - using four BUFIO2 (two because of ddr mode and x2 because of full bank data span) Right now i'm trying to implement only one half of bank, then will do both. This is the code for clock input from ADC to use in iserdes: IBUFDS #( .DIFF_TERM ("TRUE"), // Differential Termination (Virtex-4/5, Spartan-3E/3A) .IOSTANDARD ("LVDS_25") // Specify the input I/O standard ) IBUFDS_ADC_CLK ( .O ( w_adc_dry_ibuf ), // Buffer output .I ( ADC_DRY_P ), // Diff_p buffer input (connect directly to top-level port) .IB ( ADC_DRY_N ) // Diff_n buffer input (connect directly to top-level port) );BUFIO2 #( .USE_DOUBLER ( "TRUE" ), .DIVIDE ( 2 ), .DIVIDE_BYPASS ( "FALSE" ), .I_INVERT ( "FALSE" ) ) BUFIO_inst ( .I( w_adc_dry_ibuf ), // Clock buffer input .IOCLK( w_adc_dry_bufio1 ), .SERDESSTROBE ( w_bufio_serdesstrobe ), .DIVCLK ( w_adc_dry_bufiodiv ) );BUFIO2 #( .USE_DOUBLER ( "FALSE" ), .DIVIDE ( 1 ), .DIVIDE_BYPASS ( "TRUE" ), .I_INVERT ( "TRUE" ) ) BUFIO_inst2 ( .I( w_adc_dry_ibuf ), // Clock buffer input .IOCLK( w_adc_dry_bufio2 ) // Clock buffer output ); w_adc_dry_bufio1 - posedge, w_adc_dry_bufio2 - negedge. i write constraints: NET "ADC1_DRDY_P" TNM_NET = ADC1_DRDY_P;TIMESPEC TS_ADC1_DRDY_P = PERIOD "ADC1_DRDY_P" 6 ns HIGH 50%;TIMEGRP "TG_ADC0" = PADS("ADC1_*") EXCEPT PADS("ADC1_DRDY*");TIMEGRP "TG_ADC0" OFFSET=IN -0.500 ns VALID 2.000 ns BEFORE ADC1_DRDY_P RISING;TIMEGRP "TG_ADC0" OFFSET=IN -0.500 ns VALID 2.000 ns BEFORE ADC1_DRDY_P FALLING; (it's for 333 MHz now, because 400 MHz constraints cannot meet at all. There is some issues with idelay (AR#38408), and i try not to use it :) ) At last, my question :) In this configuration (two bufio's, one inverted) ISE does not analyze FALLING path. It tries to "hit" one RISING valid window (2.0 ns) with both clocks - w_adc_dry_bufio1 and w_adc_dry_bufio2. Here are some words from Timing analyzer: Timing constraint: TIMEGRP "TG_ADC0" OFFSET = IN -0.5 ns VALID 2 ns BEFORE COMP "ADC1_DRDY_P" "RISING"; ........ Setup paths: Slack: 0.268ns (requirement - (data path - clock path - clock arrival + uncertainty)) Source: ADC1_DATA_N<4> (PAD) Destination: ts11_adc_inst/input_flops_loop[4].ISERDES2_inst (FF) Destination Clock: ts11_adc_inst/w_adc_dry_bufio1 rising at 0.000ns Requirement: -0.500ns ........ Slack: 3.318ns (requirement - (data path - clock path - clock arrival + uncertainty)) Source: ADC1_DATA_P<4> (PAD) Destination: ts11_adc_inst/input_flops_loop[4].ISERDES2_inst (FF) Destination Clock: ts11_adc_inst/w_adc_dry_bufio2 rising at 3.000ns Requirement: -0.500ns ........ Hold paths: Slack (hold path): -3.040ns (requirement - (clock path + clock arrival + uncertainty - data path)) Source: ADC1_DATA_P<2> (PAD) Destination: ts11_adc_inst/input_flops_loop[2].ISERDES2_inst (FF) Destination Clock: ts11_adc_inst/w_adc_dry_bufio2 rising at 3.000ns Requirement: 2.500ns ........ Slack (hold path): 0.035ns (requirement - (clock path + clock arrival + uncertainty - data path)) Source: ADC1_DATA_P<2> (PAD) Destination: ts11_adc_inst/input_flops_loop[2].ISERDES2_inst (FF) Destination Clock: ts11_adc_inst/w_adc_dry_bufio1 rising at 0.000ns Requirement: 2.500ns I see, that rising constraits (bufio1 clock) are met with some margin, but falling constraints are not analysed in correct way. Destination Clock: ts11_adc_inst/w_adc_dry_bufio2 rising at 3.000ns analysed in timing constraint for "RISING" part... How should i write OFFSET or anything else to make it work? :) Thank you. -- Dies diem docet. |
|
相关推荐
17个回答
|
|
|
我认为你需要先定义两个时间组,一个用于上升沿的寄存器
输入时钟的输入时钟和另一个仅用于寄存器的输入时钟。 然后 将OFFSET IN约束应用于每个时间组,如: TIMEGRP“TG_ADC0_RISING”=上升“ADC1_DRDY_P”; TIMEGRP“TG_ADC0_FALLING”=下降“ADC1_DRDY_P”; TIMEGRP“TG_ADC0_RISING”OFFSET = IN -0.500 ns有效2.000 ns在ADC1_DRDY_P上升之前; TIMEGRP“TG_ADC0_FALLING”OFFSET = IN -0.500 ns有效2.000 ns 在ADC1_DRDY_P下降之前; - Gabor - Gabor 以上来自于谷歌翻译 以下为原文 I think you need to first define two time groups, one for registers on the rising edge of the input clock and another for only registers on the falling edge of the input clock. Then apply the OFFSET IN constraints to each time group like: TIMEGRP "TG_ADC0_RISING" = RISING "ADC1_DRDY_P"; TIMEGRP "TG_ADC0_FALLING" = FALLING "ADC1_DRDY_P"; TIMEGRP "TG_ADC0_RISING" OFFSET=IN -0.500 ns VALID 2.000 ns BEFORE ADC1_DRDY_P RISING; TIMEGRP "TG_ADC0_FALLING" OFFSET=IN -0.500 ns VALID 2.000 ns BEFORE ADC1_DRDY_P FALLING; -- Gabor -- Gabor |
|
|
|
|
|
我已经尝试过了,但是ISE发出了这个警告
警告:ConstraintSystem:192 - TNM'ADC1_DRDY_P',不直接或 间接驱动任何触发器,锁存器和/或RAMS,并且不能主动 由引用TimeGrp约束'TG_ADC0_RISING'使用。 如果是时钟经理 块直接或间接驱动,新的TNM约束不会 派生,因为没有引用约束是PERIOD 约束。 此TNM用于以下用户组和/或 规格: [Magic01_TOP.ucf(11)] [Magic01_TOP.ucf(12)] 并且根本不应用任何偏移约束。 --Dies diem docet。 以上来自于谷歌翻译 以下为原文 I've already tried this, but ISE issues this warning WARNING:ConstraintSystem:192 - The TNM 'ADC1_DRDY_P', does not directly orindirectly drive any flip-flops, latches and/or RAMS and cannot be activelyused by the referencing TimeGrp constraint 'TG_ADC0_RISING'. If clock managerblocks are directly or indirectly driven, a new TNM constraint will not bederived since the none of the referencing constraints are a PERIODconstraint. This TNM is used in the following user groups and/orspecifications: -- Dies diem docet. |
|
|
|
|
|
这看起来很奇怪,因为您的时间规格引用了ADC1_DRDY_P信号
好像是时钟。 如果这不是DDR输入寄存器的时钟源,那么您需要 更改.ucf以使用实际时钟输入并根据该时钟定义偏移约束。 - Gabor - Gabor 以上来自于谷歌翻译 以下为原文 That seems strange, because your time specs were referencing the ADC1_DRDY_P signal as if it were the clock. If this is not the clock source of the DDR input registers, then you need to change your .ucf to use the actual clock input and define the offset constraints based on that clock. -- Gabor -- Gabor |
|
|
|
|
|
显然,ISERDES不被认为是“触发器,锁存器和/或RAMS”
必须以其他方式指定时间...... 您可能想要为此问题打开一个Webcase。 - Gabor - Gabor 以上来自于谷歌翻译 以下为原文 Apparently an ISERDES is not considered to be "flip-flops, latches and/or RAMS" so there must be some other way to specify timing... You might want to open a webcase for this issue. -- Gabor -- Gabor |
|
|
|
|
|
显然,ISERDES不被认为是“触发器,锁存器和/或RAMS”
必须以其他方式指定时间...... 您可能想要为此问题打开一个Webcase。 实际上,这似乎很奇怪。 Spartan-6数据表(DS162)包括ISERDES2的全套时序规范(当然包括时钟设置和保持时间的数据输入)。 就数据表而言,ISERDES2绝对被认为是“触发器,锁存器和/或RAMS”。 这(在静态时序分析中包含ISERDES2)应该足够简单,无需太多工作即可验证。 - 鲍勃埃尔金德 签名:新手的自述文件在这里:http://forums.xilinx.com/t5/New-Users-Forum/README-first-Help-for-new-users/td-p/219369总结:1。 阅读手册或用户指南。 你读过手册了吗? 你能找到手册吗?2。 搜索论坛(并搜索网页)以寻找类似的主题。 不要在多个论坛上发布相同的问题。 不要在别人的主题上发布新主题或问题,开始新的主题!5。 学生:复制代码与学习设计不同.6“它不起作用”不是一个可以回答的问题。 提供有用的详细信息(请与网页,数据表链接).7。 您的代码中的评论不需要支付额外费用。 我没有支付论坛帖子的费用。 如果我写一篇好文章,那么我一无所获。 以上来自于谷歌翻译 以下为原文 Apparently an ISERDES is not considered to be "flip-flops, latches and/or RAMS" so there must be some other way to specify timing... You might want to open a webcase for this issue. Indeed, this does seem strange. The Spartan-6 datasheet (DS162) includes a full set of timing specifications (including, of course, data input to clock setup and hold times) for ISERDES2. As far as the datasheet is concerned, ISERDES2 is absolutely considered to be "flip-flops, latches and/or RAMS". This (inclusion of ISERDES2 in static timing analysis) should be simple enough to verify without much work. -- Bob Elkind SIGNATURE: README for newbies is here: http://forums.xilinx.com/t5/New-Users-Forum/README-first-Help-for-new-users/td-p/219369 Summary: 1. Read the manual or user guide. Have you read the manual? Can you find the manual? 2. Search the forums (and search the web) for similar topics. 3. Do not post the same question on multiple forums. 4. Do not post a new topic or question on someone else's thread, start a new thread! 5. Students: Copying code is not the same as learning to design. 6 "It does not work" is not a question which can be answered. Provide useful details (with webpage, datasheet links, please). 7. You are not charged extra fees for comments in your code. 8. I am not paid for forum posts. If I write a good post, then I have been good for nothing. |
|
|
|
|
|
一些实验表明,在为DDR配置使用两个BUFIO2缓冲区的情况下,工具不会“理解”RISING和FALLING表示法。
我认为这是因为ISERDES时钟(C0和C1)由“posedge”驱动,但180度相位(第二个BUFIO2上的I_INVERT参数设置为TRUE),并且工具不“理解”,这个倒置时钟是“negedge” “而不是”posedge“,但180相移。 试试1。 拓扑结构: IBUFDS - > BUFIO2_1 - > ISERDES_C0 - > BUFIO2_2 - > ISERDES_C1 UCF: NET“ADC1_DRDY_P”TNM_NET = ADC1_DRDY_P; TIMESPEC TS_ADC1_DRDY_P = PERIOD“ADC1_DRDY_P”7 ns HIGH 50%; TIMEGRP“TG_ADC0P”= PADS(“ADC1 _ * _ P *”)除了PADS(“ADC1_DRDY *”); 在ADC1_DRDY_P上升之前,TIMEGRP“TG_ADC0P”OFFSET = IN -0.500 ns有效2.500 ns; TIMEGRP“TG_ADC0P”OFFSET = IN -0.500 ns有效2.500 ns在ADC1_DRDY_P下降之前; iserdes时钟连接: ISERDES2 ... params ... ISERDES2_inst (... .CLK0(w_adc_dry_bufio1),// .CLK1(w_adc_dry_bufio2),// ......); 结果:分析了RISING约束的2条路径; 找到0路径为FALLING。 1路径 - 确定,1路径 - 约束不满足约-2.5 ns的松弛,因为工具尝试将“-0.5有效2.5”窗口应用于“w_adc_dry_bufio2上升到3.5”(应该在FALLING部分进行分析......)! 试试2。 拓扑 - 与Try1相同: UCF: NET“ADC1_DRDY_P”TNM_NET = ADC1_DRDY_P; TIMESPEC TS_ADC1_DRDY_P = PERIOD“ADC1_DRDY_P”7 ns HIGH 50%; TIMEGRP“TG_ADC0P”= PADS(“ADC1 _ * _ P *”)除了PADS(“ADC1_DRDY *”); NET“* w_adc_dry_bufio1 *”TNM = ADC_BUFIO_GRP_RISING; NET“* w_adc_dry_bufio2 *”TNM = ADC_BUFIO_GRP_FALLING; TIMEGRP“TG_ADC0P”OFFSET = IN -0.500 ns有效2.500 ns在ADC1_DRDY_P TIMEGRP ADC_BUFIO_GRP_RISING之前; TIMEGRP“TG_ADC0P”OFFSET = IN -4.000 ns有效2.500 ns在ADC1_DRDY_P TIMEGRP ADC_BUFIO_GRP_FALLING之前; iserdes时钟连接与Try 1相同。 结果:分析了ADC_BUFIO_GRP_RISING组的1条路径; 分析了ADC_BUFIO_GRP_FALLING组的1条路径; (由此产生的松弛似乎有意义,并且对于上升和下降路径非常接近)。 我的结论: 工具没有正确地“理解”BUFIO2缓冲器中的反转,使得反相时钟=时钟时钟移位180度,而不是“时间”时钟进行时序分析。 尝试3(以确保,我是对的;)) 拓扑结构: IBUFDS - > BUFIO2_1 - > BUFG - > ISERDES_C0 反转 - > ISERDES_C1 iserdes时钟连接: ...... .CLK0(w_adc_dry_bufg),// .CLK1(~w_adc_dry_bufg),// ... UCF: 尝试1相同。 结果:正确分析上升和下降路径,但未达到约束(由于BUFG的额外延迟,这是可预测的) 很遗憾,ISE无法正确应用约束,我用了这么久。 我不喜欢在UCF中“坚持”网络名称。 --Dies diem docet。 以上来自于谷歌翻译 以下为原文 Some experiments shows, that tools does not "understand" RISING and FALLING notation in case of use two BUFIO2 buffers for DDR configuration. I think it's because of both ISERDES clocks (C0 and C1) driven by "posedge", but 180 degree phase (I_INVERT parameter on second BUFIO2 set to TRUE), and tools don't "understand", that this inverted clock is "negedge" instead of "posedge", but 180 phase shifted. Try 1. Topology: IBUFDS -> BUFIO2_1 -> ISERDES_C0 -> BUFIO2_2 -> ISERDES_C1 UCF: NET "ADC1_DRDY_P" TNM_NET = ADC1_DRDY_P;TIMESPEC TS_ADC1_DRDY_P = PERIOD "ADC1_DRDY_P" 7 ns HIGH 50%;TIMEGRP "TG_ADC0P" = PADS("ADC1_*_P*") EXCEPT PADS("ADC1_DRDY*");TIMEGRP "TG_ADC0P" OFFSET=IN -0.500 ns VALID 2.500 ns BEFORE ADC1_DRDY_P RISING;TIMEGRP "TG_ADC0P" OFFSET=IN -0.500 ns VALID 2.500 ns BEFORE ADC1_DRDY_P FALLING; iserdes clocks connection: ISERDES2... params ... ISERDES2_inst ( ... .CLK0 ( w_adc_dry_bufio1 ), // .CLK1 ( w_adc_dry_bufio2 ), // ... ); Results: Analysed 2 paths for RISING constraint; Found 0 paths for FALLING. 1 path - ok, 1 path - constraint not met with slack about -2.5 ns, because tools try to apply "-0.5 valid 2.5" window to "w_adc_dry_bufio2 rising at 3.5" (which should be analysed in FALLING part...)! Try 2. Topology - same as Try1: UCF: NET "ADC1_DRDY_P" TNM_NET = ADC1_DRDY_P;TIMESPEC TS_ADC1_DRDY_P = PERIOD "ADC1_DRDY_P" 7 ns HIGH 50%;TIMEGRP "TG_ADC0P" = PADS("ADC1_*_P*") EXCEPT PADS("ADC1_DRDY*");NET "*w_adc_dry_bufio1*" TNM = ADC_BUFIO_GRP_RISING; NET "*w_adc_dry_bufio2*" TNM = ADC_BUFIO_GRP_FALLING;TIMEGRP "TG_ADC0P" OFFSET=IN -0.500 ns VALID 2.500 ns BEFORE ADC1_DRDY_P TIMEGRP ADC_BUFIO_GRP_RISING;TIMEGRP "TG_ADC0P" OFFSET=IN -4.000 ns VALID 2.500 ns BEFORE ADC1_DRDY_P TIMEGRP ADC_BUFIO_GRP_FALLING;iserdes clocks connection same as Try 1. Results: Analysed 1 paths for ADC_BUFIO_GRP_RISING group; Analysed 1 paths for ADC_BUFIO_GRP_FALLING group; (resulting slacks seems to make sense and are very close for rising and falling paths). My conclusion: Tools doesn't correctly "understand" inversion in BUFIO2 buffer, making inverted clock = posedge clock shifted 180 degree, instead of "negedge" clock for timing analysis. Try 3 (to make sure, that i am right ;) ) Topology: IBUFDS -> BUFIO2_1 -> BUFG -> ISERDES_C0 inversion -> ISERDES_C1 iserdes clocks connection: ... .CLK0 ( w_adc_dry_bufg ), // .CLK1 ( ~w_adc_dry_bufg ), // ... UCF: Same as try 1. Results: Rising and falling paths analysed correctly, but constraints not met (it's predictable, because of extra delay on BUFG) It's a pity, that ISE cannot properly apply constraints, i used so long. I don't like "sticking" to net names in UCF. -- Dies diem docet. |
|
|
|
|
|
后PAR静态时序报告(数据手册报告)是指时钟上升沿和下降沿?
另外,您真的相信您的输入数据在200MHz时钟周期的每个半周期内对于完整的2.5nS有效吗? 拓扑结构: IBUFDS - > BUFIO2_1 - > BUFG - > ISERDES_C0 反转 - > ISERDES_C1 我相信这个时钟分配路径中的BUFIO2_1是不必要的。 IBUFDS输出应直接驱动BUFG输入。 - 鲍勃埃尔金德 签名:新手的自述文件在这里:http://forums.xilinx.com/t5/New-Users-Forum/README-first-Help-for-new-users/td-p/219369总结:1。 阅读手册或用户指南。 你读过手册了吗? 你能找到手册吗?2。 搜索论坛(并搜索网页)以寻找类似的主题。 不要在多个论坛上发布相同的问题。 不要在别人的主题上发布新主题或问题,开始新的主题!5。 学生:复制代码与学习设计不同.6“它不起作用”不是一个可以回答的问题。 提供有用的详细信息(请与网页,数据表链接).7。 您的代码中的评论不需要支付额外费用。 我没有支付论坛帖子的费用。 如果我写一篇好文章,那么我一无所获。 以上来自于谷歌翻译 以下为原文 Does the Post-PAR Static Timing Report (Data Sheet Report) refer to rising and falling clock edges? Also, do you truly believe that your input data is valid for a full 2.5nS in each half-cycle of a 200MHz clock period? Topology: IBUFDS -> BUFIO2_1 -> BUFG -> ISERDES_C0 inversion -> ISERDES_C1 I believe the BUFIO2_1 in this clock distribution path is unnecessary. IBUFDS output should drive BUFG input directly. -- Bob Elkind SIGNATURE: README for newbies is here: http://forums.xilinx.com/t5/New-Users-Forum/README-first-Help-for-new-users/td-p/219369 Summary: 1. Read the manual or user guide. Have you read the manual? Can you find the manual? 2. Search the forums (and search the web) for similar topics. 3. Do not post the same question on multiple forums. 4. Do not post a new topic or question on someone else's thread, start a new thread! 5. Students: Copying code is not the same as learning to design. 6 "It does not work" is not a question which can be answered. Provide useful details (with webpage, datasheet links, please). 7. You are not charged extra fees for comments in your code. 8. I am not paid for forum posts. If I write a good post, then I have been good for nothing. |
|
|
|
|
|
1)在Try 2和Try3 post par时间报告中指的是上升沿和下降沿。
2)你是对的,200 MHz ddr - 仅1.5 ns有效时间(2.5 ns - 半周期和500 ps时钟到数据偏斜)。 但正如你在ucf中看到的那样 - 我将最大频率放宽到7 ns周期(3.5 ns半周期 - > 2.5有效时间) 3)是的,你是对的,但它是可能的,并且需要更少的编码,我使用已经实例化的bufg,只改变连接的网络:) --Dies diem docet。 以上来自于谷歌翻译 以下为原文 1) in Try 2 and Try3 post par timing report refers to rising and falling edges. 2) You are right, 200 MHz ddr - only 1.5 ns valid time (2.5 ns - half period and 500 ps clock to data skew). But as you can see in ucf - I relaxed max freq to 7 ns period (3.5 ns half period -> 2.5 valid time) 3) Yes, you are right again, but it is possible and required much less coding, i used already instantiated bufg, only changed connected nets :) -- Dies diem docet. |
|
|
|
|
|
ADC对不同的采样频率有不同的规格,因此有时最好不要过采样。
有时它是可以接受的,但我想制作一些“防弹”设计,我的同事可以在信号处理中使用它。 首先,在硬件设计方面,窄采样频率范围使得抗混叠滤波器(在ADC前面)设计出一个更简单的问题。 下一步...您的设计是否需要动态采样频率变化,或每次上电一次采样频率设置? 如果采样频率变化不是动态的,则只需为不同的采集频率生成不同的FPGA配置(位文件)。 这不会简化抗混叠滤波器设计问题,但它将允许您(最终!)使用PLL以获得最佳效果(并且可能避免所有的idelay复杂性)。 - 鲍勃埃尔金德 签名:新手的自述文件在这里:http://forums.xilinx.com/t5/New-Users-Forum/README-first-Help-for-new-users/td-p/219369总结:1。 阅读手册或用户指南。 你读过手册了吗? 你能找到手册吗?2。 搜索论坛(并搜索网页)以寻找类似的主题。 不要在多个论坛上发布相同的问题。 不要在别人的主题上发布新主题或问题,开始新的主题!5。 学生:复制代码与学习设计不同.6“它不起作用”不是一个可以回答的问题。 提供有用的详细信息(请与网页,数据表链接).7。 您的代码中的评论不需要支付额外费用。 我没有支付论坛帖子的费用。 如果我写一篇好文章,那么我一无所获。 以上来自于谷歌翻译 以下为原文 ADCs have different specs for different sampling freqs, so sometimes it's better not to oversample. Sometimes it is acceptable, but i want to make some "bulletproof" design, which can be used by my colleagues in signal processing. First of all, in terms of hardware design, a narrow sampling frequency range makes the anti-aliasing filter (in front of the ADC) design a simpler problem. Next... Does your design require dynamic sampling frequency changes, or once-per-powerup sampling frequency setup? If the sampling frequency change is not dynamic, then simply generate different FPGA configurations (bit files) for different acquisition frequencies. This won't simplify the anti-aliasing filter design problem, but it will allow you (finally!) to use the PLL to its best advantage (and likely avoid all the idelay complexity). -- Bob Elkind SIGNATURE: README for newbies is here: http://forums.xilinx.com/t5/New-Users-Forum/README-first-Help-for-new-users/td-p/219369 Summary: 1. Read the manual or user guide. Have you read the manual? Can you find the manual? 2. Search the forums (and search the web) for similar topics. 3. Do not post the same question on multiple forums. 4. Do not post a new topic or question on someone else's thread, start a new thread! 5. Students: Copying code is not the same as learning to design. 6 "It does not work" is not a question which can be answered. Provide useful details (with webpage, datasheet links, please). 7. You are not charged extra fees for comments in your code. 8. I am not paid for forum posts. If I write a good post, then I have been good for nothing. |
|
|
|
|
|
首先,在硬件设计方面,窄采样频率范围使得抗混叠滤波器(在ADC前面)设计出一个更简单的问题。
你是对的。 但是我们有不同的前端具有不同的滤波器宽度(以及板载宽带宽),因此有时“降低”adc freq是有用的,因为我们已经有“窄”滤波的IF输入信号。 其他问题 - 在相对较小的设备(如Spartan;)中很难为高频率(例如400 MHz)应用高质量的窄带宽滤波器。 下一步...您的设计是否需要动态采样频率变化,或每次上电一次采样频率设置? 如果采样频率变化不是动态的,则只需为不同的采集频率生成不同的FPGA配置(位文件)。 这不会简化抗混叠滤波器设计问题,但它将允许您(最终!)使用PLL以获得最佳效果(并且可能避免所有的idelay复杂性)。 是的,我需要动态采样频率变化。 我可以处理freq更改时的重置,但是为不同的频率设置不同的位文件或设计是不可接受的。 使用这个adc获取模块会有几个到很多设计,如果我会说 - 编译你的设计三次(我需要3套PLL系数来覆盖全频率范围) - 其他设计师可能会杀了我(在他们的位置我 将:))。 似乎bufpll的pll将满足400 Mbps的限制,但我正在“吸烟”PLL DRP功能表 - 如果可以改变乘法并实时划分值... --Dies diem docet。 以上来自于谷歌翻译 以下为原文 First of all, in terms of hardware design, a narrow sampling frequency range makes the anti-aliasing filter (in front of the ADC) design a simpler problem. Yes, you are right. But we have different frontends with different filter widths (and wide bandwidth onboard), so sometimes it's useful to "slow down" adc freq because we already have "narrow" filtered IF input signal. Other issue - it's hard to apply high quality narrow bandwidth filter for high freqs (e.g.400 MHz) in relatively small devices (like Spartan ;) ). Next... Does your design require dynamic sampling frequency changes, or once-per-powerup sampling frequency setup? If the sampling frequency change is not dynamic, then simply generate different FPGA configurations (bit files) for different acquisition frequencies. This won't simplify the anti-aliasing filter design problem, but it will allow you (finally!) to use the PLL to its best advantage (and likely avoid all the idelay complexity). Yes, i need dynamic sampling frequency changes. I can handle with reset on freq change, but it's not acceptable to have different bit-files or designs for different freqs. There will be several to many designs using this adc aquire module, and if i will say - compile your designs three times (i need 3 sets of PLL coefficients to cover full freq range) - other designers will probably kill me (on their place i will :) ). It seems that pll with bufpll will meet 400 Mbps constraints, but i'm "smoking" PLL DRP functionality sheets - if it is possible to change multiply and divide values live... -- Dies diem docet. |
|
|
|
|
|
因此,可以动态更改PLL属性,并且由于某些“idelay”问题,它(pll和bufpll)似乎是最好的(也是唯一的)解决方案。
--Dies diem docet。 以上来自于谷歌翻译 以下为原文 So it's possible to change PLL attributes on the fly, and it (pll and bufpll) seems the best (and only) solution due to some "idelay" issues. -- Dies diem docet. |
|
|
|
|
|
首先,在硬件设计方面,窄采样频率范围使得抗混叠滤波器(在ADC前面)设计出一个更简单的问题。
顺便说一下,采样频率范围不窄,而窄频带相对于中频。 同样难以在70 MHz IF上传输40 MHz的过滤器,在7 MHz IF上传输4 MHz ...而在70 MHz IF上传输相对容易4 MHz。 对不起offtopic ... --Dies diem docet。 以上来自于谷歌翻译 以下为原文 First of all, in terms of hardware design, a narrow sampling frequency range makes the anti-aliasing filter (in front of the ADC) design a simpler problem. By the way, not narrow sampling frequency range, but narrow pas***and relative to intermediate frequency. It's about equally hard to make good filter 40 MHz pass on 70 MHz IF and 4 MHz pass on 7 MHz IF... And relatively easier 4 MHz pass on 70 MHz IF. Sorry for offtopic... -- Dies diem docet. |
|
|
|
|
|
顺便说一下,采样频率范围不窄,而窄频带相对于中频。
同样难以在70 MHz IF上传输40 MHz的过滤器,在7 MHz IF上传输4 MHz ...而在70 MHz IF上传输相对容易4 MHz。 我希望你理解并接受的观点是,采用140MHz采样时钟(例如)采样0-40MHz信号的相同硬件足以很好地采集具有相同140MHz采样时钟的0-4MHz信号并且相同 模拟AA(抗锯齿)滤波器。 额外的数字LPF(低通滤波器)和可选的抽取可以从40MHz采样数据中提取4MHz数字信号,可以直接实现为FPGA逻辑。 在FPGA逻辑的背景下,这种额外的灵活性(不一定)不需要不同的硬件(即物理组件)。 这种提供额外设计灵活性的过采样方法是我希望传达给该线程的第三方观察者的信息。 您(以及具有类似设计挑战的其他设备)的额外好处是FPGA设计采样时钟频率,时钟生成和时钟分配的一致性。 对不起offtopic。 一点也不偏不倚。 - 鲍勃埃尔金德 签名:新手的自述文件在这里:http://forums.xilinx.com/t5/New-Users-Forum/README-first-Help-for-new-users/td-p/219369总结:1。 阅读手册或用户指南。 你读过手册了吗? 你能找到手册吗?2。 搜索论坛(并搜索网页)以寻找类似的主题。 不要在多个论坛上发布相同的问题。 不要在别人的主题上发布新主题或问题,开始新的主题!5。 学生:复制代码与学习设计不同.6“它不起作用”不是一个可以回答的问题。 提供有用的详细信息(请与网页,数据表链接).7。 您的代码中的评论不需要支付额外费用。 我没有支付论坛帖子的费用。 如果我写一篇好文章,那么我一无所获。 以上来自于谷歌翻译 以下为原文 By the way, not narrow sampling frequency range, but narrow pas***and relative to intermediate frequency. It's about equally hard to make good filter 40 MHz pass on 70 MHz IF and 4 MHz pass on 7 MHz IF... And relatively easier 4 MHz pass on 70 MHz IF. The point I was hoping you would understand and accept is that the same hardware designed to sample 0-40MHz signals with a 140MHz sampling clock (for example) will suffice quite nicely for acquiring 0-4MHz signals with the same 140MHz sampling clock and the same analogue AA (anti-aliasing) filter. The additional digital LPF (low pass filter) and optional decimation to render 4MHz digital signal from the 40MHz sampled data is straightforward to implement as FPGA logic. In the context of FPGA logic, this additional flexibility does not (necessarily) require different hardware (i.e. physical components). This oversampling approach which provides additional design flexibility is the message which I'd like conveyed to 3rd party observers of this thread. The additional benefit for you (and others with a similar design challenge) would be consistency in the FPGA design sampling clock frequency, clock generation, and clock distribution. Sorry for offtopic. Not the least bit offtopic. -- Bob Elkind SIGNATURE: README for newbies is here: http://forums.xilinx.com/t5/New-Users-Forum/README-first-Help-for-new-users/td-p/219369 Summary: 1. Read the manual or user guide. Have you read the manual? Can you find the manual? 2. Search the forums (and search the web) for similar topics. 3. Do not post the same question on multiple forums. 4. Do not post a new topic or question on someone else's thread, start a new thread! 5. Students: Copying code is not the same as learning to design. 6 "It does not work" is not a question which can be answered. Provide useful details (with webpage, datasheet links, please). 7. You are not charged extra fees for comments in your code. 8. I am not paid for forum posts. If I write a good post, then I have been good for nothing. |
|
|
|
|
|
我希望你理解并接受的观点是,采用140MHz采样时钟(例如)采样0-40MHz信号的相同硬件足以很好地采集具有相同140MHz采样时钟的0-4MHz信号并且相同
AA过滤器。 额外的数字LPF(低通滤波器)和可选的抽取可以从40MHz采样数据中提取4MHz数字信号,可以直接实现为FPGA逻辑。 在FPGA逻辑的背景下,这种额外的灵活性(不一定)不需要不同的硬件(即物理组件)。 同意。 它将工作,并将工作良好。它很简单,但它确实消耗一些DSP资源。 资源之间总是存在权衡 - 无处不在。 如果您有备用DSP48,则可以从40MHz过滤4MHz。 我们有不同的接收器我们必须连接到我想要使用模拟资源,如果我有它(接收器中的过滤器),而不是Spartan6中的DSP资源(顺便说一句,过滤器需要编程,所以过采样和抽取也不那么灵活“ 没有错误“作为PLL重配置。我的意思是需要编程和当前采样频率的知识)。 此外,“通过DRP重新配置PLL”方法不排除过采样方法,但如果我将使用过采样 - 我将不得不对窄带信号进行滤波。 我的目标是为其他fpga和dsp程序员提供更多可以使用的功能:) 我认为可以找到针对这种特殊情况的解决方案,PLL具有很少的CLKFBOUT_MULT / DIVCLK_DIVIDE动态可编程系数,以及BUFPLL驱动整个边沿。在改变频率时需要额外的努力来编程新系数,但不是很多。 感谢您的建设性和快速讨论。 --Dies diem docet。 以上来自于谷歌翻译 以下为原文 The point I was hoping you would understand and accept is that the same hardware designed to sample 0-40MHz signals with a 140MHz sampling clock (for example) will suffice quite nicely for acquiring 0-4MHz signals with the same 140MHz sampling clock and the same AA filter. The additional digital LPF (low pass filter) and optional decimation to render 4MHz digital signal from the 40MHz sampled data is straightforward to implement as FPGA logic. In the context of FPGA logic, this additional flexibility does not (necessarily) require different hardware (i.e. physical components). Agree. It will work, and will work good. It is straightforward, but it does consume some DSP resources. There is always tradeoff between resources - everywhere. If you have spare DSP48, you can filter 4MHz from 40MHz. We have different recievers we have to connect to and I want to use analog resources, if I have it (filter in reciever), instead of DSP resources in Spartan6 (By the way, filters need programming, so oversampling and decimating also not so flexible and "error free" as PLL reconfiguration. I mean both need programming and knowledge of current sampling frequency). Also, "PLL reconfig through DRP" approach does not exclude oversampling approach, but if I will use oversampling - I'll have to do filtering for narrowband signals. My goal is to give other fpga and dsp programmers more functionality they can use :) I think solution for this particular case is found, PLL with few CLKFBOUT_MULT/DIVCLK_DIVIDE on-the-fly programmable coefficients, and BUFPLL driving whole edge. Will need some additional effort to program new coefficients when changing frequency, but not much. Thank you for constructive and quick discussion. -- Dies diem docet. |
|
|
|
|
|
您可以使用固定的外部硬件以及单个FPGA设计来处理可变过采样,该设计不会使用比为特定带宽和采样率设计的资源多得多的资源。
解决方案是在您的NCO /混频器和您已经需要的低通滤波器之间的设计中包含级联积分器 - 梳状(CIC)滤波器。 该滤波器的优点在于,无论抽取率如何,与输出采样率相关的滤波器响应都是相同的,因此无论带宽如何,您都可以使用相同的后抽取滤波。 CIC滤波器只是几个加法器和减法器(没有乘法器)。 它的频率响应是Sinc功能(它相当于一系列FIR滤波器,每个滤波器的所有系数都设置为1)。 使用这种方法,您需要对不同的输出采样率进行的唯一调整是选择CIC滤波器的抽取率,可以在运行中轻松更改。 Ray Andraka,P.E。 安德拉卡咨询集团总裁 ray@andraka.com / http //:www.andraka.com 以上来自于谷歌翻译 以下为原文 You can handle variable oversampling with fixed external hardware as well as a single FPGA design that does not use a lot more resources than one that is designed for one particular bandwidth and sample rate. The solution is to include a Cascaded Integrator-Comb (CIC) filter in the design between your NCO/mixer and the low pass filters you already need. The beauty of this filter is that the filter response referred to the output sample rate is the same regardless of the decimation ratio, so you can use the same post-decimation filtering regardless of the bandwidth. The CIC filter is just a couple of adders and subtractors (no multipliers). It's frequency response is the Sinc function (it is equivalent to a cascade of FIR filters each with all its coefficients set to 1). WIth this approach, the only adjustment you need to do for different output sample rates is the selection of the decimation ratio for the CIC filter, which can be changed easily on the fly.Ray Andraka, P.E.president, Andraka Consulting Groupray@andraka.com / http//:www.andraka.com |
|
|
|
|
|
射线,
很高兴收到你的来信。 您是否有您喜欢或推荐的CIC过滤器的特定参考链接,或链接到示例(参考)实现? 您过去对comp.arch.fpga社区的贡献,尤其是DSP领域的贡献,对于我们这些自20世纪90年代以来一直积极参与FPGA设计的人来说都是传奇。 问候, - 鲍勃埃尔金德 签名:新手的自述文件在这里:http://forums.xilinx.com/t5/New-Users-Forum/README-first-Help-for-new-users/td-p/219369总结:1。 阅读手册或用户指南。 你读过手册了吗? 你能找到手册吗?2。 搜索论坛(并搜索网页)以寻找类似的主题。 不要在多个论坛上发布相同的问题。 不要在别人的主题上发布新主题或问题,开始新的主题!5。 学生:复制代码与学习设计不同.6“它不起作用”不是一个可以回答的问题。 提供有用的详细信息(请与网页,数据表链接).7。 您的代码中的评论不需要支付额外费用。 我没有支付论坛帖子的费用。 如果我写一篇好文章,那么我一无所获。 以上来自于谷歌翻译 以下为原文 Ray, It is good to hear from you. Do you have specific reference links for CIC filter which you prefer or recommend, or links to example (reference) implementations? Your past contributions to the comp.arch.fpga community, particularly in the field of DSP, are legendary to those of us who have been actively engaged in FPGA design since the 1990s. Regards, -- Bob Elkind SIGNATURE: README for newbies is here: http://forums.xilinx.com/t5/New-Users-Forum/README-first-Help-for-new-users/td-p/219369 Summary: 1. Read the manual or user guide. Have you read the manual? Can you find the manual? 2. Search the forums (and search the web) for similar topics. 3. Do not post the same question on multiple forums. 4. Do not post a new topic or question on someone else's thread, start a new thread! 5. Students: Copying code is not the same as learning to design. 6 "It does not work" is not a question which can be answered. Provide useful details (with webpage, datasheet links, please). 7. You are not charged extra fees for comments in your code. 8. I am not paid for forum posts. If I write a good post, then I have been good for nothing. |
|
|
|
|
|
我有同样的问题,在使用DDR ISERDES2时,没有正确分析下降沿的偏移。
我尝试了一切。 这些约束仅适用于DDR触发器,但不适用于DDR ISERDES2设置为1:2。 有没有人找到解决这个问题的方法? 以上来自于谷歌翻译 以下为原文 I have the same issue with the falling edge not being analyzed properly for offset when using a DDR ISERDES2. I have tried everything. The constraints work fine for just a DDR flip-flop, but not for a DDR ISERDES2 setup as 1:2. Has anyone found a solution to this problem??? |
|
|
|
|
只有小组成员才能发言,加入小组>>
3150 浏览 7 评论
3437 浏览 4 评论
Spartan 3-AN时钟和VHDL让ISE合成时出现错误该怎么办?
2900 浏览 9 评论
4109 浏览 0 评论
如何在RTL或xilinx spartan fpga的约束文件中插入1.56ns延迟缓冲区?
3083 浏览 15 评论
请问vc707的电源线是如何连接的,我这边可能出现了缺失元件的情况导致无法供电
1365浏览 1评论
求一块XILINX开发板KC705,VC707,KC105和KCU1500
1205浏览 1评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-17 17:45 , Processed in 0.954754 second(s), Total 75, Slave 68 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
2545
