此次系列的博客主要是给uart的接收模块搭建一个简单的uvm验证平台,帮助对UVM方法学的理解与掌握,首先第一部分是编写验证平台的顶层top.sv,该部分包括以下几个部分
- 时钟复位信号的产生。
- 接口例化,并通过config_db机制将接口set到平台的agent中。
- dut例化。
- 波形dump。
- run_test()调用。
关于uart相关内容在此处不赘述,网上资料很多,大家可以学习。
代码如下
`timescale 1ns/10ps
`include "include/uart_intfs.incl"
module top();
import uvm_pkg::*;
bit clk;
bit rst_n;
uart_intf uart_if(clk);
always #10 clk = ~clk;//50MHz
initial begin
uvm_config_db #(virtual uart_intf)::set(null,"uvm_test_top.env.in_agent","uart_if",top.uart_if);
uvm_config_db #(virtual uart_intf)::set(null,"uvm_test_top.env.out_agent","uart_if",top.uart_if);
$timeformat(-9,3, "ns",12);
run_test();
end
uart_rx uart_rx_u(
.clk (clk ),
.rst_n (rst_n ),
.uart_rx (uart_if.dt ),
.rx_vld (uart_if.rx_vld ),
.rx_dt (uart_if.rx_dt )
);
initial begin
`ifndef NO_DUMP_FSDB
$fsdbAutoSwitchDumpfile(1024,"uart",3);
$fsdbDumpvars(0,top,"+all");
$fsdbDumpflush();
`endif
end
endmodule
注:这里写的代码都是现场一个字一个字敲得,如果有错误,还请大家帮忙指正出来,谢谢。如果代码编译仿真有问题,可以私聊,有时间可以帮忙调试下。