带axi接口的绝对值

问题描述 投票:0回答:1

我有一个干涉仪波,想要纠正它,我的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 

结束模块 `

verilog system-verilog
1个回答
0
投票
  • 清理、删除无用代码、对齐

  • 更改代码以使其可以编译
    删除程序块中的分配语句。 将程序块驱动的变量更改为 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
© www.soinside.com 2019 - 2024. All rights reserved.