Quartus软件工具向来都比较容易上手,尤其是提供了一些辅助工具,用起来非常方便。本文介绍一个Quartus工具支持但是ISE/Vivado不支持的小功能,并给出Vivado的实现方案,让Xilinx FPGA的开发/使用也更加便利。
在使用FPGA做设计的时候,有时候的一些场景,不太适合仿真来进行验证。比如:
1.已经完成了仿真,需要上板测试获取结果和仿真结果做对比,验证设计实现的正确性,自然就不能再用仿真来对比仿真结果;
2.一些接口的仿真,比如外界DAC测试,仿真只能到FPGA的output pin,无法涵盖PCB的走线部分和DAC的处理,也就无法验证DAC是否能正常工作。
这种需求都是要求上板测试的。这种测试工程,通常并不复杂,上板测试也不是非常麻烦。不过有一个需要考虑的问题,就是数据源。
仿真的数据源可以写死在testbench中,但更常用的方法是写在文件中,由testbench读文件来获取数据源。上板实测的问题就是,测试数据源从哪里来。
通常有如下几个方案
1.做一个高速接口,比如PCIE、以太网;
2.做一个低速接口,比如RS232;
3.存在BRAM中。
高速接口的问题是过于复杂,首先需要等接口完成(设计、验证通过)才能开始测试,其次引入新的接口,也引入了新的问题源;低速接口的问题是速度过慢,可能内部的逻辑需要工作在100MHz以上但接口速度只有几KHz,而等待低速接口的数据也无法验证完整的数据流工作。毕竟,FPGA更适合连续的流水线工作而不是等待。
所以BRAM的方案成了一个不错的选择。将数据存在BRAM中,读取BRAM中数据的操作,数据时钟可以直接使用真实时钟,数据也可以连续输出。由于测试工程通常都不是完整工程,BRAM资源通常也不是大问题。
不过BRAM也带来一个问题:数据源的更新。如果需要更换数据源,该怎么办呢?
1.重新跑工程生成bit文件,缺点是太麻烦了,而且重跑工程有时序不过的风险;
2.在线更新BRAM内容。
由于大部分FPGA的BRAM都是双口RAM,所以可以利用BRAM的一个端口来更新BRAM内容,另一个端口来读取BRAM内容作为测试数据源。暂时看起来是个不错的方案。
那么,更新BRAM,应该如何操作呢?