专业的编程器厂商之所以优于山寨产品,并非因为广告打得更多、产品卖得更贵,核心在于技术创新。
普通编程器凭借低廉的价格,受到不少个人用户和工程师的青睐,但在99%的工厂生产线上,却很难见到这类产品的身影。究其原因,在于工厂生产需要更专业的编程器,以满足多芯片、高效率的生产需求。那么,工厂专用编程器究竟有哪些技术创新呢?
FPGA的I/O具有可编程特性,这为逻辑设计和PCB设计带来了一定的灵活性和独立性。在编程器的硬件实现中,FPGA属于“半定制”芯片,这一特性对编程器与各类封装芯片的互连起到了重要的辅助作用。
MCU的管脚功能是固定的,与外部接口通常通过IO口或总线连接。普通IO口本质上就是寄存器,每个寄存器都有对应的地址,操作IO口本质上就是操作寄存器;片内外设则是具备特定功能的模块,其内部包含多个控制不同功能执行的寄存器,且这些寄存器也有固定地址。通过存储器映射的方式,可将片内外设与CPU连接,组成完整的系统。
需要注意的是,这些片内外设的对外接口均连接固定管脚,若要通过控制这些外设实现特定功能设计,实质上就隐含了对这些管脚的控制。例如,MCU的IIC接口的SCK和SDA分配在99和100脚,那么所有IIC接口的存储芯片都必须与这两个管脚连接,如图3所示:
各类需要编程的芯片若要与MCU连接,就必须对应连接其接口,对于管脚数量多、结构复杂的芯片而言,这对PCB的布局布线提出了很大的局限性和挑战性。
而FPGA的核心优势就在于灵活性,可编程IO便是其重要功能之一。可编程IO为PCB设计提供了灵活性,可简化PCB的布局布线,并且在设计过程中,还能根据走线走向更改管脚连接。此外,在FPGA内部逻辑设计时,可先将功能模块设计与管脚分配两步独立进行,完成内部逻辑功能设计后,再根据实际情况分配管脚。因此,可编程IO为FPGA逻辑设计和PCB设计带来了一定的灵活性和独立性,在这一环节中充当“连接者”的角色,为逻辑设计和PCB设计铺路架桥,如图4所示。
实际FPGA内部结构并不像图4所示的那样简单,此处仅为形象说明可编程IO可使内部逻辑与PCB实现相对独立设计。对于同类接口,无需因PCB设计变更而修改时序逻辑,只需更改引脚分配,大幅简化了PCB的布线难度。
稍加思考便会发现,编程器在编程过程中,会按照“从上位机取命令数据→命令解析→执行”的顺序循环执行,对应的操作分别为取指、译码和执行,具体解释如下:
取指——从命令FIFO中取出指令。
译码——根据指令,产生对应的控制信号。
执行——执行擦除、编程或检验操作,或设置相关参数。
若未采用流水线技术,其时空图如图5所示。
由图5可知,每条命令都需依次经过取指、译码和执行三个步骤,才能执行下一条命令,这严重影响了系统效率。最关键的是,取指、译码和执行三个环节无法同时工作,必须完成取指后才能进行译码,完成译码后才能执行操作。
为此,编程器进行了技术优化,采用了“流水线”技术。根据编程器的操作步骤,将工作流程拆解为取指、译码和执行三部分,每一部分负责专属工作。这样不仅细化了整个工作流程,还能让三个部分同时运行,提高了并行度,进而提升了工作效率。在FPGA硬件实现上,这三部分分别对应三个独立电路,且各电路之间均插入寄存器组,组成三级流水线,如图3所示。如此一来,在每个时钟周期内,取指、译码和执行部分可同时利用上一级传递的数据工作,并在下一个周期将结果传入寄存器,供下一级电路使用,寄存器在此过程中起到暂存结果的作用。
相关命令的执行在时间上是交叠进行的,也就是说,经过首次延迟后,三条命令可同时工作!例如,在时刻T4,指令N+3处于取指阶段,指令N+2处于译码阶段,指令N+1处于执行阶段。需要注意的是,同一时刻,三个环节虽同时工作,但操作的并非同一条指令。此外,每个周期都有一条命令处于“执行”状态,即一个周期可产生一个结果,而无流水线技术需要3个周期才能产生一个结果,相比之下,工作效率提升了3倍。值得一提的是,流水线技术还能提高频率上限。
在FPGA设计过程中,需要估算取指、译码和执行三部分的延时,尽量使三者延时相等或接近,才能充分发挥流水线的优势。另外,从理论上讲,流水线级数越多,工作频率越快,效率也相对越高。
专业编程器通过硬件与软件的高效搭配,才能稳定发挥专业职能,支撑起工厂批量、稳定编程的核心需求。