赛灵思
直播中

杨雪

7年用户 1103经验值
私信 关注
[问答]

在任何情况下,LUT都可以安全地描述为无故障吗?

你好,
我正在实现SpaceWire I / F(数据/选通编码)的接收器电路,目标信令速率为200 Mbit / s。
我通过不同的实现变体和约束方法。
我真的很感激每个人都花时间阅读这篇文章并分享他对这件事的看法。
事先,是的,我知道从组合逻辑生成时钟是不好的做法 - 在这种情况下,无论如何,这是编码模式(数据/频闪)的本质......
首先,我实现了最天真的变体 - xor'ing数据和选通输入以获得接收器时钟,通过时钟缓冲器传递此时钟并使用它来采样输入数据(两个时钟边沿):
时钟缓冲器的路由和返回引入 - 与DIN路径相比 - RXCLK路径上的相对延迟。
我尝试了所有三种类型的时钟缓冲器(BUFG,BUFH,BUFR)并调查了时序报告。
我发现太难以满足所需的余量(200 Mbit / s,5 ns位周期)。
据我了解,这是由RXCLK路径上的净路由延迟相对较大的变化(最多3 ns)引起的。
另外,我猜实际时序也受到DIN / SIN引脚和时钟缓冲器之间相对位置的影响。
总而言之,这让我得出结论,这种方法并不令人满意。
然后我偶然发现了一篇描述无竞争条件实现方法实现的论文(参见http://2010.spacewire-conference.org/proceedings/Papers/Components/Nomachi.pdf)。
所描述的解决方案使用由组合逻辑驱动的S-R锁存器。
我实现了两个变体,产生两个不同的合成结果:
VHDL代码 - 答:
DSeven_P:进程(SpwDIn,SpwSIn,DSeven,DSeven_N)
开始
DSeven
XST警告 - 答:
警告:Xst:2170 - 单位SpwReceiver:以下信号形成组合循环:n0006。
警告:Xst:2170 - 单位SpwReceiver:以下信号形成组合循环:n0014。
VHDL代码 - B:
DSeven_P:进程(SpwDIn,SpwSIn)
开始
如果SpwDIn ='0',SpwSIn ='0'则
DSeven
XST警告 - B:
警告:Xst:737 - 找到信号的1位锁存器。
锁存器可以从不完整的case或if语句生成。
我们不建议在FPGA / CPLD设计中使用锁存器,因为它们可能会导致时序问题。
警告:Xst:737 - 找到信号的1位锁存器。
锁存器可以从不完整的case或if语句生成。
我们不建议在FPGA / CPLD设计中使用锁存器,因为它们可能会导致时序问题。
我搜索了论坛,找到了两个相关的主题(http://forums.xilinx.com/t5/Simulation-and-Verification/Glitches-in-combinational-logic/td-p/133786,http://forforps.xilinx
com / t5 / Synthesis / How-to-elimination-Xst-2170-combinatorial-loop / td-p / 180326)这引起了我的注意。
所以,最后我的问题是:
我是否忽略了在Xilinx FPGA中实现数据/选通接收器的一些标准方法,如果是,我在哪里可以找到它?
在任何情况下,LUT都可以安全地描述为无故障吗?
例如。
在任何给定的时间,只有两个输入中的一个可以切换(就像数据/选通编码一样)。
是否有任何额外的无毛刺电路原语(BUFGMUX,ODDR2除外)可能有用吗?
顺便说一下,我用于竞争条件免费变体的约束是:
#XCF:
开始模型“SpwReceiver”
NET“SpwDIn”CLOCK_SIGNAL = YES;
NET“SpwSIn”CLOCK_SIGNAL = YES;
NET“RxClk”CLOCK_SIGNAL = YES;
NET“RxClk”BUFFER_TYPE = BUFH;
结束;
#UCF:
NET“SpW * in”TNM_NET =“TNM_SpWin”;
TIMESPEC“TS_SpWRxClk”= PERIOD“TNM_SpWin”100 MHz HIGH 50%INPUT_JITTER 3650 ps;
NET“SpWDin”OFFSET =在“SpWDin”上升之前的10 ns内有效10 ns;
NET“SpWDin”OFFSET =在“SpWDin”下降之前10 ns有效10 ns;
NET“SpWDin”OFFSET = IN 0 ns有效10 ns“SpWSin”上升之前;
NET“SpWDin”OFFSET = IN 0 ns有效10 ns“SpWSin”下降之前;
我使用的是ISE 14.7,我的设备是XC7K480T-2-FFG901。
谢谢,
弗洛里安

回帖(7)

潘晶燕

2020-8-7 09:29:15
F,
你看过这个吗?
http://opencores.org/project,spacewire_light
我认为最重要的是它不是同步数字接口,因此在FPGA器件上,实现至关重要,因为它可能需要手动放置(RLOC约束)。
在这种情况下,您将采用传统的ASIC电路(XOR加4 DFF),并将它们全部相邻(约束放置),以便它们之间的连线不使用全局资源。
将IO DFF定位在IOB中,需要将缓冲区DFF定位在与IO引脚直接相邻的CLB列中,以使延迟受到控制(并且很小)。
我读过的评论是“让它在FPGA设备(V5)中用于太空任务”,但这样做需要我上面描述的关注程度。
Austin Lesea主要工程师Xilinx San Jose
举报

陈晓露

2020-8-7 09:40:54
奥斯汀你好,
感谢您的快速回复。
我看了上面提到的spacewire_light核心,它实现了两个接收器变体,引用了这些注释:
spwrecvfront_generic.vhd:
- 在系统时钟的上升沿对输入进行采样,
spwrecvfront_fast.vhd:
- 输入在外部的上升沿和下降沿采样
- 提供的采样时钟“rxclk”。
所以,遗憾的是这并没有真正帮助我,因为我的系统时钟太慢而且我没有应用外部提供的采样时钟,而只是在DIN xor SIN上进行继电器。
似乎没有办法手动放置我的接收器:/
我唯一还不太确定的是,如何实现无干扰的XOR(或任何其他组合逻辑)?
我不知道在我的7系列设备中有任何像XOR资源那样的经典ASIC电路,我只看到LUT正在进行组合逻辑 - 显然,这些LUT的故障......我只想在这件事情上理解正确的事情。
谢谢,
弗洛里安
举报

潘晶燕

2020-8-7 09:54:51
F,
LUT结构是设计的,没有毛刺。
对于任何更改的单个输入,输出只发生一个边。
回想一下,您正在寻址内存位来实现该功能。
对于此应用程序的XOR,这是两位。
Austin Lesea主要工程师Xilinx San Jose
举报

陈晓露

2020-8-7 10:09:23
对于任何更改的单个输入,输出只发生一个边。
这正是我所希望的。
使用数据/选通编码,DIN和SIN将永远不会同时更改(如果是这样,它违反了编码模式,并且无论如何都会损坏RXCLK)。
因此,这意味着,只要信号符合编码方案,由数据/选通对(2位)驱动的任何LUT2都不会出现毛刺。
当我查看上面的VHDL代码 - B变量的综合结果时,我可以看到只有LUT2(以及所有这些来自DIN / SIN)和LD元素用于构建接收器电路。
这个解决方案的唯一缺点是
警告:Xst:737 - 找到信号的1位锁存器。
锁存器可以从不完整的case或if语句生成。
我们不建议在FPGA / CPLD设计中使用锁存器,因为它们可能会导致时序问题。
警告。
让我们看看跟踪会告诉我什么......
弗洛里安
举报

更多回帖

发帖
×
20
完善资料,
赚取积分