野火A7学习第七次(分频器相关)

1 理论学习

在这里插入图片描述

2 实战演练 偶分频

2.1 设计规划

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.2 波形绘制

在这里插入图片描述

2.3 代码编写与调试

module divider_six
(
	input wire sys_clk,
	input wire sys_clk_n,

	output wire clk_out
);

reg [1:0] cnt;

// 使用异步复位
always@(posedge sys_clk or negedge sys_rst_n)
	if(sys_rst_n == 1'b0)
		cnt <= 2'd0;
	else if(cnt == 2'd2)
		cnt <= 2'd0;
	else
		cnt <= cnt + 1;

always@(posedge sys_clk or negedge sys_rst_n)
	if(sys_rst_n == 1'b0)
		clk_out <= 1'b0;
	else if(cnt == 2'd2)
		clk_out <= ~clk_out;
	else
		clk_out <= clk_out;

endmodule
		




在这里插入图片描述

tb_divder_six:

`timescale 1ns\1ns
module tb_divder_six();
// 1
reg sys_clk;
reg sys_rst_n;

wire clk_out;

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

always #10 sys_clk = ~sys_clk;

// 3
divider_six divider_six_inst
(
	.sys_clk(sys_clk),
	.sys_rst_n(sys_rst_n),

	.clk_out(clk_out)
);


endmodule

2.4 仿真验证和波形对比分析

在这里插入图片描述

2.5 绑定管脚和上电

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

实现了六分频

2.6 问题改进(全局时钟数)

减少时序问题的产生,并没有连接到了时钟树。尽量使用系统时钟。联想到我们上一章的分频标志信号flag。改进代码
在这里插入图片描述
看上去与第一种只是占空比的不同

如果是赋值a:第一种。低频是可以的,但是高频不行
在这里插入图片描述
第二种:
在这里插入图片描述

3 实战演练 奇分频

3.1 设计规划

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.2 波形绘制

在这里插入图片描述

3.3 代码编写

module divder_five
(
	input wire sys_clk,
	input wire sys_rst_n,

	output wire clk_out	
);

reg [2:0] cnt;
reg 	clk_1;
reg 	clk_2;

always@(posedge sys_clk or negedge sys_rst_n)
	if(!sys_rst_n)
		cnt <= 3'd0;
	else if(cnt == 3’d4)
		cnt <= 3'd0;
	else
		cnt <= cnt + 1;

always@(posedge sys_clk or negedge sys_rst_n)
	if(!sys_rst_n)
		clk_1 <= 1'b0;
	else if(cnt == 3'd2)
		clk_1 <= 1'b1;
	else if(cnt == 3'd4)
		clk_1 <= 1'b0;
	else
		clk_1 <= clk_1 ;
		

always@(posedge sys_clk or negedge sys_rst_n)
	if(!sys_rst_n)
		clk_1 <= 1'b0;
	else if(cnt == 3'd2)
		clk_1 <= 1'b1;
	else if(cnt == 3'd4)
		clk_1 <= 1'b0;
	else
		clk_1 <= clk_1;

always@(negedge sys_clk or negedge sys_rst_n)
	if(!sys_rst_n)
		clk_2 <= 1'b0;
	else if(cnt == 3'd2)
		clk_2 <= 1'b1;
	else if(cnt == 3'd4)
		clk_2 <= 1'b0;
	else
		clk_2 <= clk_2;	

assign clk_out = (clk_1 | clk_2);


endmodule

在这里插入图片描述
tb文件

`timescale 1ns\1ns
module tb_divder_dive();
// 1
reg sys_clk;
reg sys_rst_n;

wire clk_out;

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

always #10 sys_clk = ~sys_clk;

// 3
divider_five divider_five_inst
(
	.sys_clk(sys_clk),
	.sys_rst_n(sys_rst_n),

	.clk_out(clk_out)
);


endmodule

3.4 仿真波形与对比

在这里插入图片描述
在这里插入图片描述

3.5 使用降频的方法

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值