当前位置:   article > 正文

FPGA设计思想_fpga开发思维

fpga开发思维

FPGA设计思想


FPGA与CPU编程有很大不同,但在编程思想上基本上可以借鉴C语言编程。对于FPGA的不同功能块,相互之间时并行执行的,互不干扰;但现实中,实现一个较小的完整的功能块,必然是顺序操作的。
先介绍下主流设计方式。FPGA主要包含三种设计方式:面向状态的设计面向活动的设计面向结构的设计
1)面向状态的设计是以状态机为代表的设计方式,即通过控制信号和时序信号触发状态机进行状态的迁移。状态机的设计是FPGA开发中必不可少的环节。
2)面向活动的设计是以数据流和流程图为代表的设计方式。尤其是在传输系统、实时算法设计中,常使用基于数据流的设计方式。常见的数据流的操作方式包括数据的寄存器同步缓冲、数据传递、数据运算与流水设计、数据的存取等。
3)面向结构的设计常用于较大的系统设计中,用于描述模块与模块、单元与单元之间互联关系,主要包括数据信号与控制信号。根据不同的层次描述,主要可以分为系统及描述、寄存器级结构描述、门级结构描述等。

对比在C语言中,状态机代表不同的情况,活动代表单个模块,结构对应于整个系统中的不同模块。根据C语言顶层设计思想,将系统根据不同功能分为不同功能模块,用不同的函数组成一个功能模块,而函数内部变量用于数据操作。
结构、活动、状态并没有明显的区分,可以认为同一系统功能的不同层次切分。
在实现一个小功能的时候,可以采用状态机进行不同步骤的跳转执行。但如果整个功能流程比较复制时,状态机的跳转太过繁琐,混乱。
推荐使用类似与C语言的基于仿顺序操作的用法模板。

always@(posedge CLK or negedge RSTn)
beging
    if(!RSTn)
    begin
        i<=4'd0;
        rLED<=4'b0000;
    end
    else
case(i)
    0:beginrLED<=4'b0001;i<=i+1'b1;end
    1:if(Timer==T10MS)i<=i+1'b1;end
    2:beginrLED<=4'b0010;i<=i+1'b1;end
    3:if(Timer==T10MS)i<=i+1'b1;end
    4:beginrLED<=4'b0100;i<=i+1'b1;end
    5:if(Timer==T10MS)i<=i+1'b1;end
    6:beginrLED<=4'b1000;i<=i+1'b1;end
    7:if(Timer==T10MS)i<=4'd0;end
endcase
end

总结之下,这个用法可以伸缩的范围非常之大。除外,它所带来的好处也非常之多:
� 提供了VerilogHDL语言顺序操作的支持。
� 提高了模块的表达能力。
� 提供了仿顺序操作·建模的结构基础。
————————————————
版权声明:本文为CSDN博主「枫_在路上」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/su1041168096/article/details/81778143

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/614046
推荐阅读
相关标签
  

闽ICP备14008679号