第五单元 现代数字设计

5.2 Verilog语言

   Verilog HDL是芯片设计者采用的两种“硬件设计语言”(HDL)之一。另一种HDL是VHDL。HDL可在设计初期进行性能仿真,从而纠正错误、调整结构。HDL描述的设计和技术无关,容易设计、容易调试,比原理图更易读,对大型电路尤其如此。
   抽象级别
   使用Verilog进行设计描述,存在4个抽象级别:

■算法级(类似C语言代码,包含if、case和loop等语句)

■寄存器传输级(RTL使用寄存器按照布尔方程进行连接)

■门电路级(与门、或非门等的互联)

■开关级(门电路中的MOS晶体管)

   Verilog语言还定义了“结构体”——用来控制仿真的输入和输出。最新的Verilog可用作综合程序的输入。综合程序将产生设计的门电路级描述(网表)。有些Verilog结构体无法被综合。此外,代码编写风格也会大大影响综合结果的大小和速度。大多数读者想要综合设计的电路,因此无法综合的结构体之应用于测试平台。测试平台是用来产生(对设计进行功能仿真的)输入输出信号的程序模块。
   代码类型
   大多数HDL中存在两种代码类型:

assign a=b&c|d;
assign d=e&(~c);

       在这里,语句顺序无关紧要。e的变化将带来a的变化。

always @(posedge clk);
count <= count+1;

   过程代码类似C代码,每次赋值都被假定为储存于存储器之中直至被覆盖。对于综合而言,过程代码会产生太多的寄存器。不过,人们喜欢过程代码是因为易于编写——例如,只有过程代码才能使用if语句和case语句。因此,综合工具可将某些特定的过程代码综合为组合逻辑电路。它们仅为实际需要存储的左侧变量创建寄存器。不过,假如你不是这么设计的,那可要当心了——你的综合结果将出现太多的锁存器。
   VHDL对比Verilog
   VHDL是一种类型强大且丰富的语言,VHDL源于Ada程序,设计要求使之比Verilog繁琐。这种复杂性的目的在于使设计本身能够自动描述记录。强大的类型特点也要求附加的编码以使数据类型转换。例如,从整数到位向量一目了然。VHDL的设计者们强调“语言无歧义”和“设计易于移植”。因此,VHDL用户无需考虑“竞争状态”(由语言和工具的实现造成的)。
   为了提高VHDL的可用性,几个相关标准也开发出来。今天,任一VHDL设计至少需要依赖“IEEE标准1164”(标准逻辑类型),许多VHDL设计还需要依赖标准数值和数学类型。开发相关标准是出自VHDL设计者们的另一个目标:发明一种通用语言并允许可重用软件包实现语言中未涵盖的功能。
   VHDL没有定义仿真控制或监控的功能。这些功能由工具决定。由于没有语言自身定义的仿真控制命令以及VHDL用户自定义类型功能,VHDL使用者通常依赖互动“图形界面”(GUI)进行设计调试。
   Verilog是一种类型较弱且有限的语言。Verilog来源于C程序设计语言和Hilo硬件描述语言。Verilog中的全部数据类型都在语言中预先定义了。Verilog支持的数据类型均可随意混合。
   Verilog的仿真语义有二义性。这种二义性为设计者提供了优化时的灵活性,但也带来了竞争状态(当编程规则没有严谨遵守之时)。同一个设计在不同的工具上甚至在同一生产商工具的不同版本上)可能会产生不同的结果。
   与VHDL设计者不同,Verilog的发明者希望为设计者提供他们需要的一切功能。“语言功能有限”加上“没有附加包功能”使下面的目标难以实现:开发语言中并不包含的可重用功能。
   Verilog定义了一组基本的仿真控制功能(系统任务)。由于定义了这些系统以及缺乏复杂数据类型,Verilog用户往往使用批处理或命令行进行仿真和通过测仿真结果数据形成的波形进行调试。




 
电子工业出版社