Verilog HDL(3)程序设计语句和描述方式

在verilog中只有三种设计语句1.数据流建模,2.行为级进模,3.结构性建模

3.1数据流建模

3.1.1连续赋值语句

—连续赋值的目标类型主要是标量线网和向量线网两种

(1)标量线网,如:wire a,b;

  (2)   向量线网,如:wire [3:0]a,b;

1.显性连续赋值

;  //信号定义  连线型变量类型

—assign #=Assignment expression;  //assign赋值语句

assign语句和信号定义语句分成两句。

2.隐形连续赋值语句

#=Assignment expression;

assign语句和信号定义语句在一句里

Verilog HDL(3)程序设计语句和描述方式_第1张图片

Verilog HDL(3)程序设计语句和描述方式_第2张图片

连续赋值语句需要注意以下几点:

1.赋值目标只能是线网类型(wire);

2.在连续赋值语句中,只要赋值语句右边表达式任何一个变量有变化,表达式立即被计算,计算的结果立即赋给左边信号(若没有延迟量)

3.连续赋值语句不能出现在过程块中。

4.多个连续赋值语句之间是并行语句,因此与位置顺序无关。

5.连续赋值语句中的延时具有硬件电路中惯性延时的特性,任何小于其延时的信号变化脉冲都将被滤除,不会出现在输出端口上。反之亦然。

对于5的说明:电路成电容性,如果电容性变大,则延迟变大,频率变小,这时信号中的毛刺信号如果小于该频率则不会被输出。如果电容变小,则延迟变小,频率变大,毛刺信号大于频率则会被输出。

3.2行为级建模

只有三种语句,赋值,条件,循环。

下面只列出可综合性的语句:

过程语句 always

赋值语句 连续赋值assign,过程赋值=、<=

条件语句 if-else  case,casez,casex

循环语句  for

编译向导语句 'define,'include,'ifdef,'else.'endif

3.2.1过程语句

1.initial过程语句

Verilog HDL(3)程序设计语句和描述方式_第3张图片

Verilog HDL(3)程序设计语句和描述方式_第4张图片

2.always语句块

从语句描述角度,相对于initial过程块,always语句块的触发状态是一只存在的,只要满足always后面的敏感事件列表,就执行过程块。

其语法格式:

always@(<敏感事件列表>)

           语句块;

例如:

@(a)                                                  //当信号a的值发生改变时

@(a or b)                                           //当信号a或信号b的值发生改变时

@(posedge clock)                              //当clock的上升沿到来时

@(negedge clock)                              //当clock的下降沿到来时

@(posedge clk or negedge reset)    //当clk的上升沿没到来或reset信号的下降沿到来时

Verilog HDL(3)程序设计语句和描述方式_第5张图片

3.过程语句使用中需要注意的问题

在信号定义形式方面,无论是对时序逻辑还是组合逻辑描述,verilog hdl要求在过程语句(initial和always)中,被赋值信号必须定义为reg类型。

(1)采用过程对组合电路进行描述时,作为全部的输入信号需要列入敏感信号列表

(2)采用过程对时序电路进行描述时,需要把时间信号和部分输入信号列入敏感事件列表。应当注意的是,不同敏感事件列表会产生不同的电路形状。

Verilog HDL(3)程序设计语句和描述方式_第6张图片

Verilog HDL(3)程序设计语句和描述方式_第7张图片

异步计数器由于设计出的电路面积过大而且占用运行空间较大,所以现在多采用同步计数器。也就是clk到达上升沿时触发。

同时同步计数器还用于FPGA领域

你可能感兴趣的:(verilog)