verilog常用例子

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

2.6.1 Verilog基本模块

1.触发器的Verilog实现

时序电路是高速电路的主要应用类型,其特点是任意时刻电路产生的稳定输出不仅与当前的输入有关,而且还与电路过去时刻的输入有关。时序电路的基本单元就是触发器。下面介绍几种常见同步触发器的Verilog 实现。

同步RS触发器

RS触发器分为同步触发器和异步触发器,二者的区别在于同步触发器有一个时钟端clk,只有在时钟端的信号上升(正触发)或下降(负触发)时,触发器的输出才会发生变化。下面以正触发为例,给出其Verilog 代码实现。

例2-15 正触发型同步RS触发器的Verilog实现。

module sy_rs_ff (clk, r, s, q, qb);

input clk, r, s;

output q, qb;

reg q;

assign qb = ~ q;

always @(posedge clk) begin

case({r, s})

2'b00: q <= 0;

2'b01: q <= 1;

2'b10: q <= 0;

2'b11: q <= 1'bx;

endcase

end

endmodule

上述程序经过综合Synplify Pro后,其RTL级结构如图2-2所示。

图2-2 同步RS触发器的RTL结构图

在ModelSim 6.2b中完成仿真,其结果如图2-3所示

图2-3 同步RS触发器的仿真结果示意图

同步T触发器

T触发器也分为同步触发器和异步触发器,二者的区别在于同步T触发器多了一个时钟端。同步T触发器的逻辑功能为:当时钟clk沿到来时,如果T=0,则触发器状态保持不变;否则,触发器输出端反转。R 为复位端,当其为高电平时,输出Q与时钟无关,Q=0。

例2-16 同步T触发器的Verilog实现。

module sy_t_ff(clk, r, t, q, qb);

input clk, r, t;

output q, qb;

reg q;

assign qb = ~q;

always @(posedge clk) begin

if(r)

q <= 0;

else

q <= ~q;

end

endmodule

上述程序经过综合Synplify Pro后,其RTL级结构如图2-4所示。

图2-4 同步T触发器电路的RTL结构图

在ModelSim 6.2b中完成仿真,其结果如图2-5所示

图2-5 同步T触发器的仿真结果示意图

同步D触发器

同步D触发器的功能为:D输入只能在时序信号clk的沿变化时才能被写入到存储器中,替换以前的值,常用于数据延迟以及数据存储模块中。

例2-17 同步D触发器的Verilog实现。

module sy_d_ff(clk, d, q, qb);

input clk, d;

output q, qb;

reg q;

assign qb = ~q;

always @(posedge clk) begin

q <= d;

end

endmodule

上述程序经过综合Synplify Pro后,其RTL级结构如图2-6所示。

图2-6 同步D触发器的RTL结构图

在ModelSim 6.2b中完成仿真,其结果如图2-7所示

图2-7 同步D触发器的仿真结果示意图

同步JK触发器

JK触发器是在RS触发器的基础上发展而来的,常用于实现计数器。当clk=0时,触发器不工作,处于保持状态。当时钟clk=1时,触发器的功能如下:当JK为00、01以及10时实现RS触发器的功能;当JK为11时实现T触发器的功能。

例2-18 同步JK触发器的Verilog实现。

module sy_jk_ff(clk, j, k, q, qb);

input clk, i, k;

output q, qb;

reg q;

assign qb = ~q;

always @(posedge clk) begin

case({j, k})

2'b00: q <= q;

2'b01: q <= 0;

2'b10: q <= 1;

2'b11: q <= ~q;

endcase

end

endmodule

上述程序经过综合Synplify Pro后,其RTL级结构如图2-8所示。

图2-8 同步JK触发器的RTL结构图

在ModelSim 6.2b中完成仿真,其结果如图2-9所示

图2-9 同步JK触发器的仿真结果示意图

2.三态缓冲器的Verilog实现

三态缓冲器也称三态门,其典型应用是双向端口,常用于双向数据总线的构建。在数字电路中,逻辑输出有两个正常态:低电平状态(对应逻辑0)和高电平状态(对应逻辑1);此外,电路还有不属于0和1状态的高组态(对应于逻辑Z)。所谓高阻,即输出端属于浮空状态,只有很小的漏电流流动,其电平随外部电平高低而定,门电平放弃对输出电路的控制。或者可以理解为输出与电路是断开的。最基本的三态缓冲器的逻辑符号如图2-10所示。

图2-10 三态缓冲器的逻辑符号图

当OE为高电平时,Dataout与Datain相连;而OE为低时,Dataout为高阻态,相当于和Datain之间的连线断开。

例2-19 使用Verilog实现三态缓冲器

inout a;

wire z, b;

//当控制信号z为1时,开通三态门,b为输入端口;当z为0时,三态门为高阻,

//a为输出端口

assign a = (z) ? b : 8'bz;

3.38译码器的Verilog实现

38译码器是通过3条线来达到控制8条线的状态,就是通过3条控制线不同的高低电平组合, 一共可以组合出23=8种状态。在电路中主要起到扩展IO资源的作用。当然,可根据实际需求将38译码器扩展到更高级数上。

例2-20 使用Verilog实现38译码器

module decoder3to8(din, reset, dout);

input [2:0] din;

input reset;

output [7:0] dout;

reg [7:0] dout;

always @(din or reset) begin

if(!reset)

dout = 8'b0000_0000;

else

相关文档
最新文档