对不起我的虚拟问题,但我是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
有人可以告诉我该怎么做。谢谢
答案 0 :(得分:1)
一瞥你的代码就会显示:
您将浮点(或Verilog中的实数)值分配给位向量:assign a = x12;
其中x12定义为-0.253。你不能这样做。 Verilog没有实数的自动类型转换。
您在a
为输入的模块中途为a
分配值。
正确的方法是将a
分配给输入向量。
查看代码:您正在使用s_axis _.... ports。那些是流式传输axi端口。您没有提供流式公交数据流。
据我所知,s_axis_a_tready
端口是输出,但是您正在输入有效值。
您必须阅读流媒体协议。