我有一个干涉仪波,想要纠正它,我的abs_value代码无法正常工作。
这段代码有什么问题?
``时间刻度1ns / 1ps
模块abs(
input clk,
output [15:0] m_axis_tdata,
input m_axis_tready,
output m_axis_tvalid,
input[15:0] s_axis_tdata,
output s_axis_tready,
input s_axis_tvalid
);
always@(posedge clk)
begin
if(m_axis_tready && s_axis_tvalid)begin
assign m_axis_tdata = (s_axis_tdata< 0) ? -s_axis_tdata :s_axis_tdata;
end
end
结束模块 `
清理、删除无用代码、对齐
更改代码以使其可以编译
删除程序块中的分配语句。
将程序块驱动的变量更改为 reg。
通过更改与分配的运算符相关的所有内容来更改代码以处理带符号的数字(在这种情况下<) to be signed.
请参阅[SystemVerilog][1]
`timescale 1ns / 1ps
module abs(
// inputs
input clk,
input m_axis_tready,
input signed [15:0] s_axis_tdata,
input s_axis_tvalid,
// outputs
output reg signed [15:0] m_axis_tdata
);
always@(posedge clk)
if(m_axis_tready && s_axis_tvalid)
m_axis_tdata <= (s_axis_tdata < 32'sb0) ? -s_axis_tdata :s_axis_tdata;
endmodule
``
[1]: https://ieeexplore.ieee.org/document/8299595