一、实验要求
路科验证V0课程实验指导 (shimo.im)
二、实验代码
router_io.sv
//定义接口,将复位信号(test.sv产生)送入DUT(router.v)
interface router_io(input bit clock);
logic reset_n;
logic [15:0] din;
logic [15:0] frame_n;
logic [15:0] valid_n;
logic [15:0] dout;
logic [15:0] valido_n;
logic [15:0] busy_n;
logic [15:0] frameo_n;
endinterface
test.sv
//产生复位信号,复位时,reset_n为低电平,frame_n和valid_n为高电平
module test(router_io intf);
initial begin
#2 intf.reset_n = 1'b1;
#2 intf.reset_n = 1'b0;
#2 intf.reset_n <= 1'b1;//复位信号持续2
end
initial begin
reset();//调用reset产生复位信号
end
task reset();
//@(posedge intf.clk or negedge intf.reset_n);
@(negedge intf.reset_n);
intf.din <= 0;
intf.frame_n <= '1;
intf.valid_n <= '1;
repeat(15) @(intf.clock);//复位后至少等待15个时钟周期后发送数据
endtask
endmodule
router_test_top.sv
//产生时钟
//例化另外三个文件
`timescale 1ns/1ps
module router_test_top;
bit clk;
parameter cicle = 10;
initial begin
forever #(cicle/2) clk = !clk;//产生周期为10的时钟
end
router_io intf(
.clock(clk)
);//例化接口
test tb(intf);//例化test,产生复位信号
router dut(
.clock (intf.clock ),
.reset_n (intf.reset_n ),
.din (intf.din ),
.frame_n (intf.frame_n ),
.valid_n (intf.valid_n ),
.dout (intf.dout ),
.valido_n(intf.valido_n),
.busy_n (intf.busy_n ),
.frameo_n(intf.frameo_n)
);//例化router为DUT
endmodule
三、硬件层次
四、仿真结果