Verilog学习之触发器与modelsim仿真
一、前言
本文将学习常见类型触发的verilog编写,结合仿真结果来熟悉。
二、触发器介绍
触发器在verilog中的作用主要是具有存储作用,由时钟信号来触发改变存储内容,较常见的触发从同步,异步角度来区分,可分为同步清零,同步置位,异步清零,异步置位。
//同步清零
always@(posedge clk ,posedge rst )
begin
if(rst)
out_syn_clear<=1'b0;
else
if (cls)
out_syn_clear<=1'b0;
else
out_syn_clear<=d;
end
波形如下,只有rst和cls信号都为0时,输出信号为输入信号,其余情况输出为0

//同步置位
always@(posedge clk,posedge cls)
if(rst)
out_syn_set<=1'b1;
else if (cls)
out_syn_set<=1'b0;
else
out_syn_set<=d;
波形如下,只有rst和cls信号都为0时,输出信号为输入信号,其余情况输出为0,置位信号rst为1时输出为1。

//异步清零
always@(posedge clk or posedge cls)
begin
if(cls)
out_asyn_clear<=1'b0;
else
out_asyn_clear<=d;
end
波形如下,cls信号为0时,输出信号为输入信号,为1时进行清零操作,输出0。

//异步置位
always@(posedge clk or posedge rst)
begin
if(rst)
out_asyn_set<=1'b1;
else
out_asyn_set<=d;
波形如下,置位rst信号为0时,输出信号为输入信号,为1时进行置位操作,输出1。

三、测试文件代码
module FF_SIM();
reg d;
reg clk,rst,cls;
wire out_asyn_clear,out_asyn_set,out_syn_set,out_syn_clear;
initial
begin
clk=1'b0;
d=1'b0;
rst=1'b0;
cls=1'b0;
#150;
cls=1'b1;
rst=1'b1;
#150;
cls=1'b0;
rst=1'b1;
#150;
cls=1'b1;
rst=1'b0;
#150;
cls=1'b0;
rst=1'b0;
end
always
#2 clk=~clk;
always
#10 d=~d;
FF FF_sim(.d(d),.clk(clk),.rst(rst),.cls(cls),.out_asyn_clear(out_asyn_clear),.out_asyn_set(out_asyn_set),.out_syn_set(out_syn_set),.out_syn_clear(out_syn_clear));
endmodule