Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Verilog中向输出添加延迟_Verilog_Delay_Fpga - Fatal编程技术网

在Verilog中向输出添加延迟

在Verilog中向输出添加延迟,verilog,delay,fpga,Verilog,Delay,Fpga,我需要在代码中添加一个可合成的延迟来获得输出。我的代码是: module square_wave(clk,rst,dac_out); input clk; input rst; output reg dac_out; reg [3:0] counter; // always @(posedge clk) begin if (rst == 1'b1 || counter == 4'b1111) // period, coun

我需要在代码中添加一个可合成的延迟来获得输出。我的代码是:

   module square_wave(clk,rst,dac_out);
   input clk; 
   input rst;
   output reg dac_out;
   reg [3:0]  counter; // 

   always @(posedge clk)
     begin
        if (rst == 1'b1  ||  counter == 4'b1111) // period, count from 0 to n-1
          counter <= 0;
        else
          counter <= counter + 1'b1;

        if (rst == 1'b0  &&  counter < 4'b0110) // duty cycle, m cycles high
          dac_out = 1'b1;
        else
          dac_out = 1'b0;
      end
endmodule 
模块方波(时钟、rst、dac输出);
输入时钟;
输入rst;
输出reg dac_输出;
注册[3:0]计数器;//
始终@(posedge clk)
开始
如果(rst==1'b1 | |计数器==4'b1111)//周期,从0到n-1计数

计数器您可以使用移位寄存器将输出延迟到所需的周期数。然后将原始输出与延迟输出进行比较

 module square_wave(
   input clk, rst,
   output regdac_out, 
   output TG);
   reg [3:0]  counter;
   reg [7:0] shifter;
   always @(posedge clk)
        if (rst == 1'b1  ||  counter == 4'b1111) // period, count from 0 to n-1
          counter <= 0;
        else begin
          counter <= counter + 1'b1;
          shifter <= {shifter, dac_out};
          if (rst == 1'b0  &&  counter < 4'b0110) // duty cycle, m cycles high
            dac_out <= 1'b1;
          else
            dac_out <= 1'b0;
        end
   assign TG = dac_out || shifter[7];
endmodule 
模块方波(
输入时钟,rst,
输出regdac_out,
输出TG);
reg[3:0]计数器;
reg[7:0]移位器;
始终@(posedge clk)
如果(rst==1'b1 | |计数器==4'b1111)//周期,从0到n-1计数

计数器如果需要自定义延迟(即延迟!=N(1/clk)),可以通过从标准单元库实例化延迟缓冲区来添加延迟。但请注意,合成时可能必须添加Don_touch选项,因为该工具可能会优化延迟缓冲区,因为缓冲区的数据路径中没有逻辑(电容器用于延迟信号)。 或者您可以使用下面显示的D触发器来延迟信号(这里的延迟值=N(1/clk))

 always@(posedge clk)    
 begin
  data1_d1 <= data1;       //Delay data1 by one clock (clk)
  data1_d2 <= data1_d1;    //Delay data1 by two clocks (clk)
 end
始终@(posedge clk)
开始

数据1_d1首先说明您的要求:“我需要一个X K/MHz的信号延迟Y纳秒/微秒。”然后说明您的要求:“我有以下时钟a、B、C。”