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;
  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Vivado是一种常用的FPGA设计工具,可以用于设计和验证数字电路。在数字电路设计,序列信号延时一个重要的参数,它表示信号从输入到输出所需的时间。 Vivado具有强大的时序分析和延时测试工具,可以帮助设计人员评估和优化设计的信号延时。 要进行序列信号延时测试,需要进行以下步骤: 1. 编写设计代码:首先,设计人员需要使用HDL语言(如VHDL或Verilog)编写设计代码。代码要包含被测试的信号路径,以及输入和输出的时钟信号。 2. 生成设计文件:将设计代码导入Vivado工具,并进行综合和实现。综合是将设计代码转换为门级电路的过程,实现是将门级电路映射到目标FPGA器件上的过程。 3. 进行时序分析:在综合和实现完成后,可以使用Vivado的时序分析工具来评估设计的信号延时。时序分析可以提供各个信号路径的延时信息,并帮助设计人员确定是否满足设计要求。 4. 进行延时测试:在时序分析的基础上,设计人员可以使用Vivado延时测试工具来验证设计的信号延时延时测试会在设计预先定义的输入情况下,通过模拟或硬件测试验证信号延时是否满足要求。 5. 优化设计:如果延时测试结果不满足要求,设计人员可以使用Vivado提供的优化工具来改善设计的信号延时。例如,可以尝试重新布局电路、优化逻辑综合选项或调整时钟频率等。 通过以上步骤,设计人员可以使用Vivado工具进行序列信号延时测试,并逐步优化设计,以满足设计要求。Vivado的丰富功能和易用性使得设计人员能够更快速、准确地完成延时测试任务。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值