【FPGA】实现任意时间的定时器

个人笔记。

本实验是利用时钟来实现任意时间的定时器,本实验的FPGA的晶振是50MHz,50MHz = 50_000_000Hz = 1/50_000_000s = 20ns,也就是说一个时钟周期为20ns,如果要实现100微秒的定时则需要20ns*1000*5=100微秒。

又因为2^26 = 67_108_864 > 50_000_000,所以可以设置二进制长度2^26。(即宽26)

下面代码是如何实现100微秒循环并在100微秒内实现任意时刻定时,完成led闪烁。

reg               led;
reg     [26:0]    cnt;                            //计数器

always @(posedge  sys_clk or negedge nrst)begin
  if(!nrst)
  begin  
      cnt<=26'd0; 
  end
  else 
  begin                                               
       if(cnt>1000*5)                            // 100微秒                        
        begin
        cnt<=0;
        end
        else
        begin
        cnt<=cnt+1;
        end
  end
end   

always @(posedge sys_clk)begin
   if(cnt=1000)                                  //20微秒
   begin  led <= ~led;
   end
end  
   
 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
FPGA(现场可编程门阵列)可以实现任意波特率的主要原因是其可以自定义时钟分频器和计数器。波特率是指在串行通信中每秒传输的比特数。为了实现任意波特率,我们可以使用FPGA中的时钟分频器和计数器来控制数据传输的速度。 首先,我们需要一个参考时钟信号,它通常是一个固定频率的信号。然后,我们需要根据所需的波特率设置时钟分频器来减小参考时钟的频率。例如,如果我们有一个100 MHz的参考时钟,并且想要实现一个波特率为115200的串行通信,我们可以使用时钟分频器将参考时钟的频率降低到115200 Hz。 接下来,我们使用计数器来计算每个比特间的时间间隔。对于波特率为115200的通信,在每个比特之间的时间间隔应为1/115200 秒。我们可以使用计数器来计算这个时间间隔,并在每个比特的开始时相应地发送数据。例如,如果我们的参考时钟频率为115200 Hz,我们可以设置计数器的计数值为1,当计数器达到1时,表示每个比特的时间间隔已经过去,我们可以发送下一个比特的数据。 实现任意波特率的另一种方法是使用FPGA中的相位锁定循环(PLL)。PLL可以根据输入时钟的频率和所需的波特率来调整输出时钟的频率。PLL利用反馈环来自动校正输出时钟的频率,以使其与所需波特率保持同步。 总而言之,FPGA实现任意波特率的关键在于使用时钟分频器和计数器来控制数据传输的速度,或者使用PLL来自动调整时钟频率以满足所需的波特率。因此,我们可以通过调整FPGA中的时钟分频器或PLL来灵活地实现任意波特率的串行通信。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值