微秒级延时函数



  • Perf-V这块板子的微秒级延时函数应该怎么实现呢?



  • @si 蜂鸟E203内联函数的具体使用方法可以查阅他们的书



  • @zhangyue 那对于Perf-V上的E203来说,这个就应该是这样的,对吧?
    image



  • @zhangyue 感谢!



  • 如果需要用C实现的话就要看你具体用哪个软核了,然后使用内联汇编让core跑数个空指令来度过一段时间。
    下面给出一个参考

    void delay_10x(uint32_t cnt)
    {
        u32 i = 0;
    
        cnt *= 625; /* (600MHz:1000 loops = 16us),这里的600MHz是core的时钟频率,需求延时多久修改cnt即可 */
    
        for (i = 0; i < cnt; i++)
            __asm__ __volatile__ ("nop");
    }
    


  • 如果用FPGA 实现的话,可以定义一个寄存器作为计数器使用,板子上有50Mhz的晶振,每个时钟周期的长度是20ns,需要延时多久就计数多少次这样
    贴个博客上看到的代码参考一下
    reg [23:0] count;
    always @(posedge clk )
    begin
    if(count=24'd9_000_000)
    count<=24'b0;
    else
    count<=count+1'b1;
    end
    always @(posedge clk )
    begin
    if(count==24'd9_000_000)
    b<=a;
    end


Log in to reply