在fpga的编程中,有好多的代码虽然在具体应用上各具特色,但在其结构上或许有着许多共通之处。比如下面的这段定时计数的结构。

always @(posedge sys_clk or negedge sys_rst_n)begin
    if(!sys_rst_n)
         timer_cnt <= 1'b0;
         timer_done <= 1'b0;
    end
    else begin
        if(timer_cnt == 10'd1_000 - 1'b1)begin
            timer_done <= 1'b1;
            timer_cnt  <= 1'b0;
        end
        else begin
            timer_done <= 1'b0;
            timer_cnt <= timer_cnt + 1'b1;
        end
    end
end

这段代码实现的是计数器的作用,每计数到1000个时钟周期就会产生一个timer_done的高电平信号。看似很简单,然而在我们的许多应用中,你可能都会看到它的身影。例如:延时、PWM、分频/倍频等等。其实一个大的工程都是由一些这种小的,具体的代码实现的,正所谓不积跬步无以至千里,不积细流无以成江海。复杂的工程,细分到每一个具体的小段代码上,都将变得容易理解起来。