2 Star 1 Fork 0

史峰/basic_verilog

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
sim_clk_gen.sv 1.80 KB
一键复制 编辑 原始数据 按行查看 历史
//------------------------------------------------------------------------------
// sim_clk_gen.sv
// published as part of https://github.com/pConst/basic_verilog
// Konstantin Pavlov, pavlovconst@gmail.com
//------------------------------------------------------------------------------
// INFO ------------------------------------------------------------------------
// Testbench clock generator written in System Verilog
//
`timescale 1ns / 1ps
module sim_clk_gen #( parameter
FREQ = 200_000_000, // in Hz
PHASE = 0, // in degrees
DUTY = 50, // in percentage
DISTORT = 200 // in picoseconds
)(
input ena,
output logic clk, // ideal clock
output logic clkd // distorted clock
);
real clk_pd = 1.0 / FREQ * 1e9; // convert to ns
real clk_on = DUTY / 100.0 * clk_pd;
real clk_off = (100.0 - DUTY) / 100.0 * clk_pd;
real start_dly = clk_pd / 4 * PHASE / 90;
logic do_clk;
initial begin
$display("FREQ = %0d Hz", FREQ);
$display("PHASE = %0d deg", PHASE);
$display("DUTY = %0d %%", DUTY);
$display("DISTORT = %0d ps", DISTORT);
$display("PERIOD = %0.3f ns", clk_pd);
$display("CLK_ON = %0.3f ns", clk_on);
$display("CLK_OFF = %0.3f ns", clk_off);
$display("START_DLY = %0.3f ns", start_dly);
end
initial begin
clk <= 0;
do_clk <= 1;
end
always @ (posedge ena or negedge ena) begin
if (ena) begin
#(start_dly) do_clk = 1;
end else begin
#(start_dly) do_clk = 0;
end
end
always @(posedge do_clk) begin
if( do_clk ) begin
clk = 1;
while ( do_clk ) begin
#(clk_on) clk = 0;
#(clk_off) clk = 1;
end
clk = 0;
end
end
always @(*) begin
clkd = #($urandom_range(0, DISTORT)*1ps) clk;
end
endmodule
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Verilog
1
https://gitee.com/shi-feng-logic/basic_verilog.git
git@gitee.com:shi-feng-logic/basic_verilog.git
shi-feng-logic
basic_verilog
basic_verilog
master

搜索帮助

23e8dbc6 1850385 7e0993f3 1850385