FPGA自学教程 09 偶分屏 & 奇分屏

双非硕士 研一下学期视觉转FPGA

长路漫漫,但希望前途光明

偶分屏就是将普通的时间周期延长,比如延长为六分屏

模拟波形如下

代码如下

module divider_six(
    input Clk,
    input Reset_n,
    output reg divider_six_Clk
    );
    
reg [2:0] cnt;
always@(posedge Clk or negedge Reset_n)
    if(!Reset_n)
        cnt <= 0;
    else if(cnt == 5)
        cnt <= 0;
    else
        cnt <= cnt + 1'b1;

always@(posedge Clk or negedge Reset_n)
    if(!Reset_n)
        divider_six_Clk <= 0;
    else if(cnt == 4)            
        divider_six_Clk <= 1'b1;
    else 
        divider_six_Clk <= 0;
endmodule

 仿真代码如下

`timescale 1ns / 1ps
module divider_six_tb();
    reg Clk;
    reg Reset_n;
    wire divider_six_Clk;
    divider_six divider_six_inst0(
            .Clk(Clk),
            .Reset_n(Reset_n),
            .divider_six_Clk(divider_six_Clk)
        );    
    initial 
        begin
            Clk = 1;
            Reset_n = 0;
            #201;
            Reset_n = 1;
            #200000
            $stop;
        end
    always #10 Clk = !Clk;
endmodule

奇分屏 分屏的效果

代码内容 以五分屏为例

module divider_five(
    input Clk,
    input Reset_n,
    
    output wire Clk_out
    );
    
    reg [2:0]cnt;
    always@(posedge Clk or negedge Reset_n)
        if(!Reset_n)
            cnt <= 0;
        else if(cnt == 4)
            cnt <= 0;
        else 
            cnt <= cnt + 1'b1;
     
     reg Clk_1;
     always@(posedge Clk or negedge Reset_n)
        if(!Reset_n)
            Clk_1 <= 0;
        else if(cnt == 2)
            Clk_1 <= 1;
        else if(cnt == 4)
            Clk_1 <= 0;
        else
            Clk_1 <= Clk_1;
     reg Clk_2;
     always@(negedge Clk or negedge Reset_n) //取时钟的下降沿
        if(!Reset_n)
         Clk_2 <= 0;
     else if(cnt == 2)
         Clk_2 <= 1;
     else if(cnt == 4)
         Clk_2 <= 0;
     else
         Clk_2 <= Clk_2;     
    assign Clk_out = (Clk_1 | Clk_2);     
endmodule

 仿真代码

`timescale 1ns / 1ps

module divider_five_tb();
    reg Clk;
    reg Reset_n;
    
    wire Clk_out;
    divider_five divider_five_inst(
        .Clk(Clk),
        .Reset_n(Reset_n),
        
        .Clk_out(Clk_out)
        );
    
    initial 
        begin
            Clk = 1;
            Reset_n = 0;
            #201;
            Reset_n = 1;
            #20000;
            $stop;
        end
    always #10 Clk = ~Clk;

endmodule
 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值