SystemVerilog实验(一)


一、实验要求

路科验证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

三、硬件层次

四、仿真结果


文章作者: DPH
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 DPH !
  目录