xilinxfpga原理与实践-原理实践总结
在 Xilinx FPGA 的设计世界里,搞不懂时序这事儿就像跟半夜两点还在倒水的邻居吵架,吵不过就赖接口,吵不过就甩锅给时钟。但真正的 FPGALike 设计,实际上是把工夫轴拉得挺长,让数据流在逻辑块里头自己绕圈子、自己找路。 设计 FPGA 最怕的就是时钟抖动。时钟频率忒高,信号就像小虫子一样好办漏掉;频率忒低,芯片累得像被榨干了力气。
这中间有个平衡点,叫动态范围。
一般设计,时钟从 25MHz 调到 125MHz,信号跑得快,但延迟也长;降到 25MHz,信号慢,但延迟短。
关键是,你不能让时钟直接跳着变,得让数据在寄存器里慢慢转,像演木偶戏一样。 拿一个典型的计数器来说吧,假设你做了一个 25MHz 的时钟计数器,从 0 数到 65535 再转回来。
要是直接用寄存器存二进制,那数据就像一堆散兵游勇,到了下一条周期根本就忘了原形。
这时候你就需求用到移位寄存器。想象一下,数据从第 1 个周期走,第 2 个周期走一步,第 3 个周期走两步……一直到第 65536 个周期才回到起点。
这样,每一步的变化都被前一步的余数给‘吃’掉了,信号变得圆润、连续,不再是一世一次的孤勇者。 还有那句名言:“数据进入寄存器,时钟才负责搬运。”这话听着玄乎,实际上挺实在。寄存器是个盒子,数据进去,门是关上的,哪位也别想往里多塞;等你下一拍时钟钟头到,门才打开,数据出来。
要是时钟没跟上,数据就堆在框里等你;要是数据满啦,时钟还没来,数据就溢出。
这就是为啥 FPGA 里,计数器要是移位寄存器,寄存器要是锁存器,逻辑门要是触发器,整个链条得严丝合缝才能走。
要是哪一环松了,整个系统就卡了,就像(gt; 那个) 电梯,一家家门都关好了,结局人来推门,电梯还是没动,出于电梯那关忒慢了。 说到数据搬运,寄存器确实是个省事的苦力。它专门负责把数据从一个地方搬到一个地方。
比如把 64 位数据从 寄存器 A 搬到寄存器 B,这活儿得干 64 次。
要是是用逻辑门直接连,那数据跑得飞快,但速度忒猛,寄存器根本接不住,数据立马就炸了。
故此,寄存器设计时,门数要尽量多,数据流得慢一点,这样每个门都能稳稳当当。自然,门数多了会占地方,设计就得取舍。
有时候为了省面积,就得牺牲一点速度,要么干脆用布条(LUT)换好办点。 讲数据搬运,还得提一句锁存器和 D 触发器。它们俩长得一样,名字都是寄存器,但脾气不一样。锁存器是个老实人,数据只要门开着,它就看着就好,没门它就不动,门一关,数据全扔出去,门一开,数据又全进去。
这玩意儿在 FPGA 里用得挺多,特别是做移位寄存器的时候。D 触发器就是个害臊的人,它只等时钟到,门一开,数据才进来,门一关,数据才出来。
这样,数据进出就被工夫给‘锁’住了,不会乱跑。 设计 FPGA 时,最头疼的往往不是逻辑门如何接,而是如何让数据跑得快,又稳稳当当。
这就得靠时钟频率和寄存器延时。
比方说,你要在 25MHz 下跑满 65536 位,那每个周期得跑六万步。每步数据都要经过一堆逻辑门,要是这些门加起来总延时超过 1 纳秒(纳秒是时钟周期),那数据就跑不完了,结局就是全 0。
故此,寄存器缓冲(Buffer)是 FPGA 里的功臣。它让数据跑得慢一点,给逻辑门留足工夫,让数据传输不至于在逻辑块里撞车。 举个具体的例子。假设你设计一个循环移位寄存器,数据位宽 32 位,频率 100MHz。每周期要移动 32 位。
这时候你就得用 32 个 D 触发器,每个触发器后面接一个 25MHz 的时钟。别看频率忒高,但为了抗抖动,你得把时钟频率降下来,要么用 PLL 拉宽时钟。
要是得不到宽时钟,那就只能牺牲寄存器个数,把位数减半,要么用布条代替触发器。 再说说布条(LUT),这是 FPGA 里最灵活的部件。它是做逻辑门的基础,但比一般/平平门灵活多了。它不仅能做与、或、非,还能做复杂的组合逻辑。
比如做加法器,能够用布条反复试错,只要加得对就行;做乘法器,布条也能干。唯一的缺点就是面积大,并且要是布条忒累,发热严重,功耗就上去了。
故此在低功耗设计里,布条是主力;在高性能、低功耗并存的设计里,布条就得跟你较劲,得用布条,还得加个延迟,让数据慢慢走,别忒猛。 最终聊聊网口和总线。FPGA 的 IO 接口就像个路口,不同路口有不同规矩。
比如做以忒网,你得用特定的收发器(Tx 和 Rx),保证数据在 10 兆就连更高带宽下不乱跑。
这时候,寄存器就贼关键了。每移一位,都要经过寄存器一次,确保数据不移位。
要是寄存器延时忒长,数据在路口就堵住了,整个网络就瘫痪了。 总结来说,做 FPGA 就像开火车。你不能像单机车那样,哪位想走哪位走,那样车技不中全是难题。你得有一整套流程,让数据在工夫轴上按部就班地走。
这就是为啥 FPGA 设计师最厌恶(要么说最厌恶别用寄存器直接操作数据):数据每移动一步,都得经过一次寄存器的缓冲。
这看似繁琐,实则是保证系统稳定性、延长系统寿命的关键。
声明:演示网站所有内容,若无特殊说明或标注,均来源于网络转载,仅供学习交流使用,禁止商用。若本站侵犯了你的权益,可联系本站删除。
