使用D触发器实现8分频

本文介绍了使用D触发器通过verilog实现8分频器的过程,从visio绘制电路到verilog代码描述,再到测试程序的验证,详细阐述了8分频器的构建和工作原理。

使用D触发器实现8分频(verilog)

前言

最近闲来无聊玩了一阵子FPGA,其中遇到一个经典的问题,就是用verilog实现8分频器。发现自己并不是很熟练,所以就以blog的形式记录一下,同时也分享给大家。

所需要的前提条件:由verilog语言基础,知道D触发器的逻辑

第一步:visio画出8分频器的电路

要知道,几乎所有的编程语言都由模块化的思想包含在内,硬件描述语言也不例外。想要构建一个8分频器,首先需要了解它是怎么实现的。

8分频器的实现原理: 它是由三个由D触发器简单改造的二分频器级联构成的,即每经过一级输入的时钟频率变为原来的二分之一

二分频器

将一个D触发器的Q非门与D连接就形成了一个二分频电路

在这里插入图片描述

三个二分频器级联

将三个二分频器级联即可得到8分频器

在这里插入图片描述

第二步 按图施工,用verilog语言描述搭建好的电路

二分频器搭建

在DIV_2 图中我们发现,它的内部是一个D_FF(D触发器)。DIV_2将D和Q_NOTE_GATE连接到了一起。那条线就变成了一个模块内部的线,所以在verilog文件中我们要声明一个中间变量,在这里我取名为QD。

module DIV_2(	
	input wire clk,
	input wire rst_n,
	
	output wire Q
);
wire QD;  //声明的中间变量
//例化
D_FF D_FF(
	. clk(clk),
	. rst_n(rst_n),
	. D(QD),

	. Q(Q),
	. Q_NOT_GATE(QD)
);
endmodule

D触发器(D_FF)

因为实例化了D_FF,而且D_FF较为简单,我直接把D_FF的verilog描述源码贴在这里。

module D_FF(

	input wire clk,
	input wire rst_n,
	input wire D,

	output reg Q,
	output wire Q_NOT_GATE

	);

always @(posedge clk or negedge rst_n) begin
	if (~rst_n) //如果rst_n 是低电平,则Q置零
		Q <= 1'b0;
	else 
		Q <= D;
end
assign Q_NOT_GATE = ~Q;

endmodule

8分频器的实现

根据模块化思想,我们只需要在DIV_8.v中(调用)实例化三次2分频器即可。

	module DIV_8(
		input wire clk,
		input wire rst_n,

		output wire rs
		);
    //声明中间变量
	wire Q1;
	wire Q2;
	//实例化三次
	DIV_2 DIV_2_1(
		. clk(clk),
		. rst_n(rst_n),
		
		. Q(Q1)
		);
	DIV_2 DIV_2_2(
		. clk(Q1),
		. rst_n(rst_n),
		
		. Q(Q2)
		);
	DIV_2 DIV_2_3(
		. clk(Q2),
		. rst_n(rst_n),
		
		. Q(rs)
		);

	endmodule

第三步 搭建tb文件测试程序是否正确

已知8分频器的功能是将输入的clk信号频率变为原来的八分之一,所以我们看到的理想波形如下

在这里插入图片描述

搭建tb文件



`timescale 1ns/1ps
module DIV_8_tb();
    
	reg clk;
	reg rst_n;
	wire rs;
	
	initial begin
		clk = 1'b0;
		rst_n = 1'b0;
		#100.3
		rst_n = 1'b1;
	end
	
	always #10 clk = ~clk ;
	
	DIV_8 DIV_8(
		.clk(clk),
		.rst_n(rst_n),
		
		.rs(rs)
	);
endmodule

验证仿真波形

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值