如何在组合块verilog中延迟1个时钟周期

时间:2017-07-31 10:41:00

标签: verilog fpga xilinx

我有一个组合代码,在那个代码中我想在1个时钟周期后关闭一个信号,即最初它是1,在一个时钟周期后它应该是0.我有什么方法可以做它,如果可能的话,它应该能够在FPGA上合成。 代码如下:

always@(ao or bo or co or dod or eo or fo or go or ho)
    begin
    temp_out = {ho,go,fo,eo,dod,co,bo,ao};
    out_flag = 1;
    //after one clock cycle it should go to 0 ;
    //help is required over here
    out_flag = 0;
    end

1 个答案:

答案 0 :(得分:1)

你不能以纯粹的组合可综合方式来做。你需要一个触发器(可以合成)和一个复位来将信号设置为一个已知值,比如说0.因此,你可以在复位后延迟1个时钟周期,如下所示:

always @(posedge clk) begin 
    if (reset)
        out_flag <= 0;
    else 
        out_flag <= 1;
end

您需要确定准确的时间并根据具体情况使用正确数量的触发器。您可能希望进行异步重置而不是同步,如上例所示。