2021-09-22 23:07:13 +08:00
|
|
|
module div_signed(
|
2021-09-24 16:37:47 +08:00
|
|
|
input aclk,
|
2021-09-22 23:07:13 +08:00
|
|
|
input s_axis_dividend_tvalid,
|
|
|
|
input [31:0] s_axis_dividend_tdata,
|
|
|
|
input s_axis_divisor_tvalid,
|
|
|
|
input [31:0] s_axis_divisor_tdata,
|
|
|
|
output m_axis_dout_tvalid,
|
|
|
|
output [63:0] m_axis_dout_tdata
|
|
|
|
);
|
|
|
|
|
|
|
|
reg valid, nxtValid;
|
|
|
|
reg [63:0] data, nxtData;
|
|
|
|
|
|
|
|
assign m_axis_dout_tvalid = nxtValid;
|
|
|
|
assign m_axis_dout_tdata = nxtData;
|
|
|
|
|
2021-09-24 16:37:47 +08:00
|
|
|
always @(posedge aclk) begin
|
2021-09-22 23:07:13 +08:00
|
|
|
nxtValid <= valid;
|
|
|
|
nxtData <= data;
|
|
|
|
if (s_axis_dividend_tvalid & s_axis_divisor_tvalid) begin
|
|
|
|
valid <= 1'b1;
|
|
|
|
data <= {
|
|
|
|
$signed(s_axis_divisor_tdata) % $signed(s_axis_dividend_tdata),
|
|
|
|
$signed(s_axis_divisor_tdata) / $signed(s_axis_dividend_tdata)
|
|
|
|
};
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
|
2021-09-24 16:37:47 +08:00
|
|
|
endmodule
|