温馨提示:文本由机器自动转译,部分词句存在误差,以视频为准
00:00
你敢信你CC代码就能改变一颗芯片的电路结构?没错,这就是芯片界的变形金刚FPGA。这不是比喻,是字面意思,你之前学习的所有软件开发激烈的思维习惯在这里几乎全部失效。为什么选FPG呢?因为软件终究跑在硬件上,中断延迟、任务调度、系统抖动,这些都造成了MCU的不确定性。如果你的应用需要毫秒甚至纳秒级别的精准时序,需要每一个时钟周期都绝对的可控,那FBG几乎是不一的答案。FBG的本质是一块可以被反复重新布线的芯片,它内部没有固定的处理器,没有指令集,有的只是海量的裸机门和触发器等待你去定义它们之间的连接关器。你下载进去的不是程序,是一份电路配置文件。芯片上定之后,按照这份图纸把自己变成你设计的那个电路芯。PU的工作方式是线性的,在经典的冯诺伊曼架构下。
01:00
取指一码,执行一条条按顺序,同一时刻只处理一条指令,哪怕你写了三个看似独立的复制语句,CPU也会老老实实的一步一步来。时间上严格排队,FPGA完全是另一套逻辑,你用vrog描述的每一个模块综合之后都会变成面上真实存在的一段电路。三个独立的信号赋值对应的是三条并行的物理通路,同一个时钟沿同时翻转,没有信号,没有等待,这就是硬件并行的核心魅力。用一个实际例子感受一下差距,现在需要同时采集16路500K赫兹的传感器信号,每路信号每秒触发50万次,16路加起来每秒800万次。事件交给WG,只能靠中断排队处理,CPU疲奔命,稍有不慎就溢出丢帧,系统直接崩掉,交给FPG设计16个独立的采集状态机,每一路都是独立电路,互不干扰,同步变行800万次事件对他来说不过是每个时钟周期的日。
02:00
场工作毫无压力,软件层面的死局在硬件层面根本算不上问题。然而大多数初试者站在同一个坑里,把围绕G当新人来写,OS块里边堆满了E非2嵌套复制语句从上写到下,潜意识里以为代码会按顺序一行行执行,但综合工具不是编译器,他看到的每一行描述的都是一段待实线的电路结构,而维块里面所有的并发赋值都会在同一时钟延同时生效,你写的顺序对硬件毫无意义。这种错误写法综合出来的结果,轻则电路轮于逻辑混乱,动则持续错乱满天飞,目标频率根本无法达到。正确的做法是使用状态机思维,每个OS块里只负责一件,明确的是模块之间通过信号线传递信息,驱动关系清晰无一。这样写出来的代码综合器能准确理解你的意图,生成的电路干净高效,持续分析也会顺利通过。归根结底,CPU和FPGA代表了两种节能。
03:00
不同的设计哲学。CPU把时间切碎,用同一套硬件在不同的时刻完成不同任务,FBG在空间铺开,用不同的电路在同一时刻并行完成所有任务。所以,当你第一次让FBG跑起来,一个真实的设计,你会意识到自己不只是在写代码,你是在找一块芯片。
我来说两句