起因
因为我现在的情况是:大三上学期临近期末,而且我这个学期有FPGA的课程,虽然学校教的东西很浅薄,感觉就像是告诉我有FPGA这个东西就没了(哈哈哈,其实是因为我没听懂)。
我们学校期末安排的实训内容也是基于FPGA的,我也是捣鼓了好几天才弄出来,本着”没有复盘的学习=白学“思想,我还是要为本学期FPGA的学习写一篇心得。
话不多说
FPGA和STM32有什么区别?
毕竟也是学了1个学期的FPGA,虽然只做过一些项目,比如点灯、流水灯,唯一拿的出手的项目其实也是把别人的东西缝缝补补了一下,自己打的代码也只有几十行。
不过FPGA确实和STM32、51的编译思维有很大的不同:
(1)
STM32、51的编程思想和C语言的编程思想一样,都是从上而下,逐条语句执行的,就是给人一种多米诺骨牌效应的感觉,就是因为前面的事情做了,然后,后面的
东西才能被执行;
而FPGA的编程思路就不同了,给我的感觉就是——”到点触发“,FPGA的所有功能的运行基础就是—时钟。比如,要让蜂鸣器报警,就设置一个时钟,让时钟
每计25000000次就切换一次电平状态,让蜂鸣器一会叫,一会不叫;比如,要让数码管每秒动态显示一次,那也让时钟每计25000000次就切换一次状态。而且,也是最重要的
一个区别,就是这两个功能可以同时实现,在STM32中若要实现蜂鸣器报警、数码管显示,那就先让蜂鸣器报警,再让数码管显示,而FPGA中,这两个功能可以同时实现
。没有先后之分,只要时钟计25000000次就行。我感觉这就是FPGA和32之类的单片机的区别。
(2)
从功能定位上看:32\51我感觉都是初级实用芯片,价格低廉,使用方便;而FPGA的定位是用来构造芯片的芯片,价格高昂,一般是用于高端仪器设备;而且我听说,
当然,仅是我听说,如果想靠FPGA找工作的话,学历起码要研究生以上。
所以,我还是老老实实的学单片机吧【手动流泪】
output型和input型的使用
问:为什么有时候不需要加reg[]/wire[],有时候又要加reg[]/wire[]?
其实,所有的output和input只要没有具体定义变量为wire或者reg,那么就默认为wire型,且默认位宽为1,仅可表示1或者0。
reg和wire的赋值关系?
若要对wire型进行赋值,则要用assign
若要对reg型进行赋值,则要在alwasy块中的条件判断语句
input和output、reg和wire的关系
在子函数里面,用input定义的值如果要用于计算的话那就赋为wire,output就 赋值为reg,但在顶层模块中,input为reg,output为wire