55// Yvan Tortorella <[email protected] >66//
77
8- import fpnew_pkg :: * ;
9- import hci_package :: * ;
10- import redmule_pkg :: * ;
118
12- module redmule_castout # (
13- parameter fpnew_pkg :: fmt_logic_t FpFmtConfig = FpFmtConfig,
14- parameter fpnew_pkg :: ifmt_logic_t IntFmtConfig = IntFmtConfig,
15- parameter fpnew_pkg :: fp_format_e SrcFormat = FPFORMAT ,
16- parameter fpnew_pkg :: operation_e Operation = CAST_OP ,
9+ module redmule_castout
10+ import fpnew_pkg:: * ;
11+ import hci_package :: * ;
12+ import redmule_pkg :: * ;
13+ # (
14+ parameter fpnew_pkg :: fmt_logic_t FpFmtConfig = 6'b001101 ,
15+ parameter fpnew_pkg :: ifmt_logic_t IntFmtConfig = 4'b1000 ,
16+ parameter fpnew_pkg :: fp_format_e SrcFormat = FP16 ,
17+ parameter fpnew_pkg :: operation_e Operation = F2F ,
1718 parameter logic Pipe = 1'b0 ,
19+ parameter int unsigned DataW = 0 ,
1820 localparam int unsigned BW = hci_package :: DEFAULT_BW ,
19- localparam int unsigned OW = ADDR_W ,
2021 localparam int unsigned UW = hci_package :: DEFAULT_UW ,
2122 localparam int unsigned WIDTH = fpnew_pkg :: maximum (fpnew_pkg :: max_fp_width (FpFmtConfig),
2223 fpnew_pkg :: max_int_width (IntFmtConfig))
@@ -25,18 +26,20 @@ module redmule_castout #(
2526 input logic rst_ni ,
2627 input logic clear_i ,
2728 input logic cast_i ,
28- input logic [DATA_W - 1 : 0 ] src_i ,
29+ input logic [DataW - 1 : 0 ] src_i ,
2930 input fpnew_pkg :: fp_format_e dst_fmt_i,
30- output logic [DATA_W - 1 : 0 ] dst_o
31+ output logic [DataW - 1 : 0 ] dst_o
3132);
3233
33- localparam int unsigned NUM_CAST = DATA_W / BITW ;
34+ localparam int unsigned NUM_CAST = DataW / fp_width (SrcFormat) ;
3435localparam int unsigned NARRBITW = fpnew_pkg :: fp_width (fpnew_pkg :: FP8 );
3536// localparam int unsigned ZEROBITS = WIDTH - NARRBITW;
36- localparam int unsigned ZEROBITS = MIN_FMT ;
37+ localparam int unsigned ZEROBITS = fpnew_pkg :: min_fp_width (FpFmtConfig);
38+ localparam int unsigned MIN_FMT = fpnew_pkg :: min_fp_width (FpFmtConfig);
3739localparam fpnew_pkg :: int_format_e INT_SRC = fpnew_pkg :: INT8 ;
40+ localparam int unsigned DW_RATIO = fp_width (SrcFormat)/ min_fp_width (FpFmtConfig);
3841
39- logic [DATA_W - 1 : 0 ] dst_int,
42+ logic [DataW - 1 : 0 ] dst_int,
4043 res;
4144logic [NUM_CAST - 1 : 0 ][WIDTH - 1 : 0 ] result ,
4245 operand;
@@ -83,7 +86,7 @@ generate
8386
8487endgenerate
8588
86- assign dst_int = {{ DATA_W - DW_CUT { 1'b0 }} , res[DATA_W - DW_CUT - 1 : 0 ]} ;
89+ assign dst_int = {{ DataW / DW_RATIO { 1'b0 }} , res[DataW / DW_RATIO - 1 : 0 ]} ;
8790
8891assign dst_o = cast_i ? dst_int : src_i;
8992
0 commit comments