vivado如何做延时

0 不延时

assign b=a;

此时a,b的时序一样。

1 短暂延时

1.1

always @(posedge clk)
begin
	b1<=a1;
end
always @(posedge clk)
begin
	b2=a2;
end

这两种情况,b都是滞后a一个clk。也就是说,只要用到了always @(posedge clk),那么b读取到的值是a上一时刻的值。
在这里插入图片描述

1.2

基础知识:
(1)符号“=”用于阻塞的赋值(如:b = a;)。阻塞赋值“=”在 begin 和 end 之间的语句是顺序执行,属于串行语句。
(2)符号“<=”用于非阻塞赋值(如:b <= a;)。非阻塞赋值是由时钟节拍决定,在时钟上升到来时,执行赋值语句右边,然后将 begin-end 之间的所有赋值语句同时赋值到赋值语句的左边。注意:是 begin—end 之间的所有语句,一起执行,且一个时钟只执行一次,属于并行执行语句。
在这里插入图片描述
RAM_Write_Addr_vaild信号滞后于Calib_flag一个周期。
Calib_flag_delay_2clk信号滞后于RAM_Write_Addr_vaild一个周期;相当于Calib_flag_delay_2clk信号滞后于Calib_flag两个周期。
RAM_Read_Addr_vaild和Calib_flag_delay_2clk信号同步。
在这里插入图片描述

2 长时间延时

第一种方法

                    if(!empty)
                        begin
                            if(count_empty<8'd30) 
                                begin
                                    count_empty<=count_empty+1'b1;
                                end 
                            else if(count_empty==8'd30)     
                                begin
                                   wr_en <= 1'b0;//写使能无效
                                   rd_en <= 1'b1;//读使能有效
                                   ST_fifo <= 4;
                                end      
                            else
                                begin
                                    wr_en <= 1'b0;//写使能无效
                                    rd_en <= 1'b0;//读使能无效 
                                    ST_fifo <= 0;
                                end
                        end   

在这里插入图片描述
第二种方法

//模块功能:Calib_State=0后,延时一定时间,然后将Work_Start拉低
reg [7:0] Calib_State_delayCount;
reg [3:0] ST_Calib_State;//状态机
reg Calib_State_delay50clk;
always @(posedge clk)
begin
    if(reset)
        begin
            Calib_State_delayCount<=8'd0;//计数器
            ST_Calib_State<=4'd0;//状态0
            Calib_State_delay50clk<=1'b0;
        end
    else 
        begin
            case(ST_Calib_State)
            0://进入状态0
                if(!Calib_State)//完成LMS校正 
                    begin
                        Calib_State_delayCount<=Calib_State_delayCount+1'b1;
                        ST_Calib_State<=4'd1;
                    end
            1:
                if(Calib_State_delayCount==8'd50)
                    begin
                        ST_Calib_State<=4'd2;
                        Calib_State_delayCount<=Calib_State_delayCount;//停止计数
                    end
                else
                    begin
                         ST_Calib_State<=4'd0;
                    end    
            2:
                 Calib_State_delay50clk=1'b1;
            default :
                ST_Calib_State<=4'd0;
            endcase                            
        end  
end   
assign Work_Start=!Calib_State_delay50clk;
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值