xilinx复数乘法器的一个疑问。
时间:10-02
整理:3721RD
点击:
调用xilinx的复数乘法器IP核,我的配置如下图:


问题出在output rounding的选择上,如果选择了random rounding,AXIS_CTRL通道会作为端口,如图所示:s_axis_ctrl_tdata[7:0]例化时,到底该赋予什么样的值,这个通道到底是干什么的。如果选择了Truncate就不会有这个问题,但是,我看文档说,选择random rounding结果会更好更精确一些。知道的跟我通俗的说一说其中的缘由吧,看那个英语的说明文档看的我头疼,也看不出个所以然来。因此来论坛问一问。
本身结果是有问题的。
仿真模块中例化 top U1(
.clk(clk_w),
.rst_n(rst_n_w),
.dataa_valid(1'b1),
.dataa_i(dataa_i_w),
.dataa_r(dataa_r_w),
.datab_valid(1'b1),
.datab_i(datab_i_w),
.datab_r(datab_r_w),
.data_out_valid(),
.data_out_i(data_out_i),
.data_out_r(data_out_r)
);
top模块中例化
complex_mult MULT(
.aclk(clk), // input wire aclk
.aresetn(rst_n), // input wire aresetn
.s_axis_a_tvalid(dataa_valid), // input wire s_axis_a_tvalid
.s_axis_a_tdata({dataa_i,dataa_r}), // input wire [31 : 0] s_axis_a_tdata
.s_axis_b_tvalid(datab_valid), // input wire s_axis_b_tvalid
.s_axis_b_tdata({datab_i,datab_r}), // input wire [31 : 0] s_axis_b_tdata
.m_axis_dout_tvalid(data_out_valid), // output wire m_axis_dout_tvalid
.m_axis_dout_tdata({data_out_i,data_out_r})


问题出在output rounding的选择上,如果选择了random rounding,AXIS_CTRL通道会作为端口,如图所示:s_axis_ctrl_tdata[7:0]例化时,到底该赋予什么样的值,这个通道到底是干什么的。如果选择了Truncate就不会有这个问题,但是,我看文档说,选择random rounding结果会更好更精确一些。知道的跟我通俗的说一说其中的缘由吧,看那个英语的说明文档看的我头疼,也看不出个所以然来。因此来论坛问一问。
你不应该选axi接口,选本地
选IP的时候应该选,不带AXI4接口的
谢谢
回答,但是为什么呢,能简单的说一下吗?我看很多IP核都是AXI4形式的。
我用的软件是vivado2016,因为我做的是复数乘法,是关于数字信号处理的。我在ip catalog中输入mult这个关键词,signal processing下拉中会有一个complex multplier,就是用于复数乘法的,我就是调用的这个IP核,感觉是水到渠成,确实是AXI4的,插图上面也给出来了,没有native之类的选项,我选择了truncate(见图)选项后,就生成例化调用,仿真的结果让我傻眼了,跟自己计算的结果不同,我不知道它给的结果到底是什么意思。所有数据radix为有符号数。希望有人给指点一下,因为我看到它就是用来处理复数乘法的,当然用普通的乘法器也可以实现复数乘法,出现错误(反正我不懂给的结果是什么东西)难道是AXI4的错?
本身结果是有问题的。
仿真模块中例化 top U1(
.clk(clk_w),
.rst_n(rst_n_w),
.dataa_valid(1'b1),
.dataa_i(dataa_i_w),
.dataa_r(dataa_r_w),
.datab_valid(1'b1),
.datab_i(datab_i_w),
.datab_r(datab_r_w),
.data_out_valid(),
.data_out_i(data_out_i),
.data_out_r(data_out_r)
);
top模块中例化
complex_mult MULT(
.aclk(clk), // input wire aclk
.aresetn(rst_n), // input wire aresetn
.s_axis_a_tvalid(dataa_valid), // input wire s_axis_a_tvalid
.s_axis_a_tdata({dataa_i,dataa_r}), // input wire [31 : 0] s_axis_a_tdata
.s_axis_b_tvalid(datab_valid), // input wire s_axis_b_tvalid
.s_axis_b_tdata({datab_i,datab_r}), // input wire [31 : 0] s_axis_b_tdata
.m_axis_dout_tvalid(data_out_valid), // output wire m_axis_dout_tvalid
.m_axis_dout_tdata({data_out_i,data_out_r})
我也遇到了这种问题,不知道你解决了吗
出现错误,可能的原因是输出端口的位数没有选好,设置不同的话,可能导致输出结果集体缩小,比如输出结果很可能是缩小两倍的结果。我弄过,是有这个问题,结果集体缩小,跟设置,还有输出位数的选择有关,仿真修正修正就好了,没有什么大问题。
