dav*_*vmc 4 load verilog file save
首先我想说的是,我通过在 ModelSim 中编译的 Verilog 模型在 ADS(高级设计系统 2017)中运行仿真。
我的目标是将 .txt 文件中的数据作为输入加载到测试台中,以便运行模拟,然后将该模拟的结果保存在另一个 .txt 文件中。
以下是名为“param.txt”的输入测试 .txt 文件的内容:
1
2
3
4
5
6
7
8
9
10
Run Code Online (Sandbox Code Playgroud)
这是我的 Verilog 测试台代码:
`include "disciplines.vams"
module resistor(p,n);
electrical p,n;
parameter real R=50.0;
integer file;
integer out;
real pwm_A[0:50];
integer i;
integer j=1;
analog begin
@(initial_step) // Initial Conditions
begin
////////////// Read
file=$fopen("param.txt","r");
if (file) $display("File was opened successfully : %0d", file);
else $display("File was NOT opened successfully : %0d", file);
for (i=1; i<50; i=i+1) begin
pwm_A[i]=$fscanf(file,"%d",j);
j = j+1;
end
////////////// Write
out=$fopen("out.txt","w");
for (i=1; i<=15; i=i+1) begin
$fwrite(out,"%d\n",pwm_A[i]);
end
// Trying to manually display data
$fdisplay(out,123);
$fclose(file);
$fclose(out);
end
// Simulation (doesnt matter)
V(p,n) <+ R * I(p,n);
end
endmodule
Run Code Online (Sandbox Code Playgroud)
模拟日志没有错误或警告:
File was opened successfully : -32
Run Code Online (Sandbox Code Playgroud)
但是名为“out.txt”的输出 .txt 文件会生成以下内容:
1
1
1
1
1
1
1
1
1
1
0
0
0
0
0
123
Run Code Online (Sandbox Code Playgroud)
而不是原始数据。
值得注意的是,手动引入的“123”值写入没有问题,但其余数据都是“0”或“1”。
有人能发现问题吗?
提前致谢。
这条线在这里
pwm_A[i]=$fscanf(file,"%d",j);
Run Code Online (Sandbox Code Playgroud)
应该读
$fscanf(file,"%d",pwm_A[i]);
Run Code Online (Sandbox Code Playgroud)
系统$fscanf
函数与$fdisplay
- 函数输出到其参数列表中的变量相反。它返回从该行成功读取的项目数。(希望)前十行为 1,接下来的行为 0。因此,您应该真正检查该数字,如果不是您所期望的,请采取措施,例如:
count = $fscanf(file,"%d",pwm_A[i]);
if (count != 1)
// whatever
Run Code Online (Sandbox Code Playgroud)