Verilog ip核心浮点计算

时间:2018-04-21 05:42:32

标签: floating-point verilog

对不起我的虚拟问题,但我是fpga的新手,所以我不得不问。我需要卷积两个具有浮点的矩阵。乘法和求和是我需要的计算。我试过但有些错误。我想把矩阵元素作为参数。

`timescale 1ns / 1ps

parameter x12 = -0.253; //one of the kernel element

module float(
    input clk,
    input wire [63:0] a,
    input wire [63:0] b,
    input valid,
    output [63:0] out
    );

    assign a = x12;

floating_point_0 dut(
    .aclk(clk),
    .s_axis_a_tvalid(valid),
    .s_axis_a_tready(valid),
    .s_axis_a_tdata(a),
    .s_axis_b_tvalid(valid),
    .s_axis_b_tready(valid),
    .s_axis_b_tdata(b),
    .m_axis_result_tvalid(valid),
    .m_axis_result_tready(valid),
    .m_axis_result_tdata(out)
);

endmodule

我的测试台

module tb_float();

reg clk;
reg [63:0] a;
reg [63:0] b;
reg valid;
wire [63:0] out;

float dut1(clk,a,b,valid,out);

initial
begin

    clk <= 0;
    forever #5 clk = ~clk;

end

initial 
begin 

    valid <= 1;
    #10;
    b <= 14;

end
endmodule

有人可以告诉我该怎么做。谢谢

1 个答案:

答案 0 :(得分:1)

  • 如果你告诉我们你有什么错误会有所帮助。
  • 我没有在任何地方看到矩阵(如:二维数组)。

一瞥你的代码就会显示:

您将浮点(或Verilog中的实数)值分配给位向量:assign a = x12;其中x12定义为-0.253。你不能这样做。 Verilog没有实数的自动类型转换。

您在a为输入的模块中途为a分配值。
正确的方法是将a分配给输入向量。

查看代码:您正在使用s_axis _.... ports。那些是流式传输axi端口。您没有提供流式公交数据流。

据我所知,s_axis_a_tready端口是输出,但是您正在输入有效值。

您必须阅读流媒体协议。