FPGA数字逻辑运行特点及常见方法

Posted on 2024-04-02 21:14  绿叶落秋风  阅读(17)  评论(0编辑  收藏  举报

模型功能

  • FPGA的运行是并行的
  • FPGA的串行依赖状态机
  • FPGA的并行依赖流水线
  • FPGA的大规模设计依赖精确设计

模型框图

FPGA是并行的系统,所有的代码同时运行,这是FPGA高效的根本所在

实现步骤

  1. FPGA的并行特性
  • 和一般意义上的高级语言不同,verilog更多地是低级语言特性
  • 这一点可以从其描述而非高级可以得知
  • 如何应用这种并行特性
    • 如果一个模块持续性运行,则对FPGA来说是最高效率的,可以得到最高的性能
    • 如果一个模块是灵活多变的,则对FPGA来说获得了最佳的拓展性,可以解决各种复杂的场景
    • 而掌握两者的平衡,就是对并行特性的最大化利用
  1. 状态机的最大灵活性
  • 使用状态机,可以实现类似高级语言的串行逻辑
  • 信号在状态机的控制下,实现信号的逐个状态控制
  • 这种严格的执行顺序,实际上削弱了FPGA的性能,但是增加了控制的灵活性
  • 适合处理具备复杂控制交互的逻辑
    !不要试图使用流水线替代状态机,那样虽然可以提高性能,但是付出的时间和后续的维护成本不可接收
  1. 流水线的最大性能
  • 流水线是FPGA最关键的结构
  • 使用流水线至少可以节约1倍的资源和时间,是少有的完全适配FPGA的模型
  • 流水线的实现方法多种多样,最关键的就是建立数据总线,将数据从模块提取到总线中
  • 只有在总线中的数据才具备在多个不同模块之间进行流水操作
    • 如果只是在一个模块里面搭建流水线,那可维护性较差,无法适应复杂的流水处理逻辑,而且容易偷懒将信号随意跨流水线导致维护困难
    • 将数据从定义在模块内,修改为将数据定义在总线中,所有的模块挂在总线上,才能实现无限拓展且顺序可调的流水线
    • 这种流水线可以实现类似大状态机的结构,但是又可以匹配状态机的低效率,是大型数据处理(如图像)的必选方法
  1. FPGA的精确设计
  • 一般来说,FPGA的各个参数不需要进行严格的控制
    • FPGA为了拓展性等原因多会使用更大的位宽
  • 但是对于大规模设计,位宽的控制是必要的
  • 多余的位宽会导致一些简单逻辑占据多余的空位宽
    • 虽然FPGA会自动优化一部分
    • 但是对于信号,多余的位宽精度是无法自动优化的
  • 所以,精确的位宽控制是保证最小面积的根本方法
  • 同时是最简时序控制也是一个重要的部分
    • 简化时序的关键在于信号独立控制
    • 将信号进行混合控制除了不利于和电路对应
    • 更大的问题是无法实现控制简化
    • 这种信号交叉容易带来额外的时序控制
    • 而这种时序又会进一步复杂控制
  • 所以,信号在命名的时候应该就带时序信息

最终效果

  • 状态机之前的文章已经实现过了,找一个模块实现即可
  • 流水线则是需要依据实际的需求进行搭建,本文只是在于回顾verilog的重点内容,这里也不展开
  • 精确化的设计在之前的例子也是有体现的,位宽的参数化,信号的时序化,为整个的控制提供了基础

调用接口

verilog模型总结

  • 用了一周的时间,大致回顾FPGA中的verilog中一些比较实用的部分,
  • 按照本人喜欢的编码模板,逐个分析模块每个内容所包含的细节
  • 回顾了之前忽略的部分,修复目前设计模型中的一些问题
  • 如无意外,本合集到此结束,后续应该会继续回顾system verilog模型的一些细节