1 Star 5 Fork 5

yhp/basic_verilog

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
pulse_stretch.sv 2.08 KB
一键复制 编辑 原始数据 按行查看 历史
//--------------------------------------------------------------------------------
// pulse_stretch.sv
// Konstantin Pavlov, pavlovconst@gmail.com
//--------------------------------------------------------------------------------
// INFO --------------------------------------------------------------------------------
// Pulse stretcher/extender module
// this implementftion uses a simple delay line or counter to stretch pulses
// WIDTH parameter sets output pulse width
// if you need variable output poulse width, see pulse_gen.sv module
/* --- INSTANTIATION TEMPLATE BEGIN ---
pulse_stretch #(
.WIDTH( 8 )
.USE_COUNTER(0)
) ps1 (
.clk( clk ),
.nrst( nrst ),
.in( ),
.out( )
);
--- INSTANTIATION TEMPLATE END ---*/
module pulse_stretch #( parameter
WIDTH = 8,
USE_CNTR = 0 // ==0 - stretcher is implemented on delay line
// ==1 - stretcher is implemented on counter
)(
input clk,
input nrst,
input in,
output out
);
localparam CNTR_WIDTH = $clog2(WIDTH) + 1;
generate
if ( WIDTH == 0 ) begin
assign out = 0;
end else if( WIDTH == 1 ) begin
assign out = in;
end else begin
if( USE_CNTR == '0 ) begin
// delay line
logic [WIDTH-1:0] shifter = '0;
always_ff @(posedge clk) begin
if( ~nrst ) begin
shifter[WIDTH-1:0] <= '0;
end else begin
// shifting
shifter[WIDTH-1:0] <= {shifter[WIDTH-2:0],in};
end // nrst
end // always
assign out = (shifter[WIDTH-1:0] != '0);
end else begin
// counter
logic [CNTR_WIDTH-1:0] cntr = '0;
always_ff @(posedge clk) begin
if( ~nrst ) begin
cntr[CNTR_WIDTH-1:0] <= '0;
end else begin
if( in ) begin
// setting counter
cntr[CNTR_WIDTH-1:0] <= WIDTH;
end else if( out ) begin
// decrementing counter
cntr[CNTR_WIDTH-1:0] <= cntr[CNTR_WIDTH-1:0] - 1'b1;
end
end // nrst
end // always
assign out = (cntr[CNTR_WIDTH-1:0] != '0);
end
end // if WIDTH
endgenerate
endmodule
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/yuan_hp/basic_verilog.git
git@gitee.com:yuan_hp/basic_verilog.git
yuan_hp
basic_verilog
basic_verilog
master

搜索帮助