|
楼主 |
发表于 2021-9-28 09:29:28
|
显示全部楼层
对应verilog代码如下:
module Router(
input clock,
input reset,
output io_read_routing_table_request_ready,
input io_read_routing_table_request_valid,
input [31:0] io_read_routing_table_request_bits_addr,
input io_read_routing_table_response_ready,
output io_read_routing_table_response_valid,
output [31:0] io_read_routing_table_response_bits,
output io_load_routing_table_request_ready,
input io_load_routing_table_request_valid,
input [31:0] io_load_routing_table_request_bits_addr,
input [63:0] io_load_routing_table_request_bits_data,
output io_in_ready,
input io_in_valid,
input [7:0] io_in_bits_header,
input [63:0] io_in_bits_body,
input io_outs_0_ready,
output io_outs_0_valid,
output [7:0] io_outs_0_bits_header,
output [63:0] io_outs_0_bits_body,
input io_outs_1_ready,
output io_outs_1_valid,
output [7:0] io_outs_1_bits_header,
output [63:0] io_outs_1_bits_body,
input io_outs_2_ready,
output io_outs_2_valid,
output [7:0] io_outs_2_bits_header,
output [63:0] io_outs_2_bits_body,
input io_outs_3_ready,
output io_outs_3_valid,
output [7:0] io_outs_3_bits_header,
output [63:0] io_outs_3_bits_body
);
reg [2:0] tbl [0:14]; // @[Router.scala 55:16]
reg [31:0] _RAND_0;
wire [2:0] tbl__T_6_data; // @[Router.scala 55:16]
wire [3:0] tbl__T_6_addr; // @[Router.scala 55:16]
reg [31:0] _RAND_1;
wire [2:0] tbl__T_13_data; // @[Router.scala 55:16]
wire [3:0] tbl__T_13_addr; // @[Router.scala 55:16]
reg [31:0] _RAND_2;
wire [2:0] tbl__T_17_data; // @[Router.scala 55:16]
wire [3:0] tbl__T_17_addr; // @[Router.scala 55:16]
reg [31:0] _RAND_3;
wire [2:0] tbl__T_8_data; // @[Router.scala 55:16]
wire [3:0] tbl__T_8_addr; // @[Router.scala 55:16]
wire tbl__T_8_mask; // @[Router.scala 55:16]
wire tbl__T_8_en; // @[Router.scala 55:16]
wire _T_4 = io_read_routing_table_request_valid & io_read_routing_table_response_ready; // @[Router.scala 86:44]
wire _T_10 = ~reset; // @[Router.scala 96:11]
wire _GEN_4 = 2'h1 == tbl__T_13_data[1:0] ? io_outs_1_ready : io_outs_0_ready; // @[Router.scala 102:30]
wire _GEN_8 = 2'h2 == tbl__T_13_data[1:0] ? io_outs_2_ready : _GEN_4; // @[Router.scala 102:30]
wire _GEN_12 = 2'h3 == tbl__T_13_data[1:0] ? io_outs_3_ready : _GEN_8; // @[Router.scala 102:30]
wire _GEN_16 = 2'h0 == tbl__T_13_data[1:0]; // @[Decoupled.scala 47:20]
wire _GEN_17 = 2'h1 == tbl__T_13_data[1:0]; // @[Decoupled.scala 47:20]
wire _GEN_18 = 2'h2 == tbl__T_13_data[1:0]; // @[Decoupled.scala 47:20]
wire _GEN_19 = 2'h3 == tbl__T_13_data[1:0]; // @[Decoupled.scala 47:20]
wire _GEN_29 = _GEN_12 & _GEN_16; // @[Router.scala 102:30]
wire _GEN_30 = _GEN_12 & _GEN_17; // @[Router.scala 102:30]
wire _GEN_31 = _GEN_12 & _GEN_18; // @[Router.scala 102:30]
wire _GEN_32 = _GEN_12 & _GEN_19; // @[Router.scala 102:30]
wire _GEN_46 = io_in_valid & _GEN_12; // @[Router.scala 97:27]
wire _GEN_47 = io_in_valid & _GEN_29; // @[Router.scala 97:27]
wire _GEN_48 = io_in_valid & _GEN_30; // @[Router.scala 97:27]
wire _GEN_49 = io_in_valid & _GEN_31; // @[Router.scala 97:27]
wire _GEN_50 = io_in_valid & _GEN_32; // @[Router.scala 97:27]
wire _GEN_68 = io_load_routing_table_request_valid ? 1'h0 : io_in_valid; // @[Router.scala 91:51]
wire _GEN_69 = io_load_routing_table_request_valid ? 1'h0 : _GEN_46; // @[Router.scala 91:51]
wire _GEN_70 = io_load_routing_table_request_valid ? 1'h0 : _GEN_47; // @[Router.scala 91:51]
wire _GEN_71 = io_load_routing_table_request_valid ? 1'h0 : _GEN_48; // @[Router.scala 91:51]
wire _GEN_72 = io_load_routing_table_request_valid ? 1'h0 : _GEN_49; // @[Router.scala 91:51]
wire _GEN_73 = io_load_routing_table_request_valid ? 1'h0 : _GEN_50; // @[Router.scala 91:51]
wire [2:0] _GEN_87 = _T_4 ? tbl__T_6_data : 3'h0; // @[Router.scala 86:85]
wire _GEN_112 = ~_T_4; // @[Router.scala 96:11]
wire _GEN_113 = _GEN_112 & io_load_routing_table_request_valid; // @[Router.scala 96:11]
wire _GEN_115 = ~io_load_routing_table_request_valid; // @[Router.scala 105:13]
wire _GEN_116 = _GEN_112 & _GEN_115; // @[Router.scala 105:13]
wire _GEN_117 = _GEN_116 & io_in_valid; // @[Router.scala 105:13]
wire _GEN_118 = _GEN_117 & _GEN_12; // @[Router.scala 105:13]
assign tbl__T_6_addr = io_read_routing_table_request_bits_addr[3:0];
`ifndef RANDOMIZE_GARBAGE_ASSIGN
assign tbl__T_6_data = tbl[tbl__T_6_addr]; // @[Router.scala 55:16]
`else
assign tbl__T_6_data = tbl__T_6_addr >= 4'hf ? _RAND_1[2:0] : tbl[tbl__T_6_addr]; // @[Router.scala 55:16]
`endif // RANDOMIZE_GARBAGE_ASSIGN
assign tbl__T_13_addr = io_in_bits_header[3:0];
`ifndef RANDOMIZE_GARBAGE_ASSIGN
assign tbl__T_13_data = tbl[tbl__T_13_addr]; // @[Router.scala 55:16]
`else
assign tbl__T_13_data = tbl__T_13_addr >= 4'hf ? _RAND_2[2:0] : tbl[tbl__T_13_addr]; // @[Router.scala 55:16]
`endif // RANDOMIZE_GARBAGE_ASSIGN
assign tbl__T_17_addr = io_in_bits_header[3:0];
`ifndef RANDOMIZE_GARBAGE_ASSIGN
assign tbl__T_17_data = tbl[tbl__T_17_addr]; // @[Router.scala 55:16]
`else
assign tbl__T_17_data = tbl__T_17_addr >= 4'hf ? _RAND_3[2:0] : tbl[tbl__T_17_addr]; // @[Router.scala 55:16]
`endif // RANDOMIZE_GARBAGE_ASSIGN
assign tbl__T_8_data = io_load_routing_table_request_bits_data[2:0];
assign tbl__T_8_addr = io_load_routing_table_request_bits_addr[3:0];
assign tbl__T_8_mask = 1'h1;
assign tbl__T_8_en = _T_4 ? 1'h0 : io_load_routing_table_request_valid;
assign io_read_routing_table_request_ready = io_read_routing_table_request_valid & io_read_routing_table_response_ready; // @[Decoupled.scala 72:20 Decoupled.scala 65:20]
assign io_read_routing_table_response_valid = io_read_routing_table_request_valid & io_read_routing_table_response_ready; // @[Decoupled.scala 56:20 Decoupled.scala 47:20]
assign io_read_routing_table_response_bits = {{29'd0}, _GEN_87}; // @[Router.scala 63:39 Decoupled.scala 48:19]
assign io_load_routing_table_request_ready = _T_4 ? 1'h0 : io_load_routing_table_request_valid; // @[Decoupled.scala 72:20 Decoupled.scala 65:20]
assign io_in_ready = _T_4 ? 1'h0 : _GEN_69; // @[Decoupled.scala 72:20 Decoupled.scala 65:20]
assign io_outs_0_valid = _T_4 ? 1'h0 : _GEN_70; // @[Decoupled.scala 56:20 Decoupled.scala 47:20]
assign io_outs_0_bits_header = io_in_bits_header; // @[Router.scala 67:14 Decoupled.scala 48:19]
assign io_outs_0_bits_body = io_in_bits_body; // @[Router.scala 67:14 Decoupled.scala 48:19]
assign io_outs_1_valid = _T_4 ? 1'h0 : _GEN_71; // @[Decoupled.scala 56:20 Decoupled.scala 47:20]
assign io_outs_1_bits_header = io_in_bits_header; // @[Router.scala 67:14 Decoupled.scala 48:19]
assign io_outs_1_bits_body = io_in_bits_body; // @[Router.scala 67:14 Decoupled.scala 48:19]
assign io_outs_2_valid = _T_4 ? 1'h0 : _GEN_72; // @[Decoupled.scala 56:20 Decoupled.scala 47:20]
assign io_outs_2_bits_header = io_in_bits_header; // @[Router.scala 67:14 Decoupled.scala 48:19]
assign io_outs_2_bits_body = io_in_bits_body; // @[Router.scala 67:14 Decoupled.scala 48:19]
assign io_outs_3_valid = _T_4 ? 1'h0 : _GEN_73; // @[Decoupled.scala 56:20 Decoupled.scala 47:20]
assign io_outs_3_bits_header = io_in_bits_header; // @[Router.scala 67:14 Decoupled.scala 48:19]
assign io_outs_3_bits_body = io_in_bits_body; // @[Router.scala 67:14 Decoupled.scala 48:19]
`ifdef RANDOMIZE_GARBAGE_ASSIGN
`define RANDOMIZE
`endif
`ifdef RANDOMIZE_INVALID_ASSIGN
`define RANDOMIZE
`endif
`ifdef RANDOMIZE_REG_INIT
`define RANDOMIZE
`endif
`ifdef RANDOMIZE_MEM_INIT
`define RANDOMIZE
`endif
`ifndef RANDOM
`define RANDOM $random
`endif
`ifdef RANDOMIZE_MEM_INIT
integer initvar;
`endif
`ifndef SYNTHESIS
initial begin
`ifdef RANDOMIZE
`ifdef INIT_RANDOM
`INIT_RANDOM
`endif
`ifndef VERILATOR
`ifdef RANDOMIZE_DELAY
#`RANDOMIZE_DELAY begin end
`else
#0.002 begin end
`endif
`endif
_RAND_0 = {1{`RANDOM}};
`ifdef RANDOMIZE_MEM_INIT
for (initvar = 0; initvar < 15; initvar = initvar+1)
tbl[initvar] = _RAND_0[2:0];
`endif // RANDOMIZE_MEM_INIT
_RAND_1 = {1{`RANDOM}};
_RAND_2 = {1{`RANDOM}};
_RAND_3 = {1{`RANDOM}};
`endif // RANDOMIZE
end // initial
`endif // SYNTHESIS
always @(posedge clock) begin
if(tbl__T_8_en & tbl__T_8_mask) begin
tbl[tbl__T_8_addr] <= tbl__T_8_data; // @[Router.scala 55:16]
end
`ifndef SYNTHESIS
`ifdef PRINTF_COND
if (`PRINTF_COND) begin
`endif
if (_GEN_113 & _T_10) begin
$fwrite(32'h80000002,"setting tbl(%d) to %d\n",io_load_routing_table_request_bits_addr,io_load_routing_table_request_bits_data); // @[Router.scala 96:11]
end
`ifdef PRINTF_COND
end
`endif
`endif // SYNTHESIS
`ifndef SYNTHESIS
`ifdef PRINTF_COND
if (`PRINTF_COND) begin
`endif
if (_GEN_118 & _T_10) begin
$fwrite(32'h80000002,"got packet to route header %d, data %d, being routed to out(%d)\n",io_in_bits_header,io_in_bits_body,tbl__T_17_data); // @[Router.scala 105:13]
end
`ifdef PRINTF_COND
end
`endif
`endif // SYNTHESIS
end
endmodule
|
|