作为FPGA工程师,我们每天都在与HDL语言打交道。我不介绍基础语法(这些内容网上已有大量教程),而是分享对HDL语言本质的理解,希望能帮助同行更高效地进行硬件设计。
HDL(Hardware Description Language)语言,即硬件描述语言,顾名思义是用来描述硬件电路的结构和行为的语言。HDL(硬件描述语言)与C语言有着本质区别:前者是描述性语言,后者是过程式编程语言。虽然两者都需要逻辑思维,但设计理念截然不同。
- 为什么把FPGA语言定义为硬件描述语言呢?
因为以前的电路是人工画出来的,就像我们画电路原理图一样。硬件描述语言的主要目的是用来描述已有电路的而非设计电路。
- 描述给谁看呢?
HDL语言是描述给EDA工具(如Xilinx的ISE和Vivado软件等)看的,EDA工具根据你的描述,将电路绘制出来。如果EDA工具可以根据你编写的HDL语言原样绘制电路,你的HDL代码就成功的。
- 语言的优势
因为使用硬件描述语言可以大大缩短硬件电路的设计开发周期。
- 设计效率:文本描述比原理图绘制更快
- 仿真验证:RTL级仿真可早期发现问题
- 可重用性:参数化设计提高IP复用率
- 怎么才能写好HDL语言呢?
我喜欢将FPGA设计比喻成修一条很长的路,比如从湖南省长沙市我家开车去益阳市同事老家,要经过长沙市二桥、岳麓大道、长益高速、省道,最后达到同事老家。二桥、岳麓大道、长益高速、省道的搭建工艺、路面宽度、最高限速等等都不一样。二桥是双向4车道,最高限速40公里/时;岳麓大道是双向8车道,最高限速70公里/时;长益高速是双向4车道,最高限速70公里/时;省道是双向4车道,最高限速40公里/时。我们确定了它们的功能、搭建工艺、路面宽度、最高限速等等指标,就可以分包给不同的建造团队进行修建。拿长益高速做模块例子比较形象,高速入口就是模块的输入接口,高速本身是个黑盒处理,高速出口就是模块的输出接口。同理,我们在进行FPGA设计或者HDL语言编写时,可以把FPGA设计看成分段或者分模块的步骤,HDL语言编写就是把每个模块按功能和指标要求描述出来,最后把所有模块都连起来就可以了。
我认为HDL语言编写要有规范性,不是通常所说的便于阅读的规范性,而是便于EDA工具理解的规范性。EDA工具自带的编程模板(如Xilinx的Language Templates)就是最好的参考。比如,想搭建一个计数器,模板是怎么写的,我们就怎么写,这样能更好的便于EDA工具理解,原样绘制出我们描述的电路。
五、选择VHDL还是Verilog?
我认为VHDL还是Verilog两者没有好坏之分,本质上也很类似,只是VHDL更严谨而Verilog更智能。建议是精通其中一种语言,另一种语言达到能阅读和简单修改的水平。