• 野火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
    		
    
    
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33

    在这里插入图片描述

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55

    在这里插入图片描述
    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    3.4 仿真波形与对比

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

    3.5 使用降频的方法

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

  • 相关阅读:
    SpringBoot多数据源及事务解决方案
    NumPy掩码数组
    为什么网上的流量卡都有禁发地区呢?流量卡管控地区整理!
    android开发电子书,android基础编程
    JAVAEE初阶相关内容第十六弹--网络编程
    requirements.txt文件如何生成及导入
    【owt-server】内部传输机制4 :TransportServer 及TransportSession 管理
    防止使用春季休眠的数据库事务中的更新丢失
    小米机器狗二代来了,比上一代更瘦、更快、更强!NVIDIA主控+全志MR813+全志R329协处理器
    php实战案例记录(2)生成包含字母和数字但不重复的用户名
  • 原文地址:https://blog.csdn.net/qq_30093417/article/details/126504222