系统任务$readmemh读取十六进制文件。$readmemh的作用是将文件中的数据一次性的读入某个数组中,然后可以依次从数组中取出单个的数据进行处理。读取的内容只包括空白位置(空格、换行、制表格)、注释行、十六进制的数字。语法结构中的起始地址与终止地址可省略。
【语法结构】:
$readmemh("文件名", 存储器名,起始地址,终止地址);
【实例150】:
//从input文件夹下读取16进制文本hex_file_1.txt
//读取的文本数据存储在data_mem_1数组寄存器中
//data_mem_1数组寄存器的深度为8,位宽为16bit
reg[15:0] data_mem_1 [7:0];
initial$readmemh("./input_file/hex_file_1.txt", data_mem_1);
【仿真测试150】:
任务$readmemh读取的数据之间可以使用空格(space)、换行(enter)、制表格(tab)进行分隔,若文件中读取的数据个数不足以填满寄存器数组所定义的深度,那么余下的数据以x填充。
测试用例1:
读取文本hex_file_1.txt,该文件中以回车分隔,共有8个16进制数据。
hex_file_1.txt文本中的数据排列如下。
$readmemh读取并打印的数据如下。
# read from hex_file_1:
# f001
# e002
# d003
# c004
# b005
# a006
# 9007
# 1008
测试用例2:
读取文本hex_file_2.txt,该文件中以空格分隔,共有8个16进制数据。
hex_file_2.txt文本中的数据排列如下。
$readmemh读取并打印的数据如下。
# read from hex_file_2:
# 1001
# 1002
# 1003
# 1004
# 1005
# 1006
# 1007
# 1008
测试用例3:
读取文本hex_file_3.txt,该文件中以制表格分隔,共有8个16进制数据。
hex_file_3.txt文本中的数据排列如下。
$readmemh读取并打印的数据如下。
# read from hex_file_3:
# a001
# a002
# a003
# a004
# a005
# a006
# a007
# a008
测试用例4:
读取文本hex_file_4.txt,该文件中以回车分隔,仅有4个16进制数据。
hex_file_4.txt文本中的数据排列如下。
$readmemh读取并打印的数据如下。
# read from hex_file_4:
# f001
# e002
# d003
# c004
# xxxx
# xxxx
# xxxx
# xxxx