2008年10月21日星期二

C太厉害的Verilog会学不好

Verilog的优点是让你不用再花时间去学习一个新的语言(如VHDL),但缺点
是很容易用C的思维去写Verilog而不自知,因为代码实在太像了。

Verilog只是语法跟C相似,但观念却是硬件电路的概念。

主要的区别有:

1. C语言靠位置先后决定执行顺序;而Verilog却靠时钟来分先后,跟语句位置先后毫无关系。

如以下的Verilog:
  always@(posedge clk) begin
  e <= a & b;
  f <= c & d;
  end

虽然看起来是 e <= a & b; 在 f <= c & d;前面,但实际e和f并没有先后之分,是并行的。

2. 硬件要循序,要靠clock和FSM
或许你会说,『我的算法就是要循序一步一步的做,如C语言那样,那怎么办?』,若Verilog要这样,就得靠clock并且搭配FSM,当一个state完成后,进入下一个state,这样就能依照clock的进行,而达成循序的要求。

3.Verilog程序代码没有先后之分
除了blocking assignment有先后执行顺序,而nonblocking assignment同时执行外,Verilog的程序没有前后顺序之分,所以才称为硬件『描述』语言,而非硬件『程序』语言,先写的不代表先执行,后写的也不代表后执行,只是代表硬件的架构的描述,也就是说,将原来的电路图,变成文字描述而已。

4.多用RTL Viewer和ModelSim观察自己写的code
Verilog写法小小的差异,合成出来的硬件就可能有天壤之别,多用RTL Viewer观察合成出来的硬件是否和自己预期的一样,并多用ModelSim观察跑出来的波形,这样会增加你对Verilog的掌握度。

Conclusion
很多人学了Verilog,还是把它当C语言写,事实上他们只是语法类似,但背后的思维并不一样,唯有『心中有硬件』,才能设计出好的电路。

正在读的书:
王钿、卓兴旺 2007,基于Verilog HDL的数字应用设计,国防工业出版社




没有评论: