不能拿vhdl/verlog当编程语言来理解。
比如一个16bit的full adder,你在vhdl里面可以表达为 S = P + Q,但在数字电路层面,每个unit都是独立,并行计算的,你在给出 Pn 和 Qn 高电平或者低电平的同时你就已经有了结果。
若是有另外一个表达式 C = A + B,则表现在数字电路中,S和W可以同时求解。并且若第三个表达式 D = S + C,S和C均为之前的输出,则 D 的值可以一并求得。在外部看来,C,S,D均为并行计算。
再举个例子,软件上的 if statement,需要对每个 if else 逐一进行比对,来决定每个 branch 的执行与否,而vhdl上你虽然写的是一个 if 的结构,但是在实际构架中使用的是 multiplexer,根据 S1 和 S2 的 Logic Level,通过数个 AND GATE 并行获得结果。
软件方面,如果需要进行分支操作,则需要例如
CMP R1, R2
BEQ #ADDR
将数据存入Register中,对Register进行对比,然后根据结果选择不同的分支进行解析。在这一过程中,每条指令需要一个或者多个时钟周期 (Synchronous),不可能一瞬间得出结论 (asynchronous)
。
举一个实际的例子。在数字信号处理的时候,如果需要计算信号的DFT,最快捷的方法就是使用蝶形算法的FFT,如图
软件计算方面,如果使用CPU进行计算,则需要将每一步的Wn储存下来,利用loop进行下一步的推导。
如果是FPGA的话,最简单的方法,把图上所有的线都连在一起,x[n] 对应 X[k],圆圈代表 adder,这样很自然而然的就完成了所有的计算步骤,每一步都是并行计算的。
所以在数字信号处理中fpga相比于通用CPU来说有更大的性能优势