根据最近接手的一个case,整理一下如何使用BFM来做仿真。

很多时候,当你只想要仿真一个外设IP的时候,你该如何来做呢?IBM的coreconnect技术确实是很人性化以及强大。可以让你单独的来仿真一个外设IP,给你一个虚拟的总线,一个虚拟的CPU,然后将你需要仿真的IP,挂到这条总线上,以及让用户自己来产生激励,从此你无需为了真实的仿真一个外设IP,而去仿真整个庞大的系统。其中BFM就是这样的一个工具。

打开edk,选择hardware-->Create or Import Peripheral,新建一个IP,比如称之为bfm_example_v1_00_a,然后一步,一步下去,直到某一步问你是否需要生成基于Modelsim的BFM仿真模型,选上这个勾。

然后一步一步,根据你自己IP的需要来设置,这里使用默认值。最后会生成两个目录,一个pcores,一个drivers,内部都是名字为bfm_examples_v1_00_a的目录。

进入pcoresbfm_examples_a_v1_00_adevlbfmsim目录,其中有edk的工程,打开这个工程,
然后hardware-->generate netlist, 其实这个命令不是为了生成netlist,而是生成仿真需要的bfm_system_incl.make这个文件。

然后进入edk的xbash终端,输入:
make -f bfm_sim_xps.make sim
它就会自动的运行起来,最后调用modelsim来仿真你的这个IP。如下图:

如果你出现这样的问题:
error: file not in any repository \'bfm_example_v1_00_a/hdl/vhdl/user_logic.vhd\'
这样的字样,说明你想测试的这个IP当前的edk工程找不到。你可以先在bfm_examples_v1_00_adevlbfmsim pcores目录中新建一个目录,命名为bfm_example_v1_00_a,然后将,上层目录bfm_examples_v1_00_a这个目 录中的data目录和hdl目录一起复制到,bfm_examples_v1_00_adevl\bfmsimpcores bfm_example_v1_00_a目录中。之后运行就没有问题了。

另外你在跑bfm的时候,需要单独安装bfm的支持包,它没有包括在xilinx edk的发行版中,因为它需要一个单独的license,你可以去网站上申请,一般一个工作日就会通过,之后你就可以下载使用了。

我做了两个例子,放在我的网盘上了。拿到之后可以直接运行(打开bfm_examples_v1_00_adevlbfmsim目录下的edk工程,打开xbash终端,输入make -f bfm_sim_xps.make sim)

edk10.1的工程见
https://dl.getdropbox.com/u/1789085/xilinx/xup_materials/bfm_example_101.zip

edk91的工程见
https://dl.getdropbox.com/u/1789085/xilinx/xup_materials/bfm_example91.zip