利用FPGA板载资源实现分频器

采用降频的方法实现六分频器

在 FPGA 中凡是时钟信号都要连接到全局时钟网络上,全局时钟网络也称为全局时钟树, 是 FPGA 厂商专为时钟路径而特殊设计的,它能够使时钟信号到达每个寄存器的时间都尽 可能相同,以保证更低的时钟偏斜(Skew)和抖动(Jitter)。而我们用这种分频的方式产 生的 clk_out 信号并没有连接到全局时钟网络上,但 sys_clk 则是由外部晶振直接通过管脚 连接到了 FPGA 的专用时钟管脚上,自然就会连接到全局时钟网络上,所以在 sys_clk 时钟 工作下的信号要比在 clk_out 时钟工作下的信号更容易在高速系统中保持稳定。绘制波形图:

根据绘制的波形图编写硬件代码:

module 		divider_six
(
		input 		wire 	sys_clk,
		input		wire 	sys_rst_n,
		
		//output 		reg 	clk_out
		output     reg      clk_flag
);
reg 	[2:0]		cnt;

//计数器实现从0到五的循环计数
always@(posedge sys_clk or negedge sys_rst_n)
		if(sys_rst_n == 1'b0)
			cnt <= 3'b0;
		else if(cnt == 3'd5)
			cnt <= 3'b0;
		else
			cnt <= cnt + 1'b1;
//没冲信号指示六分频
always@(posedge sys_clk or negedge sys_rst_n)
		if(sys_rst_n == 1'b0)
			clk_flag <= 1'b0;
		else if(cnt == 3'd4)
			clk_flag <= 1'b1;
		else
			clk_flag 	<= 1'b0;
		


endmodule

 代码所描述的硬件电路为:

编写仿真代码进行验证波形图:

`timescale   1ns/1ns
module	 tb_divider();

reg  sys_clk;
reg  sys_rst_n;

wire 	clk_flag;

initial 	begin
		sys_clk <= 1'b1;
		sys_rst_n <= 1'b0;
		#20
		sys_rst_n <= 1'b1;
		
end

always	#10 sys_clk = ~sys_clk;
divider_six	 	divider_six_inst
(
		.sys_clk(sys_clk),
		.sys_rst_n(sys_rst_n),
		
		.clk_flag(clk_flag)
);


endmodule

 调用modsim进行仿真验证:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值