是很容易用C的思维去写Verilog而不自知,因为代码实在太像了。
Verilog只是语法跟C相似,但观念却是硬件电路的概念。
主要的区别有:
如以下的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的数字应用设计,国防工业出版社
没有评论:
发表评论