@@ -144,6 +144,9 @@ module axis_ram_switch #
144144parameter CL_S_COUNT = $clog2(S_COUNT);
145145parameter CL_M_COUNT = $clog2(M_COUNT);
146146
147+ parameter S_ID_WIDTH_INT = S_ID_WIDTH > 0 ? S_ID_WIDTH : 1 ;
148+ parameter M_DEST_WIDTH_INT = M_DEST_WIDTH > 0 ? M_DEST_WIDTH : 1 ;
149+
147150// force keep width to 1 when disabled
148151parameter S_KEEP_WIDTH_INT = S_KEEP_ENABLE ? S_KEEP_WIDTH : 1 ;
149152parameter M_KEEP_WIDTH_INT = M_KEEP_ENABLE ? M_KEEP_WIDTH : 1 ;
@@ -405,8 +408,8 @@ generate
405408 .M_DATA_WIDTH(DATA_WIDTH),
406409 .M_KEEP_ENABLE(1 ),
407410 .M_KEEP_WIDTH(KEEP_WIDTH),
408- .ID_ENABLE(ID_ENABLE),
409- .ID_WIDTH(S_ID_WIDTH ),
411+ .ID_ENABLE(ID_ENABLE && S_ID_WIDTH > 0 ),
412+ .ID_WIDTH(S_ID_WIDTH_INT ),
410413 .DEST_ENABLE(1 ),
411414 .DEST_WIDTH(S_DEST_WIDTH),
412415 .USER_ENABLE(USER_ENABLE),
@@ -421,7 +424,7 @@ generate
421424 .s_axis_tvalid(s_axis_tvalid[m]),
422425 .s_axis_tready(s_axis_tready[m]),
423426 .s_axis_tlast(s_axis_tlast[m]),
424- .s_axis_tid(s_axis_tid[S_ID_WIDTH*m +: S_ID_WIDTH ]),
427+ .s_axis_tid(s_axis_tid[S_ID_WIDTH*m +: S_ID_WIDTH_INT ]),
425428 .s_axis_tdest(s_axis_tdest[S_DEST_WIDTH*m +: S_DEST_WIDTH]),
426429 .s_axis_tuser(s_axis_tuser[USER_WIDTH*m +: USER_WIDTH]),
427430 // AXI output
@@ -585,7 +588,7 @@ generate
585588 reg [ADDR_WIDTH- 1 :0 ] cmd_len_reg = {ADDR_WIDTH{1'b0 }}, cmd_len_next;
586589 reg [CMD_ADDR_WIDTH- 1 :0 ] cmd_id_reg = {CMD_ADDR_WIDTH{1'b0 }}, cmd_id_next;
587590 reg [KEEP_WIDTH- 1 :0 ] cmd_tkeep_reg = {KEEP_WIDTH{1'b0 }}, cmd_tkeep_next;
588- reg [S_ID_WIDTH- 1 :0 ] cmd_tid_reg = {S_ID_WIDTH {1'b0 }}, cmd_tid_next;
591+ reg [S_ID_WIDTH- 1 :0 ] cmd_tid_reg = {S_ID_WIDTH_INT {1'b0 }}, cmd_tid_next;
589592 reg [S_DEST_WIDTH- 1 :0 ] cmd_tdest_reg = {S_DEST_WIDTH{1'b0 }}, cmd_tdest_next;
590593 reg [USER_WIDTH- 1 :0 ] cmd_tuser_reg = {USER_WIDTH{1'b0 }}, cmd_tuser_next;
591594 reg [M_COUNT- 1 :0 ] cmd_valid_reg = 0 , cmd_valid_next;
@@ -608,7 +611,7 @@ generate
608611 assign int_cmd_len[m* ADDR_WIDTH + : ADDR_WIDTH] = cmd_len_reg;
609612 assign int_cmd_id[m* CMD_ADDR_WIDTH + : CMD_ADDR_WIDTH] = cmd_id_reg;
610613 assign int_cmd_tkeep[m* KEEP_WIDTH + : KEEP_WIDTH] = cmd_tkeep_reg;
611- assign int_cmd_tid[m* S_ID_WIDTH + : S_ID_WIDTH ] = cmd_tid_reg;
614+ assign int_cmd_tid[m* S_ID_WIDTH + : S_ID_WIDTH_INT ] = cmd_tid_reg;
612615 assign int_cmd_tdest[m* S_DEST_WIDTH + : S_DEST_WIDTH] = cmd_tdest_reg;
613616 assign int_cmd_tuser[m* USER_WIDTH + : USER_WIDTH] = cmd_tuser_reg;
614617 assign int_cmd_valid[m* M_COUNT + : M_COUNT] = cmd_valid_reg;
@@ -854,7 +857,7 @@ generate
854857 cmd_len_mux = int_cmd_len[grant_encoded* ADDR_WIDTH + : ADDR_WIDTH];
855858 cmd_id_mux = int_cmd_id[grant_encoded* CMD_ADDR_WIDTH + : CMD_ADDR_WIDTH];
856859 cmd_tkeep_mux = int_cmd_tkeep[grant_encoded* KEEP_WIDTH + : KEEP_WIDTH];
857- cmd_tid_mux = int_cmd_tid[grant_encoded* S_ID_WIDTH + : S_ID_WIDTH ];
860+ cmd_tid_mux = int_cmd_tid[grant_encoded* S_ID_WIDTH + : S_ID_WIDTH_INT ];
858861 if (UPDATE_TID && S_COUNT > 1 ) begin
859862 cmd_tid_mux[M_ID_WIDTH- 1 :M_ID_WIDTH- CL_S_COUNT] = grant_encoded;
860863 end
@@ -879,7 +882,7 @@ generate
879882
880883 reg [KEEP_WIDTH- 1 :0 ] last_cycle_tkeep_reg = {KEEP_WIDTH{1'b0 }}, last_cycle_tkeep_next;
881884 reg [M_ID_WIDTH- 1 :0 ] tid_reg = {M_ID_WIDTH{1'b0 }}, tid_next;
882- reg [M_DEST_WIDTH- 1 :0 ] tdest_reg = {M_DEST_WIDTH {1'b0 }}, tdest_next;
885+ reg [M_DEST_WIDTH- 1 :0 ] tdest_reg = {M_DEST_WIDTH_INT {1'b0 }}, tdest_next;
883886 reg [USER_WIDTH- 1 :0 ] tuser_reg = {USER_WIDTH{1'b0 }}, tuser_next;
884887
885888 reg [DATA_WIDTH- 1 :0 ] out_axis_tdata_reg = {DATA_WIDTH{1'b0 }}, out_axis_tdata_next;
@@ -888,7 +891,7 @@ generate
888891 wire out_axis_tready;
889892 reg out_axis_tlast_reg = 1'b0 , out_axis_tlast_next;
890893 reg [M_ID_WIDTH- 1 :0 ] out_axis_tid_reg = {M_ID_WIDTH{1'b0 }}, out_axis_tid_next;
891- reg [M_DEST_WIDTH- 1 :0 ] out_axis_tdest_reg = {M_DEST_WIDTH {1'b0 }}, out_axis_tdest_next;
894+ reg [M_DEST_WIDTH- 1 :0 ] out_axis_tdest_reg = {M_DEST_WIDTH_INT {1'b0 }}, out_axis_tdest_next;
892895 reg [USER_WIDTH- 1 :0 ] out_axis_tuser_reg = {USER_WIDTH{1'b0 }}, out_axis_tuser_next;
893896
894897 reg [RAM_ADDR_WIDTH- 1 :0 ] ram_rd_addr_reg = {RAM_ADDR_WIDTH{1'b0 }}, ram_rd_addr_next;
@@ -1104,8 +1107,8 @@ generate
11041107 .M_KEEP_WIDTH(M_KEEP_WIDTH),
11051108 .ID_ENABLE(ID_ENABLE),
11061109 .ID_WIDTH(M_ID_WIDTH),
1107- .DEST_ENABLE(1 ),
1108- .DEST_WIDTH(M_DEST_WIDTH ),
1110+ .DEST_ENABLE(M_DEST_WIDTH > 0 ),
1111+ .DEST_WIDTH(M_DEST_WIDTH_INT ),
11091112 .USER_ENABLE(USER_ENABLE),
11101113 .USER_WIDTH(USER_WIDTH)
11111114 )
@@ -1128,7 +1131,7 @@ generate
11281131 .m_axis_tready(m_axis_tready[n]),
11291132 .m_axis_tlast(m_axis_tlast[n]),
11301133 .m_axis_tid(m_axis_tid[M_ID_WIDTH*n +: M_ID_WIDTH]),
1131- .m_axis_tdest(m_axis_tdest[M_DEST_WIDTH*n +: M_DEST_WIDTH ]),
1134+ .m_axis_tdest(m_axis_tdest[M_DEST_WIDTH*n +: M_DEST_WIDTH_INT ]),
11321135 .m_axis_tuser(m_axis_tuser[USER_WIDTH*n +: USER_WIDTH])
11331136 );
11341137 end // m_ifaces
0 commit comments