一个新的连载系列,将以一个实际的 UVM 环境代码讲解的使用、机制等,更新周期会比较长。

 

文件说明

分享的文件是我个人和同学在参加复微杯大学生电子设计大赛中所完成的设计。赛题来自数字命题 AI 赛道,有兴趣可以了解一下

 

【数字赛道命题之一】使用数字电路实现二维卷积计算,并输出相应 code 及报告

 

RTL 设计部分代码不予公开,提供的是通过 Questasim 加密后的文件,能够编译仿真但是无法阅读,例如:

 


`pragma protect begin_protected

`pragma protect version = 1

`pragma protect encrypt_agent = "QuestaSim" , encrypt_agent_info = "10.6c"

`pragma protect key_keyowner = "Mentor Graphics Corporation" , key_keyname = "MGC-VERIF-SIM-RSA-2"

`pragma protect key_method = "rsa"

`pragma protect encoding = ( enctype = "base64" , line_length = 64 , bytes = 256 )

`pragma protect key_block

EBDDlVIhqXE3DzKivVjuI9OF3W7Y0FsnqRYxip5AT5Uavd7H/9i2xlih9gekfmGf

Cd0qkHQIV6O9VNGmvMgrCqG8CPHEpHWQSRjdFX8wDD3ujd9zz+RD9ESRX/5QMGni

6KvH4+Ud9W2gPqcUBW+QJJrnxusW/kwE1llXdQQtYFh5flre3gSn9uHcVRxRlVtd

PEJcD9unkcmyNMHrV4mH5MNp67AdZ5KrO6MmMPg5PYQr5ybE1UQlkxVaEDLMIfat

WVdNot6rUe6E7HTeos4bYqRI1ma/Ax3by9Xf9da41IU/TfCvSY+uX/2JSrJ31f8U

Zx9xgO7YbnPp7vhXyqu+dg==

`pragma protect data_method = "aes128-cbc"

`pragma protect encoding = ( enctype = "base64" , line_length = 64 , bytes = 688 )

`pragma protect data_block

Ij4sxeYRzypcSQKWsDV4i6TeDbhU2nl3hjfQwr1KqPkZsPrTxXNXFC5H2D0rrAUd

6WDGQqEyu9obRLqowsgEMCw1Pqla8PBUJ3hycUzyiUYxvGmhP5sP/NnCA1DRZ9Y9

ya08fhTakN5V00k7AbMYGzUxz2M7iG+qpyp05fk8pYohdG3dW71b2za1CQJ7VEqc

/LxYj0eMW+QoMfwIPDdZAdKpa+Dju0oEO8+KB14EkPruq+93UyRbPlutkvsNsVDr

aMKM+mHa2i4yNgDpTZPk+7MSKC+uTcLrM7a/TQQ40p2AExumbCzSYsNd8lGe6jIh

0tcDrm+wJNyrh3eGzihXstoEwCbh/tYsxmJY8ghdWJ/xo2V7g4SHOugoWA6GGC3D

nPsMuQuJytDIErSJcPNkUZZ3Z5i7ZKx3m9kW4YOus7KdcFn21+XnDMD46rtNw/+c

b49lIMlJylLVKe0OG2KRKOO3ig/E5xnvyHt9rqYU52eHHOBAQrJ7ipvZCt7729vz

iKg5syv55Wc5og1vi7kmazU+42521T226ZodyFiQ11PZKNAQ6mMTiq27DDBTKN5z

zK+LTeejaPumeb4RsOgiPLrNTYHv96PYRzSIptGPCL8R8Rcm0ndCuo72DTKqEcxY

xFG4KEF0vhGxwHqEkZFNqDW1ATTp7s5zcZ6bXTXpFpGQnC1nOfdtwcllt/HNWHaD

9Xg4oDY2B36HlU6KeqTQBUbPb9VMNywpk9NSaVEz2MWQPv3Xh8Eg0uB4ftVZ+C9n

vfvSKO+xBTyGQgvj2QIwelMz6wDc1G4RghcxtHdi/qU64rCDvg5EOWjCSxR4O82R

Fs8c/NnWZJR1AzB8zut8bq/CKga3gzDM4DZ7qi2HMZqV44rCJOfcCfqBYl/g59LR

zZ9Boq26Vbm4yk6SnmXXIw==

`pragma protect end_protected

 

但是 UVM 环境部分代码完全公开,文件包括

 

顶层文件为 tb.sv

 

结构说明

关于 RTL 的功能设计,可以翻阅原文连接中的答辩 PPT,主要功能是实现了输入特征图(1-128)*(1-128),卷积核 1-7,padding1-7,步长 1-3,以及 2*2pooling 和 Relu 的功能。整体结构为

 

 

而整体的验证环境结构如下

 

 

由于时间紧迫,技能生疏,整体环境并不完善,代码也有欠缺,此外,也未加入寄存器模型,因此对寄存器的访问比较繁琐,后期会进行改进。

 

由于设计是进行卷积计算的,所以运行时间会比较长,checker 通过软件算法对 RTL 的卷积计算结果进行比对,所以 RTL 完成一次卷积计算后,仿真时间会停滞一段时间用于软件的卷积计算,属于正常现象。

 

将 .sv 和 .svp 文件添加进工程后,顶层模块为 tb,编译后在控制台输入 vsim -voptargs=+acc work.tb 即可开始默认的 testcase,若要进行其他 testcase,需要加上选项+UVM_TESTNAME=my_test,具体 test 名请查看 conv_pkg.sv

 

 

推荐参考资料

推荐有一定 SV 基础的朋友进行学习,如果还没有可以参考下面几本书自学

 

绿皮书,主要包括 SV 的语法讲解

 

 

UVM primer,UVM 入门讲解,包括 OOP 基本概念

 

 

白皮书,一本 UVM 翔实的工具书,很多参赛选手的 UVM 环境就是直接参考本书例子的

 

 

红宝书,包括从 SV 到 UVM 的讲解,验证思想,验证管理等