
说说我的理解~
FPGA和C语言什么的是不一样的,他的程序是HDL语言,即VHDL或者Verilog HDL,这些语言有个名字:硬件樱卖毁描述语言。既然是硬件描述,那就是说只是描述某种状态,要注意描述状态这些词汇,就是说他是搭建一个硬件的固定的系统,一旦用语言描述好了以后,这个系统就固定了。
首先FPGA有两种逻辑:组合逻辑和时序逻辑。
组合逻辑:描述一个状态,比如c:=a+b ,d:=c+‘1’那么在硬件电路上,这就是个固定的通道,c在任何时刻都等于a+b,而d在任何时刻都等于c+‘1’,也就是说,d在任何时刻都等于a+b+‘1’(如果不考虑门级延时的话),a、b值改变时,c、d的值会同时改变,而C语言里就不一样,如果是以上两个语句的话,在第一句之间和第二句之间若设断点,则a、b改变时,d不会立刻发生变化,只有在执行完第二句后,d才会发生变化。
时序逻辑:这个是写在进程process(对VHDL)或者always(对verilog)里面的,会一级一级的靠时钟来触发,在进程中的if-else分支语句,其实就是出发的条件
楼主追问的那个问题,调用模块,其实也是在程序中并行的,就是说模块被调用了,就相当于写在配握这个程序里的并行语句,调用它的模块是一起一直在运作,之所以用运作就是想说明这些模块没有先后顺序,他们都是用来描述你要实现的功能的,只是对硬件的描述,映射到硬件上就是一堆寄存器和与非脊备门和线而已。用FPGA的时候要经常联想下硬件怎么实现的,这样就会明白所谓的“执行顺序”。其实严格来说,FPGA应该没有“执行顺序”这个词,他只是对硬件的一个描述而已。
举个例子,就像你设置一个物理的陷阱,你要实现的功能是,人推门,夹在门上的水桶掉落,然后再砸到跷跷板上,这个过程,你的设置就相当于硬件语言描述,人推门可以理解为时序逻辑,相当于需要触发条件的并行逻辑,你检测门是否被推开,和是否有重物砸向跷跷板是一直在进行的,只是在某一刻这些条件才被触发,所以在你看来好像是顺序执行的,但实际上是一直并行的。
说了这些,仅供参考。。
你买的fpga是基于sram的工艺,掉电程序确实会消失,只是在运行时程序存在sram中。JTAG一般用来调试,在通电的情况下把程序烧到sram中,断电又没了;AS是主动模式,fgpa在上电的时候主动从epcs芯片中读取数据放到sram中,这样也能工作了,每次上电那一瞬间fpag都会从epcs里读取数据然后正常颤谨工作,所以用起来像是烧到fpga里一样。PS就是被动模式,由一个外部的CPU给fpga输入程序,用的不太多。所以,你想源洞森“程序烧到内部”,应该是用AS模式把程序烧到EPCS里,每次上电的时候fpga都会从中读取数据然后正常运行的。看起来就像是烧到fpga里面一样。如果要“真的”烧到fpga里面,是有基于flash工艺的fpga,可以直接烧到fpga里面的flash里,也就不需要ecps芯片了,不过商业或者民用领域不太雹亩常用。你买的这个板子也不是这种。
on-chip-memery就是fpga用内部的资源撘成一个ram或者rom。fpga里面都是ram,这个没问题。那rom其实也是一个ram,只是上电的时候fpga从epcs里面读取了固定的信息放到这个ram里,所以用起来就像rom一样。
硬件则逗纳的话需要一指乱个全桥生成正负电压。我不了解L298是什么,我一般自己做一个。不过大概都一样,就是你FPGA输出的io信号是PWM的开关高低电平信号,直接给电机驱动即可。按键就是IO输入。剩下的就是编程的工作了。不过这个我还是建议你用单片机。真的,我就是做电机控制软硬件的。FPGA做流程控制不太方便。当然,FPGA里面也有processer,或称软核。quartus自带一款叫 NIOS 的软核,可以C语言编程。如果你控制大电机的话我们再单说,如果是小电机不在乎动态过程,只要稳态速度的话,还是比较简单的。编程思路就是 电机电压= k*电机转速。这个K系数孙没跟你的电机有关系,不过是一个常数。也就是说, 当你要正转速的时候,给正电压即可。要负转速的话,给负电压。电压得到之后,其实就是占空比,然后你用FPGA生成PWM信号输到驱动器里面即可。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)