FIR Compiler C-model如何设置参数

部署运行你感兴趣的模型镜像

点击蓝字关注我们

关注、星标公众号,精彩内容每日送达
来源:网络素材

不少用户, 在使用FIR Compiler IP提供的C-model, 不确定如何配置C-model的参数, 和Vivado IP catalog里的FIR Compiler IP参数匹配。这篇blog介绍如何配置C-model参数和IP匹配。

首先, C-model本身提供了例子“run_fir_compiler_v7_2_mex.m”, 这个例子提供了几个example, 来演示如何设置参数。

示例1: fir1 = fir_compiler_v7_2_bitacc()

这个例子使用缺省参数。

示例2: fir2 = fir_compiler_v7_2_bitacc('reloadable',1)

rld_coeff = [-238 -1022 -1506 878 7844 16526 20564 16526 7844 878 -1506 -1022 -238 -238 -1022 -1506 878 7844 16526 20564];

reload_send(fir2,struct('fsel',0,'coeff',rld_coeff));

config_send(fir2,struct('fsel',[0]));

这个例子演示如何reload新系数。

示例3:

fir3 = fir_compiler_v7_2_bitacc('filter_type',1,'interp_rate',2,'num_channels',2)

这个例子演示设置filter类型, interpolating rate, number of channels。

示例4: coeff = cfirpm(fl,f,@lowpass);

fir4=fir_compiler_v7_2_bitacc('coeff',coeff,'num_coeffs',fl+1,'coeff_width',16,'coeff_fract_width',15,'data_width',16,'data_fract_width',14)

这个例子演示设置系数, 系数个数, 系数位宽, 小数点位置, 数据位宽, 数据小数点位置。

上面这些例子示例了如何设置C-model参数, 但是, 这些参数的名字是从哪里来的. 这是一个问题, 我们可以在C-model里的“fir_compiler_v7_2_bitacc_cmodel.h” 找到这些参数, 见下:

typedef struct

{

const char* name; //@- Instance name to use in error/warning reporting

unsigned int filter_type; //@- Select from: XIP_FIR_SINGLE_RATE, XIP_FIR_INTERPOLATION, XIP_FIR_DECIMATION, XIP_FIR_HILBERT, XIP_FIR_INTERPOLATED

unsigned int rate_change; //@- Select from: XIP_FIR_INTEGER_RATE, XIP_FIR_FRACTIONAL_RATE

unsigned int interp_rate; //@- Specifies the interpolation (or up-sampling) factor

unsigned int decim_rate; //@- Specifies the decimation (or down-sampling) factor

unsigned int zero_pack_factor; //@- Specifies the zero packing factor for Interpolated filters

const double* coeff; //@- Pointer to coefficient array

unsigned int coeff_padding; //@- Specifies the amount zero padding added to the front of the filter

unsigned int num_coeffs; //@- Specifies the number of coefficients in one filter

unsigned int coeff_sets; //@- Specifies the number of coefficient sets in the coeff array

unsigned int reloadable; //@- Specifies if the coefficients are reloadable; 0 = No, 1 = Yes

unsigned int is_halfband; //@- Specifies if halfband coefficients have been used; 0 = No, 1 =Yes

unsigned int quantization; //@- Specifies how the coeff array should quantized, select from: XIP_FIR_INTEGER_COEFF, XIP_FIR_QUANTIZED_ONLY, XIP_FIR_MAXIMIZE_DYNAMIC_RANGE

unsigned int coeff_width; //@- Used to quantize the supplied coefficients.

unsigned int coeff_fract_width; //@- Used to quantize the supplied coefficients.

unsigned int chan_seq; //@- Specifies the channel sequence type, select from: XIP_FIR_BASIC_CHAN_SEQ, XIP_FIR_ADVANCED_CHAN_SEQ

unsigned int num_channels; //@- Specifies the number of data channels supported

xip_fir_v7_2_pattern init_pattern; //@- Specifies the initial channel pattern used by the core

unsigned int num_paths; //@- Specifies the number of data paths supported

unsigned int data_width; //@- Used to quantize the input data

unsigned int data_fract_width; //@- Used to quantize the input data

unsigned int output_rounding_mode; //@- Select from: XIP_FIR_FULL_PRECISION, XIP_FIR_TRUNCATE_LSBS, XIP_FIR_SYMMETRIC_ZERO, XIP_FIR_SYMMETRIC_INF, XIP_FIR_CONVERGENT_EVEN, XIP_FIR_CONVERGENT_ODD, XIP_FIR_NON_SYMMETRIC_DOWN, XIP_FIR_NON_SYMMETRIC_UP

unsigned int output_width; //@- Ignored when XIP_FIR_FULL_PRECISION

unsigned int output_fract_width; //@- READ ONLY: Provides the number of fractional bits present in output word

unsigned int config_method; //@- Specifies the form of the configuration packets, select from: XIP_FIR_CONFIG_SINGLE, XIP_FIR_CONFIG_BY_CHANNEL

} xip_fir_v7_2_config;

C-Model需要设置的参数名字定义在xip_fir_v7_2_config。

这里还有一个问题, 比如filter type这个参数, 在 xip_fir_v7_2_config可以看到, 这个参数能够设置的值为XIP_FIR_SINGLE_RATE, XIP_FIR_INTERPOLATION, XIP_FIR_DECIMATION, XIP_FIR_HILBERT, XIP_FIR_INTERPOLATED, 但是, 这些值是如何对应为0,1,2, 3等这些数值的. 这些, 也都可以在“fir_compiler_v7_2_bitacc_cmodel.h”这个头文件找到 . 见下:

/**

* Filter Types

*/

#define XIP_FIR_SINGLE_RATE 0

#define XIP_FIR_INTERPOLATION 1

#define XIP_FIR_DECIMATION 2

#define XIP_FIR_HILBERT 3

#define XIP_FIR_INTERPOLATED 4

希望这篇文章对设置C-model参数有些帮助。

a05fa970974a60fd6e8c3b8c4b571e43.jpeg

想要了解FPGA吗?这里有实例分享,ZYNQ设计,关注我们的公众号,探索

您可能感兴趣的与本文相关的镜像

Kotaemon

Kotaemon

AI应用

Kotaemon 是由Cinnamon 开发的开源项目,是一个RAG UI页面,主要面向DocQA的终端用户和构建自己RAG pipeline

# Reading D:/fpga/men/tcl/vsim/pref.tcl # // ModelSim SE-64 10.4 Dec 3 2014 # // # // Copyright 1991-2014 Mentor Graphics Corporation # // All Rights Reserved. # // # // THIS WORK CONTAINS TRADE SECRET AND PROPRIETARY INFORMATION # // WHICH IS THE PROPERTY OF MENTOR GRAPHICS CORPORATION OR ITS # // LICENSORS AND IS SUBJECT TO LICENSE TERMS. # // THIS DOCUMENT CONTAINS TRADE SECRETS AND COMMERCIAL OR FINANCIAL # // INFORMATION THAT ARE PRIVILEGED, CONFIDENTIAL, AND EXEMPT FROM # // DISCLOSURE UNDER THE FREEDOM OF INFORMATION ACT, 5 U.S.C. SECTION 552. # // FURTHERMORE, THIS INFORMATION IS PROHIBITED FROM DISCLOSURE UNDER # // THE TRADE SECRETS ACT, 18 U.S.C. SECTION 1905. # // # do {ad4249.fdo} # ** Warning: (vlib-34) Library already exists at "work". # # Model Technology ModelSim SE-64 vcom 10.4 Compiler 2014.12 Dec 3 2014 # Start time: 22:45:07 on May 05,2025 # vcom -reportprogress 300 -explicit -93 ipcore_dir/fir_ip.vhd # -- Loading package STANDARD # -- Loading package TEXTIO # -- Loading package std_logic_1164 # -- Compiling entity fir_ip # -- Compiling architecture fir_ip_a of fir_ip # -- Loading package bip_utils_pkg_v2_0 # -- Loading package NUMERIC_STD # -- Loading package std_logic_textio # -- Loading package fir_compiler_v5_0_sim_pkg # -- Loading package ul_utils # -- Loading package fir_compiler_v5_0_sim_comps # -- Loading entity fir_compiler_v5_0 # End time: 22:45:07 on May 05,2025, Elapsed time: 0:00:00 # Errors: 0, Warnings: 0 # Model Technology ModelSim SE-64 vcom 10.4 Compiler 2014.12 Dec 3 2014 # Start time: 22:45:07 on May 05,2025 # vcom -reportprogress 300 -explicit -93 ipcore_dir/fir_ip_2.vhd # -- Loading package STANDARD # -- Loading package TEXTIO # -- Loading package std_logic_1164 # -- Compiling entity fir_ip_2 # -- Compiling architecture fir_ip_2_a of fir_ip_2 # -- Loading package bip_utils_pkg_v2_0 # -- Loading package NUMERIC_STD # -- Loading package std_logic_textio # -- Loading package fir_compiler_v5_0_sim_pkg # -- Loa
05-06
### 解决DRC NDRV-1驱动网络问题在FIR编译器中的应用 在使用FIR(Finite Impulse Response)编译器进行设计时,如果遇到DRC NDRV-1错误,表示某些网络未被正确驱动。这种情况通常发生在顶层设计中存在未连接的端口或信号的情况下[^1]。以下内容详细说明了如何解决这一问题。 #### 1. 分析NDRV-1错误的根本原因 NDRV-1错误表明某些网络没有被驱动,这可能由以下原因引起: -FIR编译器生成的模块中,某些输出端口未被顶层模块正确连接。 - 设计中存在悬空信号,这些信号未被分配到任何实际逻辑。 - 综合或实现过程中,某些信号因优化而被移除,但仍有其他部分依赖这些信号。 #### 2. 检查未驱动网络的具体方法 为了定位具体哪些网络未被驱动,可以使用以下TCL命令来列出所有未驱动的网络: ```tcl foreach net [get_nets] { if {[llength [get_pins -of_objects $net -filter "DIRECTION==OUT"]] == 0} { puts "$net is driverless" } } ``` 通过运行上述脚本,可以明确识别出哪些网络未被驱动,并进一步分析其来源[^1]。 #### 3. 解决方案 以下是几种常见的解决方法: - **确保所有端口均被正确连接**:检查FIR编译器生成的模块与顶层模块之间的连接关系,确保所有输入和输出端口均被正确连接。如果某些端口暂时不需要使用,可以通过将它们连接到固定的逻辑值来避免此错误。例如,在Verilog中可以使用以下代码: ```verilog assign unused_port = 1'b0; ``` - **忽略特定DRC检查**:如果确认未驱动的网络不会影响设计功能,可以通过设置DRC检查的严重性级别为警告来忽略该错误。例如: ```tcl set_property SEVERITY {Warning} [get_drc_checks NDRV-1] ``` 需要注意的是,这种方法仅适用于明确知道未驱动网络不会对设计造成影响的情况[^2]。 - **利用TCL脚本自动修复**:对于复杂设计,可以编写TCL脚本来自动查找并处理未驱动的网络。例如,以下脚本可以将所有未驱动的网络连接到固定的逻辑值: ```tcl foreach net [get_nets] { if {[llength [get_pins -of_objects $net -filter "DIRECTION==OUT"]] == 0} { set_property CONSTANT_VALUE 0 [get_nets $net] set_property IS_CONSTANTS true [get_nets $net] } } ``` #### 4. 技术文档参考 为了进一步了解NDRV-1错误及其解决方法,建议查阅以下官方文档和技术资源: - Xilinx Vivado Design Suite User Guide: Design Flows Overview[^2] - Xilinx Answer Record (AR)关于DRC错误的详细说明[^3] #### 5. 注意事项 虽然可以通过设置DRC检查的严重性级别为警告来忽略NDRV-1错误,但这并不意味着问题已完全解决。在实际应用中,应尽量避免未驱动的网络,以确保设计的可靠性和功能性[^1]。 ### 示例代码 以下是一个简单的TCL脚本示例,用于将所有未驱动的网络连接到固定的逻辑值: ```tcl foreach net [get_nets] { if {[llength [get_pins -of_objects $net -filter "DIRECTION==OUT"]] == 0} { set_property CONSTANT_VALUE 0 [get_nets $net] set_property IS_CONSTANTS true [get_nets $net] } } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值