任何功能的持续延迟?

时间:2015-11-07 12:45:29

标签: verilog

在一些在线verilog编译器(我正在学习Verilog)中,我正在尝试编写一个带有状态变量的模块。当给模块一个工作ID和两个非零的数字时,结果将被写入另一个变量。

当我从

更改功能时
c=a**b

c=(a**b+a**(b+1)+(a+1)**b)/10;

它在相同数量的时钟周期后给出结果。这两个函数如何在相同的时钟周期内完成?

http://www.tutorialspoint.com/compile_verilog_online.php

module pow;
parameter rdy=0,bsy=1;
    reg [63:0] a;
    reg [63:0] b;
    reg [63:0] c;
    reg [63:0] work_id_input;
    reg [63:0] work_id_output;
    reg [3:0] state;

    initial
        begin
            state=rdy;
            work_id_input=0;
            work_id_output=0;
            a=0;
            b=0;
            c=0;
        end


        always
        #1 begin
            if(state==rdy && a>0 && b>0 && work_id_input!=work_id_output)
            begin
                state=bsy;
            end
        end

        always
        #1 begin
            if(state==bsy && work_id_input==work_id_output)
            begin
                state=rdy;
            end
        end


        always
            #1 begin
            if(state==bsy)
                begin
                 c=(a**b+a**(b+1)+(a+1)**b)/10;
                 a=0;
                 b=0;
                 work_id_output=work_id_input;
                end
            end
endmodule


module main;
reg [63:0] time_;
reg [63:0] ctr;

pow pow1();

  initial 
    begin
      ctr=0;
      #100 $finish ;
    end

    always
    #1 begin
        ctr=ctr+1;
        if(pow1.state==pow1.rdy && pow1.work_id_output == pow1.work_id_input)
        begin
            pow1.work_id_input<=ctr;
            pow1.a<=ctr;
            pow1.b<=3;
        end
    end

    always
    #1 begin
        $display("%g  counter=%d  result=%d  input_id=%d output_id=%d",$time,ctr, pow1.c,pow1.work_id_input,pow1.work_id_output);
    end
endmodule

1 个答案:

答案 0 :(得分:2)

Verilog HDL是一种硬件描述语言,因此构造可以变成可综合的硬件。

此处,上述两个样本都转换为组合电路。通过直觉,我们可以看到c=a**b将具有比c=(a**b+a**(b+1)+(a+1)**b)/10更少的硬件。但这里的要点是涉及 no 顺序逻辑。

组合电路没有时钟依赖性,理想情况下,您应用的所有输入都可以在零<强>模拟时间内瞬时转换为输出。因此,模拟器同时提供结果。

但是,在真实硬件中,由于有限的设置&amp;保持时间和其他门延迟,需要一些时间将应用的输入转换为输出。这里,第二个样本可能需要更多硬件,因此与第一个样本相比,它可以处理低频输入。在这方面,它们的操作频率不同。

在这里,这与ctr无关,但它与{{1>的更改率有很大关系实际电路可以处理。

所有这些在这里产生差异的是你综合代码之后(或者你在这里手动添加一些门延迟)。有关综合的更多信息,this本书可能会有所帮助。