【发布时间】:2016-05-13 07:32:55
【问题描述】:
我编写了一段 VHDL 代码的图像处理。为了测试,我用 Matlab 和一个相对简单的测试台创建了一个像素值文件(它只是将值从文件填充到输入)。我想将结果写入一个新文件,以便处理它们并查看生成的图像。
代码编译并运行测试台,我看到我输入的所有报告以检查它是否在任何地方停止,但包含结果的文件仍然是空的。 print 和 writeline 似乎都没有做任何事情。该文件存在并添加到 Vivado 中的项目中,因此我不必编写整个路径。模拟器输出中没有警告或错误。
我从here 和here 获得了写入文件的代码,并将其扩展为每个时钟写入文件并在顶部添加标题。
color_out(0) 是一段输出。 color_out_v 输出有效。
有什么想法吗?我错过了什么?
Verify_data_process : process
variable my_line : line;
file l_file : TEXT; -- open write_mode is "color_out.txt";
begin -- process
file_open(l_file, "C:\Users\vevo\branches\Vivado_IP\repo\testing_data\color_out.txt", write_mode);
wait until clk128_tb = '1';
print(l_file, "R G B" );
if(color_out_v = '1') then
report "Color_out";
write(my_line, integer'(to_integer(color_out(0).R)));
write(my_line, integer'(to_integer(color_out(0).G)));
write(my_line, integer'(to_integer(color_out(0).B)));
writeline(l_file, my_line);
report "write line";
end if;
file_close(l_file);
end process;
【问题讨论】:
-
欢迎来到 SO。如果您提供了一些minimally reproduced your problem 的代码,将会有所帮助;相反,我不得不添加很多代码并取出很多代码,只是为了让您的代码编译和运行。完成that 后,我认为没有问题 - 它写入一个文件,其中包含我预期的内容。那么为什么要在我的文件中获取一些内容呢?我必须注释掉的一行是
if(color_out_v = '1') then;显而易见的建议是color_out_v永远不是1。如果你提供了 MCVE,我可以检查一下。 -
顺便说一句:
integer'(to_integer中的限定是多余的:to_integer返回一个integer;编译知道这一点,所以不需要限定。 -
@Matthew Taylor:我注意到了未来的评论。我一直觉得我应该尽可能少地编写代码以提高可读性。 color_out_v 变成 '1' 非常好,我相信如果没有,报告“写行”也不会发生。如果它适合你,我可能有一个我不知道的系统问题。
-
为了可读性而加入尽可能少的代码是一件非常好的事情,但是与其把能够编译的东西拿出来,不如把没什么可编译的东西拿出来解决问题。这样,其他人可以轻松运行您的代码并轻松重现您的问题。还有另一个优势:将代码缩减到此 MCVE 的行为可能使您能够自己发现问题。无论如何,在这种情况下,我认为这将是一个好主意:您可以自己解决问题;如果没有,如何发布你最终得到的代码? ...
-
...所以问题出在有一行代码,我将其注释掉以使其编译。
标签: vhdl vivado test-bench