2020-12-11

第一个大概的 uvm 例子及相关坑

  • 首先讲讲vhdl的加法运算的坑
    使用vhdl写了一个两个数相加的module,signal定义为std_logic_vector类型,然后直接使用一个process根据valid的脉冲做加法运算。
    自己也注意到了加法、乘法等溢出问题,但是编译总是报左右位宽不匹配。然后才发现vhdl不允许vector类型数据直接相加,需要先做类 型转换。

  • 定义integer类型signal

  • 使用CONV_INTEGER(signal name)转换

  • 两个integer做自加运算后在转为vector 类型交付接口。 这里可以直接写为result <= CONV_STD_LOGIC_VECTOR(A+B,9).。讲integer类型的a+b结果转为9bit的std_logic_vector

  • 然后开始搭第一个简单的testbench

  • 首先定义接口interface,其就是monitor、scoreboard,dut间的交互接口,其中接口定义dut需要的输入输出signal及数据传递task(有时序)

  • 接着写数据生成模块,使用$random 生成数据交付bfm,

  • 写dut模块,简单数据加法运算

  • 使用接口激励dut,并且将dut输出赋值接口中的某个信号

  • 编写scoreboard,根据时序采集dut数据输出,使用接口中信号自己做相同运算。然后比对数据,使用打印信息显示log日志

上一篇:干货丨高频数据处理技巧:如何将高频信号转化为离散的买卖信号?


下一篇:Qt中检查槽函数connect是否正确