`timescale 1 ns/1 ns // time-unit = 1 ns, precision = 10 ps
|
|
|
|
// simplified CC_PLL model
|
|
module CC_PLL #(
|
|
parameter REF_CLK = "", // e.g. "10.0"
|
|
parameter OUT_CLK = "", // e.g. "50.0"
|
|
parameter PERF_MD = "", // LOWPOWER, ECONOMY, SPEED
|
|
parameter LOW_JITTER = 1,
|
|
parameter CI_FILTER_CONST = 2,
|
|
parameter CP_FILTER_CONST = 4
|
|
)(
|
|
input CLK_REF, CLK_FEEDBACK, USR_CLK_REF,
|
|
input USR_LOCKED_STDY_RST, USR_SET_SEL,
|
|
output USR_PLL_LOCKED_STDY, USR_PLL_LOCKED,
|
|
output CLK270, CLK180, CLK90, CLK0, CLK_REF_OUT
|
|
);
|
|
|
|
reg r_pll_clk;
|
|
reg r_user_pll_locked;
|
|
|
|
// OUT_FREQ = 2 MHz
|
|
integer clk_half_period = 250;
|
|
|
|
initial begin
|
|
r_pll_clk = 1'b0;
|
|
r_user_pll_locked = 1'b1;
|
|
end
|
|
|
|
always #clk_half_period r_pll_clk = ~r_pll_clk;
|
|
|
|
assign CLK0 = r_pll_clk;
|
|
assign USR_PLL_LOCKED = r_user_pll_locked;
|
|
|
|
endmodule
|
|
|
|
|
|
// simplified CC_CFG_END model
|
|
module CC_CFG_END (
|
|
output CFG_END
|
|
);
|
|
|
|
assign CFG_END = 1'b1;
|
|
|
|
endmodule
|
|
|
|
|
|
module tb_blink;
|
|
|
|
// DUT in/out
|
|
reg clk = 1'b0;
|
|
reg rst_n = 1'b1;
|
|
wire [7:0] led_n;
|
|
|
|
// Testbench variables
|
|
reg [7:0] led_exp = 8'hfe;
|
|
|
|
// Testbench 1/2 clock period
|
|
localparam clk_half_period = 50;
|
|
|
|
blink DUT (.clk_i(clk), .rst_n_i(rst_n), .led_n_o(led_n));
|
|
|
|
// Set dumpfile
|
|
initial begin
|
|
$dumpfile ("tb_blink.fst");
|
|
$dumpvars (0, tb_blink);
|
|
end
|
|
|
|
// Setup simulation
|
|
initial begin
|
|
#1 rst_n = 1'b0;
|
|
#120 rst_n = 1'b1;
|
|
end
|
|
|
|
// Generate 10 mhz clock
|
|
always #clk_half_period clk = !clk;
|
|
|
|
// Checker
|
|
initial begin
|
|
@(posedge rst_n)
|
|
for (integer i = 0; i < 7; i = i + 1) begin
|
|
assert (led_n == led_exp)
|
|
$display("LED : 0x%h", led_n);
|
|
else
|
|
$warning("LED error, got 0x%h, expected 0x%h", led_n, led_exp);
|
|
#128_000;
|
|
led_exp = {led_exp[6:0], led_exp[7]};
|
|
end
|
|
$display ("LED tests finished");
|
|
$finish;
|
|
end
|
|
|
|
|
|
endmodule
|