本篇文章讲述FPGA设计思路与MCU/DSP的异同。前阵子博主繁杂事情较多,故一直没有时间更新博客,言归正传,接下来开始描述:
传统的MCU/DSP基于软件思维,软件思维的特点基本上是串行,即便是用多核的DSP或者MCU进行数据的并行处理,在各个核内部运行的程序也是串行的。所谓的串行,举个例子,比如说C语言:
for(i = 0; i < 50; i++)
a[i] = i;
k = i/4;
该语句的执行顺序基本上是这样的:首先第一次进入for循环时,i被赋值为0,然后下一个指令周期(假设该CPU是N级流水线)跟50进行比较,小于50则进行a[0]=0,然后i自加1变成1,跟50进行再一次比较,小于则进行a[1]=1,否则则退出循环。。。如此反复,当退出for循环后,执行k = i/4,此时i=50。这是一种串行的思想。其次还有一个特点,即在设计程序解决实际问题时,设计者的思维集中于事件驱动,即当发生了某些事情(比如中断,或者查询某个变量)后进行相应的处理。
而对于FPGA来说,则是一种硬件式的处理思维。对于每一条verilog/vhdl语言来说,经过综合后就是一个实实在在的逻辑电路。举个例子:
assign a = b&e;
assign c = d&f;
这两条语句并不是串行的关系,经过综合后,将会形成两个二输入与门,其中一个与门的输入是b和e,输出是a, 另外一个与门的输出是c,输入是d和f。这两条语句/两个电路之间并没有所谓的时间上串行的关系,两者之间属于独立的两个电路,都是在同一时间内一起对不同的激励/输入发生作用的。这也是为什么说FPGA是一种硬件的设计思想,尽管某些硬件描述语言(verilog)看起来很像C语言,其实是不一样的一种设计思想。