xapp1151_Param_CAM模块安装

所需生成模块

  • TCAM
  • CAM

下载链接

赛灵思技术支持网站:http://www.xilinx.com/support.html

并在网页中搜索xapp1151,下载xapp1151_Param_CAM.zip,如下图所示

安装过程

1、在任意一个目录下,解压xapp1151_Param_CAM.zip

unzip xapp1151_Param_CAM.zip

并将reference_router_nf1_cml文件下的patches文件夹复制到刚刚解压的xapp1151_Param_cam目录下

cp -r patches <path>/xapp1151_cam_v1_1/

然后需添加一下ISE的路径信息

source <ISE_POSIZITION>/ISE_DS/settings64.sh

然后进入patches目录执行cam_patch.sh文件,打一些补丁

cd <path>/xapp1151_cam_v1_1/patches/
sh cam_patch.sh

笔者这里遇到了一个问题,错误提示如下

wpq@wpq:~/Downloads/xapp1151_cam_v1_1/patches$ sh cam_patch.sh
Invalid file name ../implement/CustomizeWrapper.pl -- skipping patch
Invalid file name ../implement/vhdl_xst.scr -- skipping patch
Invalid file name ../src/vhdl/cam_pkg.vhd -- skipping patch
Invalid file name ../src/vhdl/cam_control.vhd -- skipping patch
Invalid file name ../src/vhdl/cam_mem_blk.vhd -- skipping patch
Invalid file name ../src/vhdl/cam_mem_blk_extdepth_prim.vhd -- skipping patch
Invalid file name ../src/vhdl/cam_rtl.vhd -- skipping patch

查看了问题缺少了文件,笔者也觉得很纳闷,于是尝试着修改cam_patch.sh把这相对路径改成绝对路径,如下

patch /home/wpq/Downloads/xapp1151_cam_v1_1/implement/CustomizeWrapper.pl CustomizeWrapper.pl.patch
patch /home/wpq/Downloads/xapp1151_cam_v1_1/implement/vhdl_xst.scr vhdl_xst.scr.patch
patch /home/wpq/Downloads/xapp1151_cam_v1_1/src/vhdl/cam_pkg.vhd cam_pkg.vhd.patch
patch /home/wpq/Downloads/xapp1151_cam_v1_1/src/vhdl/cam_control.vhd cam_control.vhd.patch
patch /home/wpq/Downloads/xapp1151_cam_v1_1/src/vhdl/cam_mem_blk.vhd cam_mem_blk.vhd.patch
patch /home/wpq/Downloads/xapp1151_cam_v1_1/src/vhdl/cam_mem_blk_extdepth_prim.vhd cam_mem_blk_extdepth_prim.vhd.patch
patch /home/wpq/Downloads/xapp1151_cam_v1_1/src/vhdl/cam_rtl.vhd cam_rtl.vhd.patch

此时在执行cam_patch.sh文件成功解决,如下

wpq@wpq:~/Downloads/xapp1151_cam_v1_1/patches$ sh cam_patch.sh
patching file /home/wpq/Downloads/xapp1151_cam_v1_1/implement/vhdl_xst.scr
patching file /home/wpq/Downloads/xapp1151_cam_v1_1/src/vhdl/cam_pkg.vhd
patching file /home/wpq/Downloads/xapp1151_cam_v1_1/src/vhdl/cam_control.vhd
patching file /home/wpq/Downloads/xapp1151_cam_v1_1/src/vhdl/cam_mem_blk.vhd
patching file /home/wpq/Downloads/xapp1151_cam_v1_1/src/vhdl/cam_mem_blk_extdepth_prim.vhd
patching file /home/wpq/Downloads/xapp1151_cam_v1_1/src/vhdl/cam_rtl.vhd

2、CAM模块生成

执行以下命令,并填入如下所示参数:

cd <path>/xapp1151_cam_v1_1/implement
xilperl CustomizeWrapper.pl You need to specify several parameters. To choose those options, see follows: ***************************************************************
CAM Reference Design Customizer v1.1
*************************************************************** ***************************************************************
Please input the following parameters for the CAM:
*************************************************************** Enter the FPGA base architecture to target
Valid options are virtex4, virtex5, virtex6, virtex6l, spartan3, spartan3e, spartan3a, spartan3adsp, aspartan3, aspartan3e, spartan6, kintex7 :
kintex7 Input the CAM data width. Valid values are 1-512:
32 Input the CAM depth. Valid values are 16-4096:
32 Enter the CAM memory type to implement
(Choose SRL-based if you need a Ternary or Enhanced Ternary mode CAM)
0 = SRL-based, 1 = BRAM-based: 0 Choose the Ternary Mode setting.
0 = Ternary Mode Off, 1 = Standard Ternary Mode, 2 = Enhanced Ternary Mode: 1 Will the CAM be write-able (WE pin)? (If no, CAM will be read-only) (y/n): y Use a MIF file to initialize the memory contents? (y/n): n Choose what type of encoding the MATCH_ADDR port will have.
0 = Binary Encoded, 1 = Single Match Unencoded (one-hot), 2 = Multi-match Unencoded: 1 For Binary Encoded or Single Match Unencoded MATCH_ADDR, output lowest address match or highest address match?
0 = Lowest, 1 = Highest: 0 Please select the optional features to be implemented:
Simultaneous Read/Write (y/n): y Please select from the following optional input ports:
Enable (EN) (y/n): n Please select from the following optional output ports:
Multiple Match Flag (MULTIPLE_MATCH) (y/n): n
Single Match Flag (SINGLE_MATCH) (y/n): n
Read Warning Flag (READ_WARNING) (y/n): n After the selections the parameters should be as follows: VHDL parameters were generated as follows:
===============================================
C_FAMILY : string := kintex7;
C_MEM_TYPE : integer := 0;
C_WIDTH : integer := 32;
C_DEPTH : integer := 32;
C_ADDR_TYPE : integer := 1;
C_MATCH_RESOLUTION_TYPE : integer := 0;
C_TERNARY_MODE : integer := 1;
C_HAS_WE : integer := 1;
C_MEM_INIT : integer := 0;
C_HAS_CMP_DIN : integer := 1;
C_REG_OUTPUTS : integer := 0;
C_HAS_EN : integer := 0;
C_HAS_MULTIPLE_MATCH : integer := 0;
C_HAS_SINGLE_MATCH : integer := 0;
C_HAS_READ_WARNING : integer := 0; ===============================================

查看相同目录下的vhdl_xst.scr文件,并将-ofn ./results/cam.ngc改成```-ofn ./results/tcam.ngc``,如下所示

run
-ifmt VHDL
-work_lib cam
-p xc7k325tffg676-1
-write_timing_constraints No
-ifn vhdl_xst.prj
-iobuf NO
-max_fanout 100
-ofn ./results/tcam.ngc
-ofmt NGC
-bufg 1
-bus_delimiter ()
-hierarchy_separator /
-case Maintain
-opt_mode Speed
-opt_level 1
-loop_iteration_limit 5000
-use_new_parser yes

然后执行

xilperl RunXST.pl

3、修改Verilog代码

执行以下命令,生成对应的verilog代码

cd results
netgen -sim -ofmt verilog tcam.ngc

修改生成的tcam.v文件

  • 将代码中的模块名cam_wrapper改成tcam

  • 在端口声明后(即在output下一句,wire上一句),加入以下语句,虽然此句为注释,但必须得加上去,不然后续步骤会报错,笔者亲身踩坑

    // synthesis translate_off
  • cam_wrapper(上面我们已经改名为tcam)的endmodule前面加入以下语句

    // synthesis translate_on

4、将生成的文件复制到NetFPGA-1G-CML-live的相应目录下

执行以下命令,创建netlist目录

mkdir -p $(NF10_ROOT_DIRECTORY)/lib/hw/std/pcores/nf10_router_output_port_lookup_v1_00_a/netlist

tcam.ngc复制到刚刚创建的netlist目录

cp tcam.ngc $(NF_ROOT)/lib/hw/std/pcores/nf10_router_output_port_lookup_v1_00_a/netlist

tcam.v复制到对应的verilog目录下

cp tcam.v $(NF_ROOT)/lib/hw/std/pcores/nf10_router_output_port_lookup_v1_00_a/hdl/verilog

5、生成第二个cam模块,具体步骤与上述1-4步骤相似,只是一些参数不同

xilperl CustomizeWrapper.pl 

You need to specify several parameters. To choose those options, see follows:

***************************************************************
CAM Reference Design Customizer v1.1
*************************************************************** ***************************************************************
Please input the following parameters for the CAM:
*************************************************************** Enter the FPGA base architecture to target
Valid options are virtex4, virtex5, virtex6, virtex6l, spartan3, spartan3e, spartan3a, spartan3adsp, aspartan3, aspartan3e, spartan6, kintex7 :
kintex7 Input the CAM data width. Valid values are 1-512:
32 Input the CAM depth. Valid values are 16-4096:
32 Enter the CAM memory type to implement
(Choose SRL-based if you need a Ternary or Enhanced Ternary mode CAM)
0 = SRL-based, 1 = BRAM-based: 1 NOTE: BRAM-based CAMs do not support Ternary Modes.
Setting C_TERNARY_MODE = 0 ... Will the CAM be write-able (WE pin)? (If no, CAM will be read-only) (y/n): y Use a MIF file to initialize the memory contents? (y/n): n Choose what type of encoding the MATCH_ADDR port will have.
0 = Binary Encoded, 1 = Single Match Unencoded (one-hot), 2 = Multi-match Unencoded: 1 For Binary Encoded or Single Match Unencoded MATCH_ADDR, output lowest address match or highest address match?
0 = Lowest, 1 = Highest: 0 Please select the optional features to be implemented:
Simultaneous Read/Write (y/n): y
Register Outputs (y/n): n Please select from the following optional input ports:
Enable (EN) (y/n): n Please select from the following optional output ports:
Multiple Match Flag (MULTIPLE_MATCH) (y/n): n
Single Match Flag (SINGLE_MATCH) (y/n): n
Read Warning Flag (READ_WARNING) (y/n): n After the selections the parameters should be as follows: VHDL parameters were generated as follows:
===============================================
C_FAMILY : string := kintex7;
C_MEM_TYPE : integer := 1;
C_WIDTH : integer := 32;
C_DEPTH : integer := 32;
C_ADDR_TYPE : integer := 1;
C_MATCH_RESOLUTION_TYPE : integer := 0;
C_TERNARY_MODE : integer := 0;
C_HAS_WE : integer := 1;
C_MEM_INIT : integer := 0;
C_HAS_CMP_DIN : integer := 1;
C_REG_OUTPUTS : integer := 0;
C_HAS_EN : integer := 0;
C_HAS_MULTIPLE_MATCH : integer := 0;
C_HAS_SINGLE_MATCH : integer := 0;
C_HAS_READ_WARNING : integer := 0; ===============================================

修改vhdl_xst.scr文件,如下所示

run
-ifmt VHDL
-work_lib cam
-p xc7k325tffg676-1
-write_timing_constraints No
-ifn vhdl_xst.prj
-iobuf NO
-max_fanout 100
-ofn ./results/cam.ngc
-ofmt NGC
-bufg 1
-bus_delimiter ()
-hierarchy_separator /
-case Maintain
-opt_mode Speed
-opt_level 1
-loop_iteration_limit 5000
-use_new_parser yes

然后执行

xilperl RunXST.pl

生成verilog代码

cd results
netgen -sim -ofmt verilog cam.ngc

修改verilog代码

  • 将代码中的模块名cam_wrapper改成cam

  • 在端口声明后(即在output下一句,wire上一句),加入以下语句,虽然此句为注释,但必须得加上去,不然后续步骤会报错,笔者亲身踩坑

    // synthesis translate_off
  • cam_wrapper(上面我们已经改名为tcam)的endmodule前面加入以下语句

    // synthesis translate_on

复制文件

cp cam.ngc $(NF_ROOT)/lib/hw/std/pcores/nf10_router_output_port_lookup_v1_00_a/netlist
cp cam.v $(NF_ROOT)/lib/hw/std/pcores/nf10_router_output_port_lookup_v1_00_a/hdl/verilog

xapp1151_Param_CAM模块安装的更多相关文章

  1. python安装、模块安装

    python安装 windows 下载安装包 https://www.python.org/downloads 改环境变量 [右键计算机]-->[属性]-->[高级系统设置]-->[ ...

  2. python3 中mlpy模块安装 出现 failed with error code 1的决绝办法(其他模块也可用本方法)

    在python3 中安装其它模块时经常出现 failed with error code 1等状况,使的安装无法进行.而解决这个问题又非常麻烦. 接下来以mlpy为例,介绍一种解决此类安装问题的办法. ...

  3. [转] npm 模块安装机制简介

    npm 是 Node 的模块管理器,功能极其强大.它是 Node 获得成功的重要原因之一. 正因为有了npm,我们只要一行命令,就能安装别人写好的模块 . $ npm install 本文介绍 npm ...

  4. npm 模块安装机制简介

    npm 是 Node 的模块管理器,功能极其强大.它是 Node 获得成功的重要原因之一. 正因为有了npm,我们只要一行命令,就能安装别人写好的模块 . $ npm install 本文介绍 npm ...

  5. Mac MySQLdb模块安装,可算解决了

    转载:http://blog.csdn.net/janronehoo/article/details/25207825 短评:这篇文章感觉是比较全面解决Mac MySQLdb模块安装问题的文章了,特别 ...

  6. perl模块安装

    转自: http://www.cnblogs.com/itech/archive/2009/08/10/1542832.html http://www.mike.org.cn/blog/index.p ...

  7. 详解npm的模块安装机制 --社会我npm哥,好用话不多

      依赖树表面的逻辑结构与依赖树真实的物理结构 依赖树表面的逻辑结构与依赖树真实的物理结构并不一定相同! 这里要先提到两个命令:tree -d(linux)和npm ls(npm) 在一个npm项目下 ...

  8. python机器学习模块安装

    环境:RHEL6.5 离线安装 ############################################################################ 一,本地yum ...

  9. Python下载、环境变量配置、 模块安装方法

    下载 Windows版官网下载地址:https://www.python.org/downloads/windows/ 类似下图以 installer结尾的文件就是我们需要下载的,位数根据自己的电脑进 ...

随机推荐

  1. 【CJOJ P2110】YL杯超级篮球赛

    [CJOJ P2110]YL杯超级篮球赛 Description 一年一度的高一YL杯超级篮球赛开赛了.当然,所谓超级的意思是参赛人数可能多于5人.小三对这场篮球赛非常感兴趣,所以一场都没有落下.每天 ...

  2. iBrand 教程 0.1:Windows + Homestead 5 搭建 Laravel 开发环境

    统一开发环境 为了保证在学习和工作过程中避免因为开发环境不一致而导致各种各样的问题,Laravel 官方为了我们提供了一个完美的开发环境 Laravel Homestead,让我们无需再本地安装 PH ...

  3. Java 多线程异步处理demo

    java中实现多线程 1)继承Thread,重写里面的run方法 2)实现runnable接口通过源码发现:第一种方法说是继承Tread然后重写run方法,通过查看run方法的源码,发现run方法里面 ...

  4. 在 HTML5 中捕获音频和视频

    简介 长久以来,音频/视频捕获都是网络开发中的"圣杯".多年来,我们总是依赖于浏览器插件(Flash 或 Silverlight)实现这一点.快来看看吧! 现在轮到 HTML5 大 ...

  5. Python的Argparse模块是什么?(未完)

            近日在阅读代码的过程中遇到了Argparse模块,记得前段时间已经看了,可是过了两周现在又忘了, 看来写代码一定要钻研到底搞清楚其中原委才行,本文主要参考Python3.6系列官方文档 ...

  6. 【前端单元测试入门03】Sinon

    前端测试存在的问题 在讲Sinon之前,我们得先讲一下在学习了Mocha.chai以及enzyme之后,我们的前端测试还存在的一些问题. 比如前台测试需要与后台交互,获取后台数据后再根据相应数据进行测 ...

  7. web 直播&礼物赠送------腾讯云(四)

    直播项目搁置了将近1年,以为都搁浅了,没想到头头又提起来了,这次直播技术更替为了腾讯云,消息系统没变,采用的依然是融云,新增了礼物赠送功能. 项目完成基本就是这样子: 一,播放器 由阿里云转腾讯云,w ...

  8. python 全栈开发,Day4(正式)

    一.列表 列表是python中的基础数据类型之一,它是以[]括起来,每个元素以逗号隔开,而且他里面可以存放各种数据类型比如: li = ['alex',123,Ture,(1,2,3,'wusir') ...

  9. 方法的重写与重载的区别(Override与Overload)。重载的方法是否可以改变返回值的类型

    方法的重写(Override)与重载(Overload)的区别.重载的方法是否可以改变返回值的类型?[基础] 解释: 方法的重写overriding和重载Overloading是Java多态性的不同表 ...

  10. Java 常用单词

    1.Object-Oriented ['əbdʒekt'ɔ:rɪəntɪd] 面向对象 adj 2.inheritance  [ɪnˈherɪtəns]  继承;遗传;遗产 n inherit  [ɪ ...