AMBA 2.0 AHB SRAMC
testbench是最后加在设计电路的输入接口上的硬件模块,用来测试必要的功能。
主要功能:1.generate timulus 2.check response
**第四课的答疑:$finish(2)中的数字代表最后打印信息的详细程度,默认是1。
Parameter
可以用字符代替数字,需要在例化的时候用指定参数值。一共有两种方法:
1. shift sh1 (shiftedVal, inVal, 7); //instantiation
defparam shi1.width = 16; //parameter redefinition
2. shift #(16) sh1 (shiftedVal, inVal, 7) //使用#赋值
Task 和Function都是在模块里面定义的,它们是否可综合取决于描述时的语言是否可以综合。
Task:只能在时序模块中使用,不能作为表达式中的operand。并且可以含有delay语句,按照时间顺序执行操作,但有可能无法综合。
一般用来read_reg,跟去寄存器中读取的数值决定接下来要执行的task。
Function:在表达式当中作为operand使用,既可以在时序模块中使用,也可以在连续性赋值中使用。
不能含有time delay语句,也不能有@(),执行完成后会有返回值。
*System Task:已经由系统定义好的,用task...endtask结构写出的Task就是System Task,用$符号区分表示。
包括:$display,write,strobe,monitor,readmemh,readmemb,stop,finish
$write功能和$display功能相同,但是输出新值的时候不会另起一行。
*System Function:已经由系统定义好的,用function...endfunction结构写出的Function,用$符号区分表示。
包括:$time,stime,random,bitstoreal
$stime返回的是32bit的时间值。
Conversion Function:$rtoi,iotr在signed integer和real value之间转换,$realtobits,bitstoreal在bit和real之间转换(bit为64位)
XMR:跨模块的引用,例如top.dut.a。
端口定义变化
参数定义变化
常数当中可以包含一些运算符号;标点符号检测:@(a or b or ci)可以直接写成@(a,b,ci);敏感列表里可以用*表示任意情况,但是不推荐这么写;向量选取更灵活:byte = vector[31-:8]; //相当于vector[31:24];2001当中支持二维数组:reg[31:0] array_2D [127:0][127:0];wire和real类型可以赋给数组;数组的选组更灵活:high_byte = temp[5][31:24],不需要分两步写;用**表示乘方;参数可以指定位宽,节省storage;参数传递的可读性更好 #(.SIZE(1), .WIDTH(12), .SIZE(4096)...);新增generate语句,可以综合;