与Verilog仿真实时通信

问题描述 投票:0回答:2

我希望能和verilog仿真实时交流,就像 我在某个地方输入一个数字,verilog 模拟可以读取它并显示它。所以我找到了一种使用读/写文件进行通信的方法。首先,我编写一个 C 程序来扫描我在终端中键入的内容,并实时更改特定文件中的数字。然后我想如果verilog保留fscanf文件,它就可以通信。我写了下面的verilog代码,它可以工作,但不是很好。如果我每次输入 1 ~ 9 一秒钟,就会丢失大约 6 个数字。我希望我输入的所有数字都可以被 verilog 读取。我使用ncverilog来编译。谁能告诉我如何修复我的 verilog 或者有其他方法与 verilog 通信。

module testbench;
reg [100:0] t1;
reg [100:0] t2;
integer in;
initial begin
   t1=0;t2=0;
end
always begin
   in = $fopen("in.txt","r");
   $fscanf(in,"%d",t1);
   if(t1!=t2) begin
      $display("%d",t1);
      t2=t1;
   end
   $fclose(in);
end
endmodule
c verilog simulation communication
2个回答
2
投票

这当然是可能的,但我认为尝试使用文件进行通信是错误的方法。您一定会遇到文件/IO 缓冲区的竞争条件和其他问题。

或者,您可以使用 Verilog PLI 让 C 程序在特定事件(例如按下

Enter
键时)将数据发送到模拟。


0
投票

老问题,相关答案。 您可以在我的 uart sim 中看到双向文件 io。

https://github.com/Johnlon/spam-1/blob/master/verilog/uart/um245r.v

在 unix 上,您可以使用 unix 域套接字并像终端一样对待,只需做一些工作。

© www.soinside.com 2019 - 2024. All rights reserved.