Verilog HDL基本结构

通过上一篇《VerilogHDL入门》,我们大致了解Verilog的一个基本结构,即:

//**模块名定义**
module mux2_1(a, b, s, y); 

//**引脚方向定义
  input a, b, s; 
  output y;
//**寄存器、导线定义
  reg result; //reg 表示寄存器 

//结构或行为描述
  always @(a, b, s) 
  begin 
    if(!s)  result = a; 
    else   result = b; 
  end

//信号连接
  assign y = result;

//**模块定义结束
endmodule

本篇主要说的是中间部分的“结构或行为描述”
这一部分是整个模块设计的重点,但语法很简单。能够使用的语句只有三种:

1、assign = 
2、always @(  )
3、元件例化

这三种描述方式:

1、可以多次使用
2、相互之间不可嵌套
3、相互之间没有时间先后

再强调一遍:有些书籍里面说,这些语句是“并行执行”的。我个人认为,对初学者不要这样说,这样容易让学生认为这些语句是被“执行”的,其实不然。硬件描述语言和通常的编程语言不一样,重点在于他是“描述”。
由于Verilog表述数字电路的结构、功能,类似生活中的商业合同条款,所以这些“条款”是没有先后顺序的。module里,“条款”基本都是用上面三种语句块的形式表达。上面的例子中,assign可以和always语句块对调顺序,并没有任何不同。

1、assign =     //  一般用于表述结构连接、组合逻辑表达式
2、always @(  ) //  行为描述,一般用来描述时序逻辑电路,亦可描述组合逻辑
3、元件例化      //  结构描述,用于调用已设计好的module

你可能感兴趣的:(Verilog HDL基本结构)