Xilinx FPGA:vivado实现超声波测距

项目要求:

超声波模块测出的距离显示在数码管上

产生时钟使能信号的模块:

`timescale 1ns / 1ps
//产生1us为周期的时钟使能信号
//1us/20ns=50,div_cnt内部计数周期为0~49
module vlg_en(
     input              sys_clk    ,
     input              rst_n      ,
     output    reg      clk_en      //clk_en的时钟周期为1us

    );
    reg  [7:0]    div_cnt   ;
    
    //对输入时钟sys_clk做分频计数,产生1us的时钟使能信号
    
    always @(posedge sys_clk )
           if(!rst_n)
           div_cnt <= 0 ;
           else if ( div_cnt == 50 )
           div_cnt <= 0 ;
           else
           div_cnt <= div_cnt +1 ;
           
    //产生时钟使能信号
    always@(posedge sys_clk )
           if(!rst_n)
           clk_en <= 0 ;
           else if ( div_cnt == 49 )
           clk_en <= 1 ;
           else
           clk_en <= 0 ;
    
    
    
    
endmodule

产生trig信号的模块

`timescale 1ns / 1ps
module vlg_trig(
    input                sys_clk    ,
    input                rst_n      ,
    input                clk_en     ,   //1us为周期的时钟使能信号
    output      reg      trig    
    );
    
    parameter        trig_50000 = 16'd50_000 ;
    
    reg    [16:0]     trig_cnt    ;  //  T=50ms   t=1us   50ms/1us = 50000   位宽是16
    
    //trig_cnt计满50ms
    always@(posedge sys_clk)
          if(!rst_n)
          trig_cnt <= 0 ;
          else if ( clk_en == 1 && trig_cnt == trig_50000 -1 )
          trig_cnt <= 0 ;
          else if ( clk_en == 1 ) 
          trig_cnt <= trig_cnt +1 ;
          else
          trig_cnt <= trig_cnt   ;
    
    //产生保持10us的高脉冲trig信号
    always@(posedge sys_clk)
          if (!rst_n)
            trig <= 0 ;
          else if ( trig_cnt > 0 && trig_cnt < 4'd10)
            trig <= 1 ;
          else
            trig <= 0 ;
    
endmodule

对echo信号高脉冲计时

`timescale
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值