首页
学习
活动
专区
工具
TVP
发布

Lauren的FPGA

专栏成员
269
文章
485807
阅读量
140
订阅数
Vivado 2024.1有哪些新特性?(1)
无论是Synthesis阶段还是Implementation阶段,打开Vivado图形界面,在导航栏下都能看到新增了一个选项Open Dataflow Design,如下图所示。这个功能对于我们分析系统的数据流非常有用。
Lauren的FPGA
2024-06-21
7990
双向IO与IOB
典型的全双工(Full Duplex)系统如下图所示,芯片1和芯片2之间有彼此独立的数据传输线,这意味着芯片1和芯片2可以同时给对方发送数据而不会发生冲突。SPI/UART采用的就是全双工通信方式。半双工系统则不同,芯片1和芯片2之间只有一条专用的且被彼此共享的数据传输线。这就要求芯片1和芯片2必须协商好,当前谁发送数据,谁接收数据。如果两者同时发送数据就会导致发送冲突,从而造成数据丢失。I2C采用的就是半双工通信方式。
Lauren的FPGA
2024-06-19
1840
Vivado使用小技巧
有时我们对时序约束进行了一些调整,希望能够快速看到对应的时序报告,而又不希望重新布局布线。这时,我们可以打开布线后的dcp,直接在Vivado Tcl Console里输入更新后的时序约束。如果调整后的约束在之前版本中已存在,那么Vivado会给出警告信息,显示这些约束会覆盖之前已有的约束;如果是新增约束,那么就会直接生效。例如,我们需要把时钟周期由10ns调整为8ns,就可以进行如下图所示的操作:
Lauren的FPGA
2024-05-30
2110
几个常见问题
vivado -mode tcl和vivado -mode batch有什么区别?
Lauren的FPGA
2024-05-29
860
AMD FPGA设计优化宝典 勘误
近日,收到了一位读者的邮件,指出《AMD FPGA设计优化宝典 SystemVerilog版》第115页关于代码描述的一个错误:
Lauren的FPGA
2024-05-20
1260
再谈Vivado编译时间
通常,综合(Synthesis)所消耗的时间比布局布线要短,但从代码风格角度而言,我们也能找到一些端倪来缩短综合所用的时间。如下图所示代码,左右两侧功能是一致的,区别在于左侧采用了for generate语句,for循环里嵌套了always模块;右侧实际上不需要generate语句,always里直接使用了for循环(注意:实际上,这里不需要for循环,只是为了说明for循环对编译时间的影响)。单独对左侧模块采用OOC综合,耗时2分钟;而右侧耗时1分钟。因此,我们在用for循环时要谨慎一些。
Lauren的FPGA
2024-05-10
7890
如何对Block RAM使用Retiming(1)
对于逻辑级数较大的路径,常用的时序收敛的方法之一就是采用Retiming(中文翻译为重定时)。Retiming到底是怎么回事呢?我们可以通过下图理解。图中通过搬移触发器的位置减小了关键路径的逻辑级数。无论是把触发器向前搬移还是向后搬移,搬移后整个路径的Latency和搬移前的Latency保持一致。可以看到Retiming的前提是相邻路径有可供搬移的触发器,换言之,相邻路径的时序裕量较为“富余”,从这些“富余”中拿出一部分给时序较为紧张的路径。这样,时序紧张的路径其逻辑级数降低了,而相邻的时序“富余”的路径逻辑级数增加了,达到整体逻辑级数的平衡。
Lauren的FPGA
2024-04-18
1700
用FPGA实现双调排序(4)
前面三篇文章我们介绍了双调排序的原理和具体实现方式,但都是要求序列本身是“双调”的。而实际情况是,给定序列本身是杂乱无章的,并非呈现“双调”的特征。这就要求我们先把无序序列转化为双调序列。但无需担心,这种转化也是有章可循的。
Lauren的FPGA
2024-04-11
1930
用FPGA实现双调排序(3)
基于双调排序算法的蝶形图,我们可以得到地址的变化规律。这里以长度为16的双调序列为例,其地址变化规律入下图所示。由于长度为16,故总共需要4个Stage。图中每个Stage颜色的个数表明该Stage可分为的组数。例如Stage 0可分为1组,Stage 1可分为2组,Stage 2可分为4组,Stage 3可分为8组。每组的起始地址和对应的Stage紧密相关,例如Stage 1第0组起始地址为0,即(16/2^1)*0,第1组起始地址为8,即(16/2^1)*1。每组的地址个数也由Stage决定。例如Stage 1每组地址长度为4,即16/2^(1+1),Stage 2每组地址长度为2,即16/2^(2+1)。同一组内,相邻地址的间距为1,例如Stage 1第0组的4个地址为[0,1,2,3],相邻地址间距为1,第1组的4个地址为[8,9,10,11],相邻地址间距为1。一旦确定了op1的地址就很容易确定op2的地址,因为两者之差(用diff表示)也是由Stage决定的。例如:Stage 0两者之差为8,即16/2^(0+1),Stage 1两者之差为4,即16/2^(1+1)。
Lauren的FPGA
2024-04-11
1480
用FPGA实现双调排序(1)
典型的排序算法包括冒泡排序、选择排序、插入排序、归并排序、快速排序、希尔排序、计数排序、双调排序等。这其中,双调排序以其高度的并行性著称,非常适合于在FPGA上实现。
Lauren的FPGA
2024-03-14
3660
利用香农展开定理进行设计优化
香农展开(Shannon's expansion)或称香农分解(Shannon decomposition)是对布尔函数的一种变换方式。它可以将任意布尔函数表达为其中任何一个变量乘以一个子函数,加上这个变量的反变量乘以另一个子函数,如下两个公式所示案例。
Lauren的FPGA
2024-03-05
6210
通过重新布线修复小的保持时间违例
如下图所示,设计中仅有一条路径出现保持时间违例,如果通过更换布线策略实现保持时间收敛,那么就需要重新布线,这样既耗时又不能百分之百确保保持时间违例被修复。此时我们可以尝试重新布线,而这种布线只针对违例路径。
Lauren的FPGA
2024-02-26
1790
DDS Rasterized模式怎么用?
直接数字频率合成器(DDS: Direct Digital Synthesizers)又称数字压控振荡器(NCO: Numerically Controlled Oscillator)在数字通信系统中被广泛使用,例如:正交合成器(产生正弦和余弦信号)常用于数字上/下变频器和调制/解调器中。AMD提供了专门的DDS IP,用户只需根据设计需求进行定制。
Lauren的FPGA
2024-02-06
2890
UltraScale/UltraScale+ DFX设计检查清单
采用UltraScale/UltraScale+芯片进行DFX设计时,建议从以下角度对设计进行检查。
Lauren的FPGA
2024-01-19
2730
针对UltraScale/UltraScale+芯片DFX应考虑的因素有哪些(1)
对于UltraScale/UltraScale+芯片,几乎FPGA内部所有组件都是可以部分可重配置的,这包括CLB中的查找表(LUT)、触发器(FF)、移位寄存器(采用LUT实现)、分布式RAM/ROM等,Block如BRAM、URAM、DSP、GT(高速收发器)、PCIe、CMAC、Interlaken MAC等,SYSMON(XADC和System Monitor),时钟单元如BUFG、MMCM和PLL等,I/O相关单元如ISERDES、OSERDES和IDELAYCTRL等。只有与配置相关组件必须在静态区,包括BSAN、CFG_IO_ACCESS、EFUSE_USR、ICAP、FRAME_ECC、MASTER_JTAG、STARTUP、和USR_ACCESS。
Lauren的FPGA
2023-12-17
3420
DFX设计中有哪些bit文件?
Full configuration bitstreams对应的是静态区加动态区的完整设计,因此,该文件与传统的非DFX工程生成的bitstream从文件格式到文件结构均是一致的。同时使用方法也是一致的。另外,一些特征如对bitstream文件进行加密和压缩也是支持的。另一方面,这里的RP可以是黑盒子,即RP没有任何功能,这样可以最大程度缩减bitstream大小,如果再结合bitstream的压缩特性,那么就可以进一步提升FPGA初始配置时间。Full configuration bitstreams的加载过程如下图所示。加载完成且验证通过,DONE信号就会抬高,FPGA就进入用户模式,图中绿色标记。
Lauren的FPGA
2023-12-10
2810
优化DFX设计
避免RP和RP之间的直接路径 假定设计中存在两个RP,分别为RP1和RP2,那么就要避免出现RP1输出直接连接到RP2或者相反从RP2输出直接连接到RP1的路径。因为这时RP边界信号(连接RP1和RP2的net)的负载都在动态区,从而必然形成Partition Pin,由于边界信号没有经过静态区逻辑单元,这些Partition Pin最终会有相应的PPLOC,这其实就增加了后续的布线压力。这种情况下,最好将其优化为RP1-> FF -> RP2。其中FF在静态区。
Lauren的FPGA
2023-11-30
2070
DFX设计中如何减少Partition Pin的个数
在DFXs设计中,RM和静态区之间的信号称之为边界信号。所有RM的输入/输出端口必然会有Partition Pin,布局工具会将Partition Pin放置在边界信号的某个节点上,如下图所示,图中白色高亮部分即为Partition Pin,左侧显示了这个Partition Pin的位置。
Lauren的FPGA
2023-11-23
2390
DFX设计如何分析
针对DFX设计,Vivado提供了命令report_pr_configuration_analysis,该命令会从设计复杂度、时钟和时序等方面对其进行分析。使用该命令时,我们主要会用到其中3个选项:-complexity、-clocking和-timing。
Lauren的FPGA
2023-11-09
4220
SystemVerilog不只是用于验证(2)
我们再从对可综合代码的支持角度看看SystemVerilog相比于Verilog的优势。针对硬件设计,SystemVerilog引入了三种进程always_ff,always_comb和always_latch。always_ff用于描述时序逻辑,对应FPGA中的触发器,其内部应使用非阻塞(<=)赋值方式,因为它模拟的正是触发器传输数据的方式。always_comb用于描述纯组合逻辑,其内部使用阻塞赋值方式,采用了隐式的全变量敏感列表。always_latch用于描述锁存器。FPGA设计中一般不建议使用锁存器。这样,三种进程对应三种场景,无论是设计者还是工具本身对电路意图都非常清晰。在Verilog中,只有always,换言之,这三种进程都能通过always实现。例如:
Lauren的FPGA
2023-10-30
2860
点击加载更多
社区活动
【纪录片】中国数据库前世今生
穿越半个世纪,探寻中国数据库50年的发展历程
Python精品学习库
代码在线跑,知识轻松学
博客搬家 | 分享价值百万资源包
自行/邀约他人一键搬运博客,速成社区影响力并领取好礼
技术创作特训营·精选知识专栏
往期视频·千货材料·成员作品 最新动态
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档