jaspergold c2rtl验证一个乘法模块
目前有基于booth算法的乘法器模块:
假设乘法器名称:
mul_top.v
mul_top( valid,ready,//输入握手
clk,reset,
data1,data2,out,//输入两个数,输出乘积
opcode,//不同的指令来指定位宽、符号的条件
instruction_id,//指令id,不需要formal去验证
outputvalid,outputready)//输出握手
//假设cycle delay是4个cycle。
假设乘法器框架图如下(从网上找的图):
乘法器的公式推理就不多放了,大概来说就是将多个子乘积结果相加。
基于booth的乘法器输出结果的cycle delay一般是固定的,c2rtl的脚本中写assertion时会比较简单。(有的其他计算模块的cycle delay不固定,比如基于srt的除法模块,后续讨论)
首先需要准备golden的c model:
假设名称为mul.c
#include "jasperc.h"
#include "stdint.h"
int main() {
unsigned long int a, b,opcode;
unsigned long int out0;
unsigned long int out1;
JG_INPUT(a);
JG_INPUT(b);
JG_INPUT(opcode);