用vivado2019.2建立工程,工程中调用cordic IP核进行atan求解,功能仿真时正常且满足要求;综合时正常;实现时报错提示多重驱动。
如果经cordic计算后的输出值不用于后续的操作,只将该值引出,则能通过实现。如果将cordic输出值经寄存器打拍后再输出,能进行实现,但是message有电路警告,仍旧提示多重驱动。
本工程中,将cordic计算后的输出值用于 1、数值范围判断(if...else...);2、做位拼接,拼接后的数据用于做加。
问题:不知道什么原因,IP核不应该有这种问题吧,但是回看自己的工程代码,也不觉得哪里有问题,目的是要把计算结果用于后续操作,并没有对将其作为操作数进行赋值。
当局者迷,敬请各前辈赐教!
调用cordic ip的代码模块如下:
`timescale 1ns/1ps
module cordic_rad
( input wire i_clk,
input wire i_en,
input wire signed [ 8:0] i_xin,
input wire signed [ 8:0] i_yin,
output wire o_data_valid,
output wire signed [15:0] o_theta_rad
);
wire signed [ 8:0] w_x_in;
wire [31:0] w_y_in_x_in;
assign w_x_in = i_yin == 9'b0_0000_0000 ? 16'sd1 : i_xin;
assign w_y_in_x_in = {{7{i_yin[8]}}, i_yin, {7{w_x_in[8]}}, w_x_in};
//手动扩位处理,保持与cordic ip输入数据位宽要求一致
cordic_0 cordic_0_inst (
.aclk (i_clk), // input wire aclk
.s_axis_cartesian_tvalid (i_en), // input wire s_axis_cartesian_tvalid
.s_axis_cartesian_tdata (w_y_in_x_in), // input wire [31 : 0] s_axis_cartesian_tdata
.m_axis_dout_tvalid (o_data_valid),// output wire m_axis_dout_tvalid
.m_axis_dout_tdata (o_theta_rad) // output wire [15 : 0] m_axis_dout_tdata
);
endmodule
cordic ip配置页面如下:
vivado message窗口,实现时报错信息截图如下:
RTL视图多重驱动的信号线截图如下:
附加,综合时关于cordic ip的一些警告信息,如下:
2
举报
举报
举报
更多回帖