为存储器赋值的一种方法是使用系统任务:
1) $readmemb (加载二进制值)
2) $readmemb (加载十六进制值)
这些系统任务从指定的文本文件中读取数据并加载到存储器。文本文件必须包含相应的二进制或者十六进制数。例如:
reg [1:4] RomB [7:1] ;
$ readmemb ("ram.patt", RomB);
Romb是存储器。文件“ram.patt”必须包含二进制值。文件也可以包含空白空间和注释。下面是文件中可能内容的实例。
1101
1110
1000
0111
0000
1001
0011
系统任务$readmemb促使从索引7即Romb最左边的字索引,开始读取值。如果只加载存储器的一部分,值域可以在$readmemb方法中显式定义。例如:
$readmemb ("ram.patt", RomB, 5, 3);
在这种情况下只有Romb[5],Romb[4]和Romb[3]这些字从文件头开始被读取。被读取的值为1101、1100和1000。
文件可以包含显式的地址形式。
@hex_address value
如下实例:
@5 11001
@2 11010
在这种情况下,值被读入存储器指定的地址。
当只定义开始值时,连续读取直至到达存储器右端索引边界。例如:
$readmemb ("rom.patt", RomB, 6);
//从地址6开始,并且持续到1。
$readmemb ( "rom.patt", RomB, 6, 4);
//从地址6读到地址4。