fp16_4add.v 5.95 KB
Newer Older
sakundu committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126
// ================================================================
// NVDLA Open Source Project
//
// Copyright(c) 2016 - 2017 NVIDIA Corporation. Licensed under the
// NVDLA Open Hardware License; Check "LICENSE" which comes with
// this distribution for more information.
// ================================================================
// File Name: fp16_4add.v
module fp16_4add (
   fp16_add_in_a //|< i
  ,fp16_add_in_b //|< i
  ,fp16_add_in_pvld //|< i
  ,fp16_add_out_prdy //|< i
  ,nvdla_core_clk //|< i
  ,nvdla_core_rstn //|< i
  ,fp16_add_in_prdy //|> o
  ,fp16_add_out_dp //|> o
  ,fp16_add_out_pvld //|> o
  );
input [67:0] fp16_add_in_a;
input [67:0] fp16_add_in_b;
input fp16_add_in_pvld;
input fp16_add_out_prdy;
input nvdla_core_clk;
input nvdla_core_rstn;
output fp16_add_in_prdy;
output [67:0] fp16_add_out_dp;
output fp16_add_out_pvld;
wire fp16_add_in0_a_rdy;
wire fp16_add_in0_a_vld;
wire fp16_add_in0_b_rdy;
wire fp16_add_in0_b_vld;
wire fp16_add_in1_a_rdy;
wire fp16_add_in1_a_vld;
wire fp16_add_in1_b_rdy;
wire fp16_add_in1_b_vld;
wire fp16_add_in2_a_rdy;
wire fp16_add_in2_a_vld;
wire fp16_add_in2_b_rdy;
wire fp16_add_in2_b_vld;
wire fp16_add_in3_a_rdy;
wire fp16_add_in3_a_vld;
wire fp16_add_in3_b_rdy;
wire fp16_add_in3_b_vld;
wire [16:0] fp16_add_out0;
wire fp16_add_out0_rdy;
wire fp16_add_out0_vld;
wire [16:0] fp16_add_out1;
wire fp16_add_out1_rdy;
wire fp16_add_out1_vld;
wire [16:0] fp16_add_out2;
wire fp16_add_out2_rdy;
wire fp16_add_out2_vld;
wire [16:0] fp16_add_out3;
wire fp16_add_out3_rdy;
wire fp16_add_out3_vld;
/////////////////////////////////////////////
assign fp16_add_in_prdy = fp16_add_in3_b_rdy & fp16_add_in2_b_rdy & fp16_add_in1_b_rdy & fp16_add_in0_b_rdy
                                & fp16_add_in3_a_rdy & fp16_add_in2_a_rdy & fp16_add_in1_a_rdy & fp16_add_in0_a_rdy ;
assign fp16_add_in0_a_vld = fp16_add_in_pvld & (fp16_add_in0_b_rdy&fp16_add_in1_a_rdy&fp16_add_in1_b_rdy&fp16_add_in2_a_rdy&fp16_add_in2_b_rdy&fp16_add_in3_a_rdy&fp16_add_in3_b_rdy);
assign fp16_add_in1_a_vld = fp16_add_in_pvld & (fp16_add_in0_a_rdy&fp16_add_in0_b_rdy&fp16_add_in1_b_rdy&fp16_add_in2_a_rdy&fp16_add_in2_b_rdy&fp16_add_in3_a_rdy&fp16_add_in3_b_rdy);
assign fp16_add_in2_a_vld = fp16_add_in_pvld & (fp16_add_in0_a_rdy&fp16_add_in0_b_rdy&fp16_add_in1_a_rdy&fp16_add_in1_b_rdy&fp16_add_in2_b_rdy&fp16_add_in3_a_rdy&fp16_add_in3_b_rdy);
assign fp16_add_in3_a_vld = fp16_add_in_pvld & (fp16_add_in0_a_rdy&fp16_add_in0_b_rdy&fp16_add_in1_a_rdy&fp16_add_in1_b_rdy&fp16_add_in2_a_rdy&fp16_add_in2_b_rdy&fp16_add_in3_b_rdy);
assign fp16_add_in0_b_vld = fp16_add_in_pvld & (fp16_add_in0_a_rdy&fp16_add_in1_a_rdy&fp16_add_in1_b_rdy&fp16_add_in2_a_rdy&fp16_add_in2_b_rdy&fp16_add_in3_a_rdy&fp16_add_in3_b_rdy);
assign fp16_add_in1_b_vld = fp16_add_in_pvld & (fp16_add_in0_a_rdy&fp16_add_in0_b_rdy&fp16_add_in1_a_rdy&fp16_add_in2_a_rdy&fp16_add_in2_b_rdy&fp16_add_in3_a_rdy&fp16_add_in3_b_rdy);
assign fp16_add_in2_b_vld = fp16_add_in_pvld & (fp16_add_in0_a_rdy&fp16_add_in0_b_rdy&fp16_add_in1_a_rdy&fp16_add_in1_b_rdy&fp16_add_in2_a_rdy&fp16_add_in3_a_rdy&fp16_add_in3_b_rdy);
assign fp16_add_in3_b_vld = fp16_add_in_pvld & (fp16_add_in0_a_rdy&fp16_add_in0_b_rdy&fp16_add_in1_a_rdy&fp16_add_in1_b_rdy&fp16_add_in2_a_rdy&fp16_add_in2_b_rdy&fp16_add_in3_a_rdy);
HLS_fp17_add u_HLS_fp17_pooling_add_0 (
   .nvdla_core_clk (nvdla_core_clk) //|< i
  ,.nvdla_core_rstn (nvdla_core_rstn) //|< i
  ,.chn_a_rsc_z (fp16_add_in_a[16:0]) //|< i
  ,.chn_a_rsc_vz (fp16_add_in0_a_vld) //|< w
  ,.chn_a_rsc_lz (fp16_add_in0_a_rdy) //|> w
  ,.chn_b_rsc_z (fp16_add_in_b[16:0]) //|< i
  ,.chn_b_rsc_vz (fp16_add_in0_b_vld) //|< w
  ,.chn_b_rsc_lz (fp16_add_in0_b_rdy) //|> w
  ,.chn_o_rsc_z (fp16_add_out0[16:0]) //|> w
  ,.chn_o_rsc_vz (fp16_add_out0_rdy) //|< w
  ,.chn_o_rsc_lz (fp16_add_out0_vld) //|> w
  );
HLS_fp17_add u_HLS_fp17_pooling_add_1 (
   .nvdla_core_clk (nvdla_core_clk) //|< i
  ,.nvdla_core_rstn (nvdla_core_rstn) //|< i
  ,.chn_a_rsc_z (fp16_add_in_a[33:17]) //|< i
  ,.chn_a_rsc_vz (fp16_add_in1_a_vld) //|< w
  ,.chn_a_rsc_lz (fp16_add_in1_a_rdy) //|> w
  ,.chn_b_rsc_z (fp16_add_in_b[33:17]) //|< i
  ,.chn_b_rsc_vz (fp16_add_in1_b_vld) //|< w
  ,.chn_b_rsc_lz (fp16_add_in1_b_rdy) //|> w
  ,.chn_o_rsc_z (fp16_add_out1[16:0]) //|> w
  ,.chn_o_rsc_vz (fp16_add_out1_rdy) //|< w
  ,.chn_o_rsc_lz (fp16_add_out1_vld) //|> w
  );
HLS_fp17_add u_HLS_fp17_pooling_add_2 (
   .nvdla_core_clk (nvdla_core_clk) //|< i
  ,.nvdla_core_rstn (nvdla_core_rstn) //|< i
  ,.chn_a_rsc_z (fp16_add_in_a[50:34]) //|< i
  ,.chn_a_rsc_vz (fp16_add_in2_a_vld) //|< w
  ,.chn_a_rsc_lz (fp16_add_in2_a_rdy) //|> w
  ,.chn_b_rsc_z (fp16_add_in_b[50:34]) //|< i
  ,.chn_b_rsc_vz (fp16_add_in2_b_vld) //|< w
  ,.chn_b_rsc_lz (fp16_add_in2_b_rdy) //|> w
  ,.chn_o_rsc_z (fp16_add_out2[16:0]) //|> w
  ,.chn_o_rsc_vz (fp16_add_out2_rdy) //|< w
  ,.chn_o_rsc_lz (fp16_add_out2_vld) //|> w
  );
HLS_fp17_add u_HLS_fp17_pooling_add_3 (
   .nvdla_core_clk (nvdla_core_clk) //|< i
  ,.nvdla_core_rstn (nvdla_core_rstn) //|< i
  ,.chn_a_rsc_z (fp16_add_in_a[67:51]) //|< i
  ,.chn_a_rsc_vz (fp16_add_in3_a_vld) //|< w
  ,.chn_a_rsc_lz (fp16_add_in3_a_rdy) //|> w
  ,.chn_b_rsc_z (fp16_add_in_b[67:51]) //|< i
  ,.chn_b_rsc_vz (fp16_add_in3_b_vld) //|< w
  ,.chn_b_rsc_lz (fp16_add_in3_b_rdy) //|> w
  ,.chn_o_rsc_z (fp16_add_out3[16:0]) //|> w
  ,.chn_o_rsc_vz (fp16_add_out3_rdy) //|< w
  ,.chn_o_rsc_lz (fp16_add_out3_vld) //|> w
  );
assign fp16_add_out0_rdy = fp16_add_out_prdy & (fp16_add_out3_vld & fp16_add_out2_vld & fp16_add_out1_vld);
assign fp16_add_out1_rdy = fp16_add_out_prdy & (fp16_add_out3_vld & fp16_add_out2_vld & fp16_add_out0_vld);
assign fp16_add_out2_rdy = fp16_add_out_prdy & (fp16_add_out3_vld & fp16_add_out1_vld & fp16_add_out0_vld);
assign fp16_add_out3_rdy = fp16_add_out_prdy & (fp16_add_out2_vld & fp16_add_out1_vld & fp16_add_out0_vld);
assign fp16_add_out_pvld = fp16_add_out3_vld & fp16_add_out2_vld & fp16_add_out1_vld & fp16_add_out0_vld;
assign fp16_add_out_dp = {fp16_add_out3,fp16_add_out2,fp16_add_out1,fp16_add_out0};
endmodule // fp16_4add