`timescale 1ns/100ps
module tb_soc(); /* this is automatically generated */

parameter DW=16;
parameter RAM_AW=7;
parameter ROM_AW=7;


logic clk,rst;//高电平同步复位
logic [DW-1:0]gpio_in,gpio_out;
logic [3:0]intp_ext;//外部中断
logic intp_s; //强制中断
logic T0_PWM_P;//T0_PWM_P
logic T0_PWM_N;//T0_PWM_N
logic T1_PWM_P;//T1_PWM_P
logic T1_PWM_N;//T1_PWM_N
// clk
initial begin
	clk = '0;
	forever #(0.5) clk = ~clk;
end

//sysrst()复位
task sysrst;//复位任务
	input rstb;
begin
	rst <= rstb;
	gpio_in <= 0;
	intp_s <= 0;
	intp_ext <= 4'h0;
	#2.5;
	rst <= ~rstb;
	#2;
end
endtask : sysrst


//启动测试
initial begin
	sysrst(1);//复位系统
	#1;
	gpio_in=16'hFA1C;
	#50
	@(posedge clk);
	intp_s <= 1;//中断
	@(posedge clk);
	intp_s <= 0;
	#10;
	$display("|-----------Yduck pass------------|");
	Yduckdisp();
	$finish;
end

SoC #(
		.RAM_AW(RAM_AW),
		.ROM_AW(ROM_AW)
	) test (
		.clk      (clk),
		.rst      (rst),
		.gpio_in  (gpio_in),
		.gpio_out (gpio_out),
		.intp_ext(intp_ext),//外部中断
		.intp_s   (intp_s), //强制中断
		.T0_PWM_P(T0_PWM_P),
		.T0_PWM_N(T0_PWM_N),
		.T1_PWM_P(T1_PWM_P),
		.T1_PWM_N(T1_PWM_N)
	);

// 输出波形
initial begin
	$dumpfile("tb.lxt");  //生成lxt的文件名称
	$dumpvars(0, tb_soc);   //tb中实例化的仿真目标实例名称
end

//显示
task Yduckdisp;
begin
$display("                                                                                        `");
$display("                           '&@@@&$$$$&&&@########$'                                     `");
$display("                      .;|!;....................;&####$`                                 `");
$display("                   .|;.............................!$###|                               `");
$display("                `!!...................................!&#@;                             `");
$display("               ;!.......................................|@#&.                           `");
$display("             .|..........................................;&@@&.                         `");
$display("            '!.............................................!$@&'                        `");
$display("           '|&&!.............................................&@@;                       `");
$display("          .!&.';..............................................|&@;                      `");
$display("          .$$&&|...............................................!&@;                     `");
$display("          .&&&|;................................................|@&'                    `");
$display("         `;...................;&@@@@&|..........................;&@!                    `");
$display("         ';..................!$;   !@@$!.........................|&|.                   `");
$display("         .;;;|&&&&;.........;$$`   .&@@&;........................!&&.                   `");
$display(" .``   `;&&$|!!!!|&!........!$#@|;&@@@#$;........................!&|.                   `");
$display("'$&|!;!!!!!!!!!!!!||;........|@@@@$&&@&|.........................|&;    `'`             `");
$display(" .|$!..!!!!!!!!!!!!||;........!&@@$|$$!.........................;$$$@##@&&&@@;          `");
$display("    '&$!.;!!!!!!!!!!!&|;..........;.............................&##&!.......!$&.        `");
$display("       '|||;;!!!!!!!!!!|&$|;...................................|&&............&&;       `");
$display("      .|&@@@@&!;!!!!!!!!!!!!!!!!!!|&|;........................&@&..............&&.      `");
$display("     .;!&@#@&$$$&|!!!!!!!!!!!!!!!!!!||;.....................;$@|...............;$|.     `");
$display("      `!!|$@@&$$&&$$&!!!!!!!!!!!!!!!&|....................;&@$;.................|&.     `");
$display("        `!!!!||&&&&&|||!!!!!!!!!!!|&!...................;$@$;...................!&;     `");
$display("           ;@&&$&&&&|||&$$&&&&$|!;...................;|&@&;.....................!$!     `");
$display("         `&$;........;&$|;.......................;!$@&|;........................!$!     `");
$display("        '$|..............;!&$$&$$$&|;.....;!|$&@$|;.............................!&!     `");
$display("       '$|......................................................................|$.     `");
$display("      .&&;......................................................................&&`     `");
$display("      .&|..............................................................;;......!$;      `");
$display("      ;&|............................................................!$$$&!....&|.      `");
$display("      .&|.......................................................;|&$&!..|&|...||`       `");
$display("      `&&;..............................................................&&|..!&'        `");
$display("       .$|.............................................................!$&;.!&'         `");
$display("        ;$!........................................;;.................;$$;.|&`          `");
$display("         '$|.......................................;;................!$&;;&!            `");
$display("           !|......................................;!;.............;&$!.|&`             `");
$display("            .;;.....................................!!...........;$$!.|&`               `");
$display("               ';....................................;|&|!;!!&$$|;.;&!                  `");
$display("                 ..;............................................!$&`                    `");
$display("                    .!|!...................................;!$&|`                       `");
$display("                         '|$&!;......................;!&&&|'                            `");
$display("                                `.!&$$$$$$$$$$$$&!;'.                                   `");
$display("                                                                                        `");
end
endtask : Yduckdisp
endmodule