在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。”