从shell重定向命令说起
Linux shell中的重定向常与文件描述符相关,常见的文件描述符为0(标准输入:键盘)、1(标准输出:显示器)和2(标准错误输出:显示器),因此,一些简单的文件相关操作可以在命令行实现,接下来将其应用到实践之中。
在进行可编程存储器仿真时,往往需要将已编程的数据初始化为出厂值0xFF,在实际中,编程数据更新的简单代码如下,即把待编程值从mem数组更新至文件中。
reg [7:0] mem[0:31];
task update_mem();
integer fid;
integer n;
begin
fid = $fopen(mem_file);
for (n = 0; n <=31; n=n+1) begin
$fdisplay(fid,"@%h %h",n, mem[n]);
end
$fclose(fid);
end
endtask
上述简单的代码首先声明存储空间大小,如该例中mem数组。写入数据后将其保存在文件中,下次仿真时从文件中读取。
然而,在需要对空白存储器进行仿真时,即将update_mem任务保存的文件中各地址对应的值设为出厂值0xFF,linux下重定向可以实现文件的读写操作。
#! /usr/bin/bash
filename=$1
awk '$1 ~/@[0-9a-f]{8}/{$2="FF";print}' $filename 1<> $filename
将该文件保存为mem_init.sh,在命令行执行./mem_init.sh memory_hex.txt。
或者直接在命令行输入:
awk ‘$1 ~/@[0-9a-f]{8}/{$2=“FF”;print}’ memory_hex.txt 1<> memory_hex.txt。