Verilog:锁存器与触发器建模
verilog的行为级建模使用关键词initial和always定义的两种结构类型的语句。一个模块的内部可以包含多个initial和always语句块,仿真的时候,这些语句块同时并行执行,直到仿真结束
initial语句块通常用来描述激励信号,仿真时仅执行一次,课本中没有详细介绍。
always语句本身是一个无限循环语句,即不停地循环执行其中地内容。其语法一般如下
1 | always @(敏感信号列表) |
敏感信号分为两种,电平敏感信号和边沿敏感信号
1 | always @(D,S) |
上面是电平敏感信号,当D或S的电平改变的时候,会执行always块中的内容
而边沿敏感信号分别使用posedge和negedge表示上升沿、下降沿
1 | always @(posedge CP,negedge CR) |
表示CP信号上升沿或者CR信号下降沿来的时候执行always语句块中的内容
always块内部的赋值语句分为两种:阻塞型和非阻塞型。其中阻塞型使用"=",非阻塞型使用"<="。
阻塞型赋值的多条语句是逐条进行的,而非阻塞型赋值可以理解为是同时进行的。
锁存器和触发器的Verilog建模实例
门控D锁存器
1 | module D_latch( |
基本D触发器
1 | module DFF( |
带有同步清零功能的D触发器
1 | module sync_rst_DFF( |