leaf rtl
diff --git a/verilog/rtl/leaf_chip.v b/verilog/rtl/leaf_chip.v
new file mode 100644
index 0000000..c8e22a7
--- /dev/null
+++ b/verilog/rtl/leaf_chip.v
@@ -0,0 +1,2501 @@
+/* Generated by Yosys 0.9+4303 (git sha1 c88eaea6, clang 11.0.1-2 -fPIC -Os) */
+
+module alu(opd0, opd1, op, res);
+ wire [31:0] _00_;
+ wire [31:0] _01_;
+ wire _02_;
+ wire [31:0] _03_;
+ wire _04_;
+ wire _05_;
+ wire _06_;
+ wire _07_;
+ wire _08_;
+ wire _09_;
+ wire _10_;
+ wire _11_;
+ wire [31:0] _12_;
+ wire _13_;
+ wire [31:0] _14_;
+ wire _15_;
+ wire [31:0] _16_;
+ wire _17_;
+ wire [31:0] _18_;
+ wire _19_;
+ wire [31:0] _20_;
+ wire _21_;
+ wire [31:0] _22_;
+ wire _23_;
+ wire arith_op;
+ wire [31:0] arith_res;
+ wire [31:0] comp_res;
+ wire [31:0] logic_res;
+ input [5:0] op;
+ input [31:0] opd0;
+ input [31:0] opd1;
+ output [31:0] res;
+ wire [31:0] shifter_res;
+ assign arith_op = op[4] | op[5];
+ assign _00_ = ~ opd1;
+ assign _01_ = arith_op ? _00_ : opd1;
+ assign _02_ = arith_op ? 1'h1 : 1'h0;
+ assign _03_ = opd0 + _01_;
+ assign arith_res = _03_ + { 31'h00000000, _02_ };
+ assign _04_ = opd0[31] == opd1[31];
+ assign _05_ = ~ op[4];
+ assign _06_ = ~ opd1[31];
+ assign _07_ = opd0[31] & _06_;
+ assign _08_ = ~ opd0[31];
+ assign _09_ = _08_ & opd1[31];
+ assign _10_ = _05_ ? _07_ : _09_;
+ assign _11_ = _04_ ? arith_res[31] : _10_;
+ assign comp_res = op[5] ? { 31'h00000000, _11_ } : arith_res;
+ assign _12_ = opd0 ^ opd1;
+ assign _13_ = op[3:2] == 2'h0;
+ assign _14_ = opd0 | opd1;
+ assign _15_ = op[3:2] == 2'h1;
+ assign _16_ = opd0 & opd1;
+ assign _17_ = op[3:2] == 2'h2;
+ function [31:0] \1841 ;
+ input [31:0] a;
+ input [95:0] b;
+ input [2:0] s;
+ (* parallel_case *)
+ casez (s)
+ 3'b??1:
+ \1841 = b[31:0];
+ 3'b?1?:
+ \1841 = b[63:32];
+ 3'b1??:
+ \1841 = b[95:64];
+ default:
+ \1841 = a;
+ endcase
+ endfunction
+ assign logic_res = \1841 (comp_res, { _16_, _14_, _12_ }, { _17_, _15_, _13_ });
+ assign _18_ = opd0 << { 26'h0000000, opd1[4:0] };
+ assign _19_ = op[1:0] == 2'h0;
+ assign _20_ = opd0 >> { 26'h0000000, opd1[4:0] };
+ assign _21_ = op[1:0] == 2'h1;
+ assign _22_ = $signed(opd0) >>> { 26'h0000000, opd1[4:0] };
+ assign _23_ = op[1:0] == 2'h2;
+ function [31:0] \1859 ;
+ input [31:0] a;
+ input [95:0] b;
+ input [2:0] s;
+ (* parallel_case *)
+ casez (s)
+ 3'b??1:
+ \1859 = b[31:0];
+ 3'b?1?:
+ \1859 = b[63:32];
+ 3'b1??:
+ \1859 = b[95:64];
+ default:
+ \1859 = a;
+ endcase
+ endfunction
+ assign shifter_res = \1859 (logic_res, { _22_, _20_, _18_ }, { _23_, _21_, _19_ });
+ assign res = shifter_res;
+endmodule
+
+module alu_ctrl(alu_op_en, alu_func_type, func3, func7, alu_op);
+ wire _00_;
+ wire _01_;
+ wire _02_;
+ wire _03_;
+ wire [5:0] _04_;
+ wire _05_;
+ wire _06_;
+ wire _07_;
+ wire _08_;
+ wire _09_;
+ wire _10_;
+ wire [5:0] _11_;
+ wire _12_;
+ wire _13_;
+ wire _14_;
+ wire [5:0] _15_;
+ wire [5:0] _16_;
+ input alu_func_type;
+ output [5:0] alu_op;
+ input alu_op_en;
+ input [2:0] func3;
+ input [6:0] func7;
+ assign _00_ = ~ alu_op_en;
+ assign _01_ = func7 == 7'h20;
+ assign _02_ = ~ alu_func_type;
+ assign _03_ = _01_ & _02_;
+ assign _04_ = _03_ ? 6'h1f : 6'h0f;
+ assign _05_ = func3 == 3'h0;
+ assign _06_ = func3 == 3'h1;
+ assign _07_ = func3 == 3'h2;
+ assign _08_ = func3 == 3'h3;
+ assign _09_ = func3 == 3'h4;
+ assign _10_ = func7 == 7'h20;
+ assign _11_ = _10_ ? 6'h0e : 6'h0d;
+ assign _12_ = func3 == 3'h5;
+ assign _13_ = func3 == 3'h6;
+ assign _14_ = func3 == 3'h7;
+ function [5:0] \1747 ;
+ input [5:0] a;
+ input [47:0] b;
+ input [7:0] s;
+ (* parallel_case *)
+ casez (s)
+ 8'b???????1:
+ \1747 = b[5:0];
+ 8'b??????1?:
+ \1747 = b[11:6];
+ 8'b?????1??:
+ \1747 = b[17:12];
+ 8'b????1???:
+ \1747 = b[23:18];
+ 8'b???1????:
+ \1747 = b[29:24];
+ 8'b??1?????:
+ \1747 = b[35:30];
+ 8'b?1??????:
+ \1747 = b[41:36];
+ 8'b1???????:
+ \1747 = b[47:42];
+ default:
+ \1747 = a;
+ endcase
+ endfunction
+ assign _15_ = \1747 (6'h0f, { 12'h2c7, _11_, 24'h0ffbcc, _04_ }, { _14_, _13_, _12_, _09_, _08_, _07_, _06_, _05_ });
+ assign _16_ = _00_ ? 6'h0f : _15_;
+ assign alu_op = _16_;
+endmodule
+
+module br_detector(reg0, reg1, mode, en, branch);
+ wire _00_;
+ wire _01_;
+ wire _02_;
+ wire _03_;
+ wire _04_;
+ wire _05_;
+ wire _06_;
+ wire _07_;
+ wire _08_;
+ wire _09_;
+ wire _10_;
+ wire _11_;
+ wire _12_;
+ wire _13_;
+ wire _14_;
+ output branch;
+ wire branch_i;
+ input en;
+ wire equal;
+ wire less;
+ wire less_unsigned;
+ input [2:0] mode;
+ input [31:0] reg0;
+ input [31:0] reg1;
+ assign _00_ = reg0 == reg1;
+ assign equal = _00_ ? 1'h1 : 1'h0;
+ assign _01_ = $signed(reg0) < $signed(reg1);
+ assign less = _01_ ? 1'h1 : 1'h0;
+ assign _02_ = reg0 < reg1;
+ assign less_unsigned = _02_ ? 1'h1 : 1'h0;
+ assign _03_ = mode == 3'h0;
+ assign _04_ = ~ equal;
+ assign _05_ = mode == 3'h1;
+ assign _06_ = mode == 3'h4;
+ assign _07_ = ~ less;
+ assign _08_ = _07_ | equal;
+ assign _09_ = mode == 3'h5;
+ assign _10_ = mode == 3'h6;
+ assign _11_ = ~ less_unsigned;
+ assign _12_ = _11_ | equal;
+ assign _13_ = mode == 3'h7;
+ function [0:0] \1405 ;
+ input [0:0] a;
+ input [5:0] b;
+ input [5:0] s;
+ (* parallel_case *)
+ casez (s)
+ 6'b?????1:
+ \1405 = b[0:0];
+ 6'b????1?:
+ \1405 = b[1:1];
+ 6'b???1??:
+ \1405 = b[2:2];
+ 6'b??1???:
+ \1405 = b[3:3];
+ 6'b?1????:
+ \1405 = b[4:4];
+ 6'b1?????:
+ \1405 = b[5:5];
+ default:
+ \1405 = a;
+ endcase
+ endfunction
+ assign branch_i = \1405 (1'h0, { _12_, less_unsigned, _08_, less, _04_, equal }, { _13_, _10_, _09_, _06_, _05_, _03_ });
+ assign _14_ = branch_i & en;
+ assign branch = _14_;
+endmodule
+
+module core_ca812405937f647b44fdbdb3a3bf576e759a7cf1(clk, reset, rd_instr_mem_data, rd_mem_data, ex_irq, sw_irq, tm_irq, rd_instr_mem_addr, wr_mem_data, rd_mem_en, wr_mem_en, rd_wr_mem_addr, wr_mem_byte_en);
+ wire [31:0] _0_;
+ wire [31:0] _1_;
+ wire [31:0] _2_;
+ wire _3_;
+ input clk;
+ wire [31:0] \core_id_ex_stage:433 ;
+ wire \core_id_ex_stage:434 ;
+ wire \core_id_ex_stage:435 ;
+ wire [31:0] \core_id_ex_stage:436 ;
+ wire [3:0] \core_id_ex_stage:437 ;
+ wire \core_id_ex_stage:438 ;
+ wire \core_id_ex_stage:439 ;
+ wire \core_id_ex_stage:440 ;
+ wire [31:0] \core_id_ex_stage:441 ;
+ wire [31:0] \core_if_stage:418 ;
+ wire [31:0] \core_if_stage:419 ;
+ wire [31:0] \core_if_stage:420 ;
+ wire [31:0] \core_if_stage:421 ;
+ wire \core_if_stage:422 ;
+ input ex_irq;
+ reg flush_reg;
+ reg [31:0] instr_reg;
+ reg [31:0] next_pc_reg;
+ reg [31:0] pc_reg;
+ output [31:0] rd_instr_mem_addr;
+ input [31:0] rd_instr_mem_data;
+ input [31:0] rd_mem_data;
+ output rd_mem_en;
+ output [31:0] rd_wr_mem_addr;
+ input reset;
+ input sw_irq;
+ input tm_irq;
+ output [3:0] wr_mem_byte_en;
+ output [31:0] wr_mem_data;
+ output wr_mem_en;
+ assign _0_ = reset ? 32'd0 : \core_if_stage:419 ;
+ assign _1_ = reset ? 32'd0 : \core_if_stage:420 ;
+ assign _2_ = reset ? 32'd0 : \core_if_stage:421 ;
+ assign _3_ = reset ? 1'h0 : \core_if_stage:422 ;
+ always @(posedge clk)
+ pc_reg <= _0_;
+ always @(posedge clk)
+ next_pc_reg <= _1_;
+ always @(posedge clk)
+ instr_reg <= _2_;
+ always @(posedge clk)
+ flush_reg <= _3_;
+ id_ex_stage core_id_ex_stage (
+ .branch(\core_id_ex_stage:438 ),
+ .clk(clk),
+ .ex_irq(ex_irq),
+ .flush(flush_reg),
+ .instr(instr_reg),
+ .jmp(\core_id_ex_stage:439 ),
+ .next_pc(next_pc_reg),
+ .pc(pc_reg),
+ .rd_mem_data(rd_mem_data),
+ .rd_mem_en(\core_id_ex_stage:434 ),
+ .rd_wr_mem_addr(\core_id_ex_stage:436 ),
+ .reset(reset),
+ .sw_irq(sw_irq),
+ .target(\core_id_ex_stage:441 ),
+ .tm_irq(tm_irq),
+ .trap(\core_id_ex_stage:440 ),
+ .wr_mem_byte_en(\core_id_ex_stage:437 ),
+ .wr_mem_data(\core_id_ex_stage:433 ),
+ .wr_mem_en(\core_id_ex_stage:435 )
+ );
+ if_stage_ca812405937f647b44fdbdb3a3bf576e759a7cf1 core_if_stage (
+ .branch(\core_id_ex_stage:438 ),
+ .clk(clk),
+ .flush(\core_if_stage:422 ),
+ .instr(\core_if_stage:421 ),
+ .jmp(\core_id_ex_stage:439 ),
+ .next_pc(\core_if_stage:420 ),
+ .pc(\core_if_stage:419 ),
+ .rd_instr_mem_addr(\core_if_stage:418 ),
+ .rd_instr_mem_data(rd_instr_mem_data),
+ .reset(reset),
+ .target(\core_id_ex_stage:441 ),
+ .trap(\core_id_ex_stage:440 )
+ );
+ assign rd_instr_mem_addr = \core_if_stage:418 ;
+ assign wr_mem_data = \core_id_ex_stage:433 ;
+ assign rd_mem_en = \core_id_ex_stage:434 ;
+ assign wr_mem_en = \core_id_ex_stage:435 ;
+ assign rd_wr_mem_addr = \core_id_ex_stage:436 ;
+ assign wr_mem_byte_en = \core_id_ex_stage:437 ;
+endmodule
+
+module csrs_b14a227a3c694ac3d0ad8c71b4ce4306403987f6(clk, reset, ex_irq, sw_irq, tm_irq, wr_mode, wr_en, rd_wr_addr, wr_reg_data, wr_imm_data, rd_data);
+ wire _00_;
+ wire _01_;
+ wire _02_;
+ wire _03_;
+ wire _04_;
+ wire _05_;
+ wire _06_;
+ wire _07_;
+ wire _08_;
+ wire _09_;
+ wire _10_;
+ wire [31:0] _11_;
+ wire _12_;
+ wire [31:0] _13_;
+ wire [31:0] _14_;
+ wire _15_;
+ wire _16_;
+ wire [31:0] _17_;
+ wire _18_;
+ wire [31:0] _19_;
+ wire [31:0] _20_;
+ wire _21_;
+ wire _22_;
+ wire _23_;
+ wire _24_;
+ wire _25_;
+ wire _26_;
+ wire _27_;
+ wire _28_;
+ wire _29_;
+ wire _30_;
+ wire _31_;
+ wire _32_;
+ wire _33_;
+ wire _34_;
+ wire _35_;
+ wire _36_;
+ wire _37_;
+ wire [29:0] _38_;
+ wire [29:0] _39_;
+ wire _40_;
+ wire _41_;
+ wire [31:0] _42_;
+ wire [31:0] _43_;
+ wire _44_;
+ wire _45_;
+ wire [29:0] _46_;
+ wire [29:0] _47_;
+ wire _48_;
+ wire _49_;
+ wire _50_;
+ wire [4:0] _51_;
+ wire _52_;
+ wire [4:0] _53_;
+ wire _54_;
+ wire _55_;
+ wire [31:0] _56_;
+ wire [31:0] _57_;
+ wire _58_;
+ wire _59_;
+ wire _60_;
+ input clk;
+ input ex_irq;
+ reg [4:0] mcause_exc;
+ reg mcause_int;
+ reg [29:0] mepc;
+ reg mie_meie;
+ reg mie_msie;
+ reg mie_mtie;
+ reg mip_meip;
+ reg mip_msip;
+ reg mip_mtip;
+ reg [31:0] mscratch;
+ reg mstatus_mie;
+ reg mstatus_mpie;
+ reg [31:0] mtval;
+ reg [29:0] mtvec_base;
+ output [31:0] rd_data;
+ wire [31:0] rd_data_i;
+ input [11:0] rd_wr_addr;
+ input reset;
+ input sw_irq;
+ input tm_irq;
+ wire [31:0] wr_data_i;
+ input wr_en;
+ input [31:0] wr_imm_data;
+ input [2:0] wr_mode;
+ input [31:0] wr_reg_data;
+ assign _00_ = rd_wr_addr == 12'hf14;
+ assign _01_ = rd_wr_addr == 12'h301;
+ assign _02_ = rd_wr_addr == 12'h300;
+ assign _03_ = rd_wr_addr == 12'h304;
+ assign _04_ = rd_wr_addr == 12'h305;
+ assign _05_ = rd_wr_addr == 12'h340;
+ assign _06_ = rd_wr_addr == 12'h341;
+ assign _07_ = rd_wr_addr == 12'h342;
+ assign _08_ = rd_wr_addr == 12'h343;
+ assign _09_ = rd_wr_addr == 12'h344;
+ function [31:0] \1562 ;
+ input [31:0] a;
+ input [319:0] b;
+ input [9:0] s;
+ (* parallel_case *)
+ casez (s)
+ 10'b?????????1:
+ \1562 = b[31:0];
+ 10'b????????1?:
+ \1562 = b[63:32];
+ 10'b???????1??:
+ \1562 = b[95:64];
+ 10'b??????1???:
+ \1562 = b[127:96];
+ 10'b?????1????:
+ \1562 = b[159:128];
+ 10'b????1?????:
+ \1562 = b[191:160];
+ 10'b???1??????:
+ \1562 = b[223:192];
+ 10'b??1???????:
+ \1562 = b[255:224];
+ 10'b?1????????:
+ \1562 = b[287:256];
+ 10'b1?????????:
+ \1562 = b[319:288];
+ default:
+ \1562 = a;
+ endcase
+ endfunction
+ assign rd_data_i = \1562 (32'd0, { 20'h00000, mip_meip, 3'h0, mip_mtip, 3'h0, mip_msip, 3'h0, mtval, mcause_int, 26'h0000000, mcause_exc, mepc, 2'h0, mscratch, mtvec_base, 22'h000000, mie_meie, 3'h0, mie_mtie, 3'h0, mie_msie, 27'h0000000, mstatus_mpie, 3'h0, mstatus_mie, 67'h04000010000000000 }, { _09_, _08_, _07_, _06_, _05_, _04_, _03_, _02_, _01_, _00_ });
+ assign _10_ = wr_mode == 3'h1;
+ assign _11_ = rd_data_i | wr_reg_data;
+ assign _12_ = wr_mode == 3'h2;
+ assign _13_ = ~ wr_reg_data;
+ assign _14_ = rd_data_i & _13_;
+ assign _15_ = wr_mode == 3'h3;
+ assign _16_ = wr_mode == 3'h5;
+ assign _17_ = rd_data_i | wr_imm_data;
+ assign _18_ = wr_mode == 3'h6;
+ assign _19_ = ~ wr_imm_data;
+ assign _20_ = rd_data_i & _19_;
+ assign _21_ = wr_mode == 3'h7;
+ function [31:0] \1585 ;
+ input [31:0] a;
+ input [191:0] b;
+ input [5:0] s;
+ (* parallel_case *)
+ casez (s)
+ 6'b?????1:
+ \1585 = b[31:0];
+ 6'b????1?:
+ \1585 = b[63:32];
+ 6'b???1??:
+ \1585 = b[95:64];
+ 6'b??1???:
+ \1585 = b[127:96];
+ 6'b?1????:
+ \1585 = b[159:128];
+ 6'b1?????:
+ \1585 = b[191:160];
+ default:
+ \1585 = a;
+ endcase
+ endfunction
+ assign wr_data_i = \1585 (32'd0, { _20_, _17_, wr_imm_data, _14_, _11_, wr_reg_data }, { _21_, _18_, _16_, _15_, _12_, _10_ });
+ assign _22_ = rd_wr_addr == 12'h300;
+ assign _23_ = _22_ & wr_en;
+ assign _24_ = _23_ ? wr_data_i[3] : mstatus_mie;
+ assign _25_ = _23_ ? wr_data_i[7] : mstatus_mpie;
+ assign _26_ = reset ? 1'h0 : _24_;
+ assign _27_ = reset ? 1'h1 : _25_;
+ always @(posedge clk)
+ mstatus_mie <= _26_;
+ always @(posedge clk)
+ mstatus_mpie <= _27_;
+ assign _28_ = rd_wr_addr == 12'h304;
+ assign _29_ = _28_ & wr_en;
+ assign _30_ = _29_ ? wr_data_i[11] : mie_meie;
+ assign _31_ = _29_ ? wr_data_i[7] : mie_mtie;
+ assign _32_ = _29_ ? wr_data_i[3] : mie_msie;
+ assign _33_ = reset ? 1'h0 : _30_;
+ assign _34_ = reset ? 1'h0 : _31_;
+ assign _35_ = reset ? 1'h0 : _32_;
+ always @(posedge clk)
+ mie_meie <= _33_;
+ always @(posedge clk)
+ mie_mtie <= _34_;
+ always @(posedge clk)
+ mie_msie <= _35_;
+ assign _36_ = rd_wr_addr == 12'h305;
+ assign _37_ = _36_ & wr_en;
+ assign _38_ = _37_ ? wr_data_i[31:2] : mtvec_base;
+ assign _39_ = reset ? 30'h00000000 : _38_;
+ always @(posedge clk)
+ mtvec_base <= _39_;
+ assign _40_ = rd_wr_addr == 12'h340;
+ assign _41_ = _40_ & wr_en;
+ assign _42_ = _41_ ? wr_data_i : mscratch;
+ assign _43_ = reset ? 32'd0 : _42_;
+ always @(posedge clk)
+ mscratch <= _43_;
+ assign _44_ = rd_wr_addr == 12'h341;
+ assign _45_ = _44_ & wr_en;
+ assign _46_ = _45_ ? wr_data_i[31:2] : mepc;
+ assign _47_ = reset ? 30'h00000000 : _46_;
+ always @(posedge clk)
+ mepc <= _47_;
+ assign _48_ = rd_wr_addr == 12'h342;
+ assign _49_ = _48_ & wr_en;
+ assign _50_ = _49_ ? wr_data_i[31] : mcause_int;
+ assign _51_ = _49_ ? wr_data_i[4:0] : mcause_exc;
+ assign _52_ = reset ? 1'h0 : _50_;
+ assign _53_ = reset ? 5'h00 : _51_;
+ always @(posedge clk)
+ mcause_int <= _52_;
+ always @(posedge clk)
+ mcause_exc <= _53_;
+ assign _54_ = rd_wr_addr == 12'h343;
+ assign _55_ = _54_ & wr_en;
+ assign _56_ = _55_ ? wr_data_i : mtval;
+ assign _57_ = reset ? 32'd0 : _56_;
+ always @(posedge clk)
+ mtval <= _57_;
+ assign _58_ = reset ? 1'h0 : ex_irq;
+ assign _59_ = reset ? 1'h0 : tm_irq;
+ assign _60_ = reset ? 1'h0 : sw_irq;
+ always @(posedge clk)
+ mip_meip <= _58_;
+ always @(posedge clk)
+ mip_mtip <= _59_;
+ always @(posedge clk)
+ mip_msip <= _60_;
+ assign rd_data = rd_data_i;
+endmodule
+
+module down_counter_16(clk, clr, en, mode, load, val);
+ wire _0_;
+ wire [15:0] _1_;
+ wire [15:0] _2_;
+ wire [15:0] _3_;
+ wire [15:0] _4_;
+ input clk;
+ input clr;
+ input en;
+ reg [15:0] inter_val;
+ input [15:0] load;
+ input mode;
+ output [15:0] val;
+ assign _4_ = en ? _3_ : inter_val;
+ always @(posedge clk, posedge clr)
+ if (clr) inter_val <= 16'hffff;
+ else inter_val <= _4_;
+ assign _0_ = inter_val == 16'h0000;
+ assign _1_ = inter_val - 16'h0001;
+ assign _2_ = _0_ ? 16'hffff : _1_;
+ assign _3_ = mode ? load : _2_;
+ assign val = inter_val;
+endmodule
+
+module down_counter_3(clk, clr, en, mode, load, val);
+ wire _0_;
+ wire [2:0] _1_;
+ wire [2:0] _2_;
+ wire [2:0] _3_;
+ wire [2:0] _4_;
+ input clk;
+ input clr;
+ input en;
+ reg [2:0] inter_val;
+ input [2:0] load;
+ input mode;
+ output [2:0] val;
+ assign _0_ = inter_val == 3'h0;
+ assign _1_ = inter_val - 3'h1;
+ assign _2_ = _0_ ? 3'h7 : _1_;
+ assign _3_ = mode ? load : _2_;
+ assign _4_ = en ? _3_ : inter_val;
+ always @(posedge clk, posedge clr)
+ if (clr) inter_val <= 3'h7;
+ else inter_val <= _4_;
+ assign val = inter_val;
+endmodule
+
+module fifo_8_8(clk, reset, wr, wr_data, rd, wr_en, rd_en, rd_data);
+ wire [7:0] _00_;
+ wire [7:0] _01_;
+ wire [7:0] _02_;
+ wire [7:0] _03_;
+ wire [2:0] _04_;
+ wire _05_;
+ wire _06_;
+ wire [31:0] _07_;
+ wire [2:0] _08_;
+ wire _09_;
+ wire _10_;
+ wire [2:0] _11_;
+ wire [31:0] _12_;
+ wire [2:0] _13_;
+ wire _14_;
+ wire _15_;
+ wire _16_;
+ wire _17_;
+ wire _18_;
+ wire _19_;
+ wire _20_;
+ wire _21_;
+ wire _22_;
+ wire _23_;
+ wire _24_;
+ wire _25_;
+ wire _26_;
+ wire _27_;
+ wire [7:0] _28_;
+ wire [7:0] _29_;
+ wire [7:0] _30_;
+ wire _31_;
+ wire _32_;
+ wire _33_;
+ wire _34_;
+ wire _35_;
+ wire _36_;
+ wire _37_;
+ wire _38_;
+ wire _39_;
+ wire _40_;
+ wire _41_;
+ wire _42_;
+ wire _43_;
+ wire _44_;
+ wire _45_;
+ wire _46_;
+ wire [7:0] _47_;
+ wire _48_;
+ wire [7:0] _49_;
+ wire _50_;
+ wire [7:0] _51_;
+ wire _52_;
+ wire [7:0] _53_;
+ wire _54_;
+ wire [7:0] _55_;
+ wire _56_;
+ wire [7:0] _57_;
+ wire _58_;
+ wire [7:0] _59_;
+ wire _60_;
+ wire [7:0] _61_;
+ input clk;
+ wire empty;
+ reg [63:0] fifo_data;
+ wire full;
+ reg last_op;
+ input rd;
+ output [7:0] rd_data;
+ output rd_en;
+ reg [2:0] rd_pointer;
+ input reset;
+ input wr;
+ input [7:0] wr_data;
+ output wr_en;
+ reg [2:0] wr_pointer;
+ assign _00_ = _04_[0] ? fifo_data[15:8] : fifo_data[7:0];
+ assign _01_ = _04_[0] ? fifo_data[47:40] : fifo_data[39:32];
+ assign _02_ = _04_[0] ? fifo_data[31:24] : fifo_data[23:16];
+ assign _03_ = _04_[0] ? fifo_data[63:56] : fifo_data[55:48];
+ assign _28_ = _04_[1] ? _02_ : _00_;
+ assign _29_ = _04_[1] ? _03_ : _01_;
+ assign _04_ = 3'h7 - rd_pointer;
+ assign _05_ = ~ empty;
+ assign _06_ = rd & _05_;
+ assign _07_ = { 29'h00000000, rd_pointer } + 32'd1;
+ assign _08_ = _06_ ? _07_[2:0] : rd_pointer;
+ always @(posedge clk, posedge reset)
+ if (reset) rd_pointer <= 3'h0;
+ else rd_pointer <= _08_;
+ assign _09_ = ~ full;
+ assign _10_ = wr & _09_;
+ assign _11_ = 3'h7 - wr_pointer;
+ assign _12_ = { 29'h00000000, wr_pointer } + 32'd1;
+ always @(posedge clk, posedge reset)
+ if (reset) fifo_data <= 64'h0000000000000000;
+ else fifo_data <= { _61_, _59_, _57_, _55_, _53_, _51_, _49_, _47_ };
+ assign _13_ = _10_ ? _12_[2:0] : wr_pointer;
+ always @(posedge clk, posedge reset)
+ if (reset) wr_pointer <= 3'h0;
+ else wr_pointer <= _13_;
+ assign _14_ = ~ wr;
+ assign _15_ = rd & _14_;
+ assign _16_ = ~ rd;
+ assign _17_ = _16_ & wr;
+ assign _18_ = _17_ ? 1'h1 : last_op;
+ assign _19_ = _15_ ? 1'h0 : _18_;
+ always @(posedge clk, posedge reset)
+ if (reset) last_op <= 1'h0;
+ else last_op <= _19_;
+ assign _20_ = { 29'h00000000, wr_pointer } == { 29'h00000000, rd_pointer };
+ assign _21_ = last_op == 1'h0;
+ assign _22_ = _20_ & _21_;
+ assign empty = _22_ ? 1'h1 : 1'h0;
+ assign _23_ = { 29'h00000000, wr_pointer } == { 29'h00000000, rd_pointer };
+ assign _24_ = last_op == 1'h1;
+ assign _25_ = _23_ & _24_;
+ assign full = _25_ ? 1'h1 : 1'h0;
+ assign _26_ = ~ empty;
+ assign _27_ = ~ full;
+ assign _30_ = _04_[2] ? _29_ : _28_;
+ assign _31_ = ~ _11_[2];
+ assign _32_ = ~ _11_[1];
+ assign _33_ = _31_ & _32_;
+ assign _34_ = _31_ & _11_[1];
+ assign _35_ = _11_[2] & _32_;
+ assign _36_ = _11_[2] & _11_[1];
+ assign _37_ = ~ _11_[0];
+ assign _38_ = _33_ & _37_;
+ assign _39_ = _33_ & _11_[0];
+ assign _40_ = _34_ & _37_;
+ assign _41_ = _34_ & _11_[0];
+ assign _42_ = _35_ & _37_;
+ assign _43_ = _35_ & _11_[0];
+ assign _44_ = _36_ & _37_;
+ assign _45_ = _36_ & _11_[0];
+ assign _46_ = _38_ & _10_;
+ assign _47_ = _46_ ? wr_data : fifo_data[7:0];
+ assign _48_ = _39_ & _10_;
+ assign _49_ = _48_ ? wr_data : fifo_data[15:8];
+ assign _50_ = _40_ & _10_;
+ assign _51_ = _50_ ? wr_data : fifo_data[23:16];
+ assign _52_ = _41_ & _10_;
+ assign _53_ = _52_ ? wr_data : fifo_data[31:24];
+ assign _54_ = _42_ & _10_;
+ assign _55_ = _54_ ? wr_data : fifo_data[39:32];
+ assign _56_ = _43_ & _10_;
+ assign _57_ = _56_ ? wr_data : fifo_data[47:40];
+ assign _58_ = _44_ & _10_;
+ assign _59_ = _58_ ? wr_data : fifo_data[55:48];
+ assign _60_ = _45_ & _10_;
+ assign _61_ = _60_ ? wr_data : fifo_data[63:56];
+ assign wr_en = _27_;
+ assign rd_en = _26_;
+ assign rd_data = _30_;
+endmodule
+
+module id_ex_stage(clk, reset, pc, next_pc, instr, flush, rd_mem_data, ex_irq, sw_irq, tm_irq, wr_mem_data, rd_mem_en, wr_mem_en, rd_wr_mem_addr, wr_mem_byte_en, branch, jmp, trap, target);
+ wire _0_;
+ wire _1_;
+ wire _2_;
+ wire _3_;
+ wire [31:0] _4_;
+ wire [31:0] _5_;
+ wire [31:0] alu_opd0;
+ wire [31:0] alu_opd1;
+ output branch;
+ input clk;
+ input ex_irq;
+ input flush;
+ input [31:0] instr;
+ output jmp;
+ input [31:0] next_pc;
+ input [31:0] pc;
+ input [31:0] rd_mem_data;
+ output rd_mem_en;
+ output [31:0] rd_wr_mem_addr;
+ input reset;
+ wire [31:0] rf_wr_reg_data;
+ wire [31:0] \stage_alu:966 ;
+ wire [5:0] \stage_alu_ctrl:963 ;
+ wire \stage_br_detector:957 ;
+ wire [31:0] \stage_csrs:960 ;
+ wire [31:0] \stage_ig:948 ;
+ wire [31:0] \stage_lsu:969 ;
+ wire \stage_lsu:970 ;
+ wire \stage_lsu:971 ;
+ wire [31:0] \stage_lsu:972 ;
+ wire [31:0] \stage_lsu:973 ;
+ wire [3:0] \stage_lsu:974 ;
+ wire [1:0] \stage_mc:906 ;
+ wire \stage_mc:907 ;
+ wire [2:0] \stage_mc:908 ;
+ wire \stage_mc:909 ;
+ wire \stage_mc:910 ;
+ wire \stage_mc:911 ;
+ wire \stage_mc:912 ;
+ wire \stage_mc:913 ;
+ wire \stage_mc:914 ;
+ wire \stage_mc:915 ;
+ wire \stage_mc:916 ;
+ wire \stage_mc:917 ;
+ wire \stage_mc:918 ;
+ wire \stage_mc:919 ;
+ wire [31:0] \stage_rf:951 ;
+ wire [31:0] \stage_rf:952 ;
+ input sw_irq;
+ output [31:0] target;
+ input tm_irq;
+ output trap;
+ output [3:0] wr_mem_byte_en;
+ output [31:0] wr_mem_data;
+ output wr_mem_en;
+ assign _0_ = \stage_mc:906 == 2'h0;
+ assign _1_ = \stage_mc:906 == 2'h1;
+ assign _2_ = \stage_mc:906 == 2'h2;
+ assign _3_ = \stage_mc:906 == 2'h3;
+ function [31:0] \894 ;
+ input [31:0] a;
+ input [127:0] b;
+ input [3:0] s;
+ (* parallel_case *)
+ casez (s)
+ 4'b???1:
+ \894 = b[31:0];
+ 4'b??1?:
+ \894 = b[63:32];
+ 4'b?1??:
+ \894 = b[95:64];
+ 4'b1???:
+ \894 = b[127:96];
+ default:
+ \894 = a;
+ endcase
+ endfunction
+ assign rf_wr_reg_data = \894 (32'd0, { \stage_csrs:960 , next_pc, \stage_lsu:969 , \stage_alu:966 }, { _3_, _2_, _1_, _0_ });
+ assign _4_ = \stage_mc:909 ? pc : \stage_rf:951 ;
+ assign alu_opd0 = \stage_mc:911 ? _4_ : 32'd0;
+ assign _5_ = \stage_mc:910 ? \stage_ig:948 : \stage_rf:952 ;
+ assign alu_opd1 = \stage_mc:912 ? _5_ : 32'd0;
+ alu stage_alu (
+ .op(\stage_alu_ctrl:963 ),
+ .opd0(alu_opd0),
+ .opd1(alu_opd1),
+ .res(\stage_alu:966 )
+ );
+ alu_ctrl stage_alu_ctrl (
+ .alu_func_type(\stage_mc:914 ),
+ .alu_op(\stage_alu_ctrl:963 ),
+ .alu_op_en(\stage_mc:913 ),
+ .func3(instr[14:12]),
+ .func7(instr[31:25])
+ );
+ br_detector stage_br_detector (
+ .branch(\stage_br_detector:957 ),
+ .en(\stage_mc:917 ),
+ .mode(instr[14:12]),
+ .reg0(\stage_rf:951 ),
+ .reg1(\stage_rf:952 )
+ );
+ csrs_b14a227a3c694ac3d0ad8c71b4ce4306403987f6 stage_csrs (
+ .clk(clk),
+ .ex_irq(ex_irq),
+ .rd_data(\stage_csrs:960 ),
+ .rd_wr_addr(instr[31:20]),
+ .reset(reset),
+ .sw_irq(sw_irq),
+ .tm_irq(tm_irq),
+ .wr_en(\stage_mc:918 ),
+ .wr_imm_data(\stage_ig:948 ),
+ .wr_mode(instr[14:12]),
+ .wr_reg_data(\stage_rf:951 )
+ );
+ imm_gen stage_ig (
+ .imm(\stage_ig:948 ),
+ .imm_type(\stage_mc:908 ),
+ .payload(instr[31:7])
+ );
+ lsu stage_lsu (
+ .data_type(instr[14:12]),
+ .en(\stage_mc:916 ),
+ .mode(\stage_mc:915 ),
+ .rd_data(\stage_lsu:969 ),
+ .rd_mem_data(rd_mem_data),
+ .rd_mem_en(\stage_lsu:970 ),
+ .rd_wr_addr(\stage_alu:966 ),
+ .rd_wr_mem_addr(\stage_lsu:973 ),
+ .wr_data(\stage_rf:952 ),
+ .wr_mem_byte_en(\stage_lsu:974 ),
+ .wr_mem_data(\stage_lsu:972 ),
+ .wr_mem_en(\stage_lsu:971 )
+ );
+ main_ctrl stage_mc (
+ .alu_func_type(\stage_mc:914 ),
+ .alu_op_en(\stage_mc:913 ),
+ .alu_opd0_pass(\stage_mc:911 ),
+ .alu_opd1_pass(\stage_mc:912 ),
+ .alu_src0(\stage_mc:909 ),
+ .alu_src1(\stage_mc:910 ),
+ .brd_en(\stage_mc:917 ),
+ .csrs_wr_en(\stage_mc:918 ),
+ .flush(flush),
+ .if_jmp(\stage_mc:919 ),
+ .ig_imm_type(\stage_mc:908 ),
+ .lsu_en(\stage_mc:916 ),
+ .lsu_mode(\stage_mc:915 ),
+ .opcode(instr[6:0]),
+ .rf_wr_reg_en(\stage_mc:907 ),
+ .rf_wr_reg_src(\stage_mc:906 )
+ );
+ reg_file stage_rf (
+ .clk(clk),
+ .rd_reg_addr0(instr[19:15]),
+ .rd_reg_addr1(instr[24:20]),
+ .rd_reg_data0(\stage_rf:951 ),
+ .rd_reg_data1(\stage_rf:952 ),
+ .wr_reg_addr(instr[11:7]),
+ .wr_reg_data(rf_wr_reg_data),
+ .wr_reg_en(\stage_mc:907 )
+ );
+ assign wr_mem_data = \stage_lsu:972 ;
+ assign rd_mem_en = \stage_lsu:970 ;
+ assign wr_mem_en = \stage_lsu:971 ;
+ assign rd_wr_mem_addr = \stage_lsu:973 ;
+ assign wr_mem_byte_en = \stage_lsu:974 ;
+ assign branch = \stage_br_detector:957 ;
+ assign jmp = \stage_mc:919 ;
+ assign trap = 1'h0;
+ assign target = \stage_alu:966 ;
+endmodule
+
+module if_stage_ca812405937f647b44fdbdb3a3bf576e759a7cf1(clk, reset, jmp, branch, trap, target, rd_instr_mem_data, rd_instr_mem_addr, pc, next_pc, instr, flush);
+ wire _0_;
+ wire [31:0] _1_;
+ wire [31:0] _2_;
+ input branch;
+ input clk;
+ output flush;
+ output [31:0] instr;
+ input jmp;
+ output [31:0] next_pc;
+ wire [31:0] next_pc_i;
+ output [31:0] pc;
+ reg [31:0] pc_reg;
+ output [31:0] rd_instr_mem_addr;
+ input [31:0] rd_instr_mem_data;
+ input reset;
+ wire taken;
+ input [31:0] target;
+ input trap;
+ assign _0_ = branch | jmp;
+ assign taken = _0_ | trap;
+ assign next_pc_i = pc_reg + 32'd4;
+ assign _1_ = taken ? { target[31:2], 2'h0 } : next_pc_i;
+ assign _2_ = reset ? 32'd256 : _1_;
+ always @(posedge clk)
+ pc_reg <= _2_;
+ assign rd_instr_mem_addr = pc_reg;
+ assign pc = pc_reg;
+ assign next_pc = next_pc_i;
+ assign instr = rd_instr_mem_data;
+ assign flush = taken;
+endmodule
+
+module imm_gen(payload, imm_type, imm);
+ wire _0_;
+ wire _1_;
+ wire _2_;
+ wire _3_;
+ wire _4_;
+ wire _5_;
+ wire [31:0] _6_;
+ output [31:0] imm;
+ input [2:0] imm_type;
+ input [24:0] payload;
+ assign _0_ = imm_type == 3'h0;
+ assign _1_ = imm_type == 3'h1;
+ assign _2_ = imm_type == 3'h2;
+ assign _3_ = imm_type == 3'h3;
+ assign _4_ = imm_type == 3'h4;
+ assign _5_ = imm_type == 3'h5;
+ function [31:0] \1334 ;
+ input [31:0] a;
+ input [191:0] b;
+ input [5:0] s;
+ (* parallel_case *)
+ casez (s)
+ 6'b?????1:
+ \1334 = b[31:0];
+ 6'b????1?:
+ \1334 = b[63:32];
+ 6'b???1??:
+ \1334 = b[95:64];
+ 6'b??1???:
+ \1334 = b[127:96];
+ 6'b?1????:
+ \1334 = b[159:128];
+ 6'b1?????:
+ \1334 = b[191:160];
+ default:
+ \1334 = a;
+ endcase
+ endfunction
+ assign _6_ = \1334 (32'hxxxxxxxx, { 27'h0000000, payload[19:15], payload[24], payload[24], payload[24], payload[24], payload[24], payload[24], payload[24], payload[24], payload[24], payload[24], payload[24], payload[24], payload[12:5], payload[13], payload[23:14], 1'h0, payload[24:5], 12'h000, payload[24], payload[24], payload[24], payload[24], payload[24], payload[24], payload[24], payload[24], payload[24], payload[24], payload[24], payload[24], payload[24], payload[24], payload[24], payload[24], payload[24], payload[24], payload[24], payload[24], payload[0], payload[23:18], payload[4:1], 1'h0, payload[24], payload[24], payload[24], payload[24], payload[24], payload[24], payload[24], payload[24], payload[24], payload[24], payload[24], payload[24], payload[24], payload[24], payload[24], payload[24], payload[24], payload[24], payload[24], payload[24], payload[24:18], payload[4:0], payload[24], payload[24], payload[24], payload[24], payload[24], payload[24], payload[24], payload[24], payload[24], payload[24], payload[24], payload[24], payload[24], payload[24], payload[24], payload[24], payload[24], payload[24], payload[24], payload[24], payload[24:13] }, { _5_, _4_, _3_, _2_, _1_, _0_ });
+ assign imm = _6_;
+endmodule
+
+module leaf_chip(clk, reset, rx, tx);
+ wire _00_;
+ wire _01_;
+ wire _02_;
+ wire _03_;
+ wire _04_;
+ wire _05_;
+ wire [3:0] _06_;
+ wire _07_;
+ wire _08_;
+ wire _09_;
+ wire _10_;
+ wire _11_;
+ wire _12_;
+ wire [3:0] _13_;
+ wire _14_;
+ wire [3:0] _15_;
+ wire _16_;
+ wire [3:0] _17_;
+ wire _18_;
+ wire _19_;
+ wire _20_;
+ wire _21_;
+ wire _22_;
+ wire [31:0] _23_;
+ wire _24_;
+ wire _25_;
+ wire _26_;
+ wire [15:0] _27_;
+ wire [15:0] _28_;
+ wire _29_;
+ input clk;
+ wire [31:0] core_rd_instr_mem_data;
+ wire [31:0] core_rd_mem_data;
+ wire [31:0] \leaf_core:149 ;
+ wire [31:0] \leaf_core:150 ;
+ wire \leaf_core:151 ;
+ wire \leaf_core:152 ;
+ wire [31:0] \leaf_core:153 ;
+ wire [3:0] \leaf_core:154 ;
+ wire [31:0] \leaf_ram:131 ;
+ wire [31:0] \leaf_ram:132 ;
+ wire [31:0] \leaf_rom:125 ;
+ wire [15:0] \leaf_uart:140 ;
+ wire \leaf_uart:141 ;
+ wire ram_wr;
+ wire [3:0] ram_wr_byte_en;
+ wire [31:0] ram_wr_data;
+ input reset;
+ input rx;
+ output tx;
+ wire uart_rd;
+ wire uart_wr;
+ function [31:0] \10 ;
+ input [31:0] a;
+ input [63:0] b;
+ input [1:0] s;
+ (* parallel_case *)
+ casez (s)
+ 2'b?1:
+ \10 = b[31:0];
+ 2'b1?:
+ \10 = b[63:32];
+ default:
+ \10 = a;
+ endcase
+ endfunction
+ assign core_rd_instr_mem_data = \10 (32'd19, { \leaf_ram:131 , \leaf_rom:125 }, { _09_, _00_ });
+ assign _20_ = \leaf_core:153 [1:0] == 2'h1;
+ assign _21_ = \leaf_core:153 [1:0] == 2'h2;
+ assign _22_ = \leaf_core:153 [1:0] == 2'h3;
+ function [31:0] \113 ;
+ input [31:0] a;
+ input [95:0] b;
+ input [2:0] s;
+ (* parallel_case *)
+ casez (s)
+ 3'b??1:
+ \113 = b[31:0];
+ 3'b?1?:
+ \113 = b[63:32];
+ 3'b1??:
+ \113 = b[95:64];
+ default:
+ \113 = a;
+ endcase
+ endfunction
+ assign _23_ = \113 (\leaf_core:150 , { \leaf_core:150 [7:0], \leaf_core:150 [31:8], \leaf_core:150 [15:0], \leaf_core:150 [31:16], \leaf_core:150 [23:0], \leaf_core:150 [31:24] }, { _22_, _21_, _20_ });
+ assign ram_wr_data = \leaf_core:152 ? _23_ : 32'd0;
+ assign ram_wr_byte_en = \leaf_core:152 ? _17_ : 4'h0;
+ assign ram_wr = \leaf_core:152 ? _18_ : 1'h0;
+ assign uart_wr = \leaf_core:152 ? _19_ : 1'h0;
+ assign _24_ = \leaf_core:153 [31:8] == 24'h000000;
+ assign _25_ = \leaf_core:153 [31:8] == 24'h000001;
+ assign _26_ = \leaf_core:153 [31:8] == 24'h000002;
+ function [15:0] \26 ;
+ input [15:0] a;
+ input [47:0] b;
+ input [2:0] s;
+ (* parallel_case *)
+ casez (s)
+ 3'b??1:
+ \26 = b[15:0];
+ 3'b?1?:
+ \26 = b[31:16];
+ 3'b1??:
+ \26 = b[47:32];
+ default:
+ \26 = a;
+ endcase
+ endfunction
+ assign _27_ = \26 (16'h0000, { \leaf_ram:132 [15:0], \leaf_rom:125 [15:0], \leaf_uart:140 }, { _26_, _25_, _24_ });
+ function [15:0] \30 ;
+ input [15:0] a;
+ input [47:0] b;
+ input [2:0] s;
+ (* parallel_case *)
+ casez (s)
+ 3'b??1:
+ \30 = b[15:0];
+ 3'b?1?:
+ \30 = b[31:16];
+ 3'b1??:
+ \30 = b[47:32];
+ default:
+ \30 = a;
+ endcase
+ endfunction
+ assign _28_ = \30 (16'h0000, { \leaf_ram:132 [31:16], \leaf_rom:125 [31:16], 16'h0000 }, { _26_, _25_, _24_ });
+ function [0:0] \35 ;
+ input [0:0] a;
+ input [2:0] b;
+ input [2:0] s;
+ (* parallel_case *)
+ casez (s)
+ 3'b??1:
+ \35 = b[0:0];
+ 3'b?1?:
+ \35 = b[1:1];
+ 3'b1??:
+ \35 = b[2:2];
+ default:
+ \35 = a;
+ endcase
+ endfunction
+ assign _29_ = \35 (1'h0, 3'h1, { _26_, _25_, _24_ });
+ assign core_rd_mem_data = \leaf_core:151 ? { _28_, _27_ } : 32'd0;
+ assign uart_rd = \leaf_core:151 ? _29_ : 1'h0;
+ assign _01_ = \leaf_core:153 [31:8] == 24'h000000;
+ assign _00_ = \leaf_core:149 [31:8] == 24'h000001;
+ assign _02_ = \leaf_core:153 [1:0] == 2'h0;
+ assign _03_ = \leaf_core:153 [1:0] == 2'h1;
+ assign _04_ = \leaf_core:153 [1:0] == 2'h2;
+ assign _05_ = \leaf_core:153 [1:0] == 2'h3;
+ function [3:0] \62 ;
+ input [3:0] a;
+ input [15:0] b;
+ input [3:0] s;
+ (* parallel_case *)
+ casez (s)
+ 4'b???1:
+ \62 = b[3:0];
+ 4'b??1?:
+ \62 = b[7:4];
+ 4'b?1??:
+ \62 = b[11:8];
+ 4'b1???:
+ \62 = b[15:12];
+ default:
+ \62 = a;
+ endcase
+ endfunction
+ assign _06_ = \62 (ram_wr_byte_en, 16'h8421, { _05_, _04_, _03_, _02_ });
+ assign _07_ = \leaf_core:154 == 4'h1;
+ assign _08_ = \leaf_core:153 [1:0] == 2'h0;
+ assign _10_ = \leaf_core:153 [1:0] == 2'h1;
+ assign _09_ = \leaf_core:149 [31:8] == 24'h000002;
+ assign _11_ = \leaf_core:153 [1:0] == 2'h2;
+ assign _12_ = \leaf_core:153 [1:0] == 2'h3;
+ function [3:0] \78 ;
+ input [3:0] a;
+ input [15:0] b;
+ input [3:0] s;
+ (* parallel_case *)
+ casez (s)
+ 4'b???1:
+ \78 = b[3:0];
+ 4'b??1?:
+ \78 = b[7:4];
+ 4'b?1??:
+ \78 = b[11:8];
+ 4'b1???:
+ \78 = b[15:12];
+ default:
+ \78 = a;
+ endcase
+ endfunction
+ assign _13_ = \78 (ram_wr_byte_en, 16'h8c63, { _12_, _11_, _10_, _08_ });
+ assign _14_ = \leaf_core:154 == 4'h3;
+ function [3:0] \82 ;
+ input [3:0] a;
+ input [7:0] b;
+ input [1:0] s;
+ (* parallel_case *)
+ casez (s)
+ 2'b?1:
+ \82 = b[3:0];
+ 2'b1?:
+ \82 = b[7:4];
+ default:
+ \82 = a;
+ endcase
+ endfunction
+ assign _15_ = \82 (\leaf_core:154 , { _13_, _06_ }, { _14_, _07_ });
+ assign _16_ = \leaf_core:153 [31:8] == 24'h000002;
+ function [3:0] \88 ;
+ input [3:0] a;
+ input [7:0] b;
+ input [1:0] s;
+ (* parallel_case *)
+ casez (s)
+ 2'b?1:
+ \88 = b[3:0];
+ 2'b1?:
+ \88 = b[7:4];
+ default:
+ \88 = a;
+ endcase
+ endfunction
+ assign _17_ = \88 (4'h0, { _15_, 4'h0 }, { _16_, _01_ });
+ function [0:0] \92 ;
+ input [0:0] a;
+ input [1:0] b;
+ input [1:0] s;
+ (* parallel_case *)
+ casez (s)
+ 2'b?1:
+ \92 = b[0:0];
+ 2'b1?:
+ \92 = b[1:1];
+ default:
+ \92 = a;
+ endcase
+ endfunction
+ assign _18_ = \92 (1'h0, 2'h2, { _16_, _01_ });
+ function [0:0] \96 ;
+ input [0:0] a;
+ input [1:0] b;
+ input [1:0] s;
+ (* parallel_case *)
+ casez (s)
+ 2'b?1:
+ \96 = b[0:0];
+ 2'b1?:
+ \96 = b[1:1];
+ default:
+ \96 = a;
+ endcase
+ endfunction
+ assign _19_ = \96 (1'h0, 2'h1, { _16_, _01_ });
+ core_ca812405937f647b44fdbdb3a3bf576e759a7cf1 leaf_core (
+ .clk(clk),
+ .ex_irq(1'h0),
+ .rd_instr_mem_addr(\leaf_core:149 ),
+ .rd_instr_mem_data(core_rd_instr_mem_data),
+ .rd_mem_data(core_rd_mem_data),
+ .rd_mem_en(\leaf_core:151 ),
+ .rd_wr_mem_addr(\leaf_core:153 ),
+ .reset(reset),
+ .sw_irq(1'h0),
+ .tm_irq(1'h0),
+ .wr_mem_byte_en(\leaf_core:154 ),
+ .wr_mem_data(\leaf_core:150 ),
+ .wr_mem_en(\leaf_core:152 )
+ );
+ ram_8 leaf_ram (
+ .clk(clk),
+ .rd_addr0(\leaf_core:149 [7:2]),
+ .rd_addr1(\leaf_core:153 [7:2]),
+ .rd_data0(\leaf_ram:131 ),
+ .rd_data1(\leaf_ram:132 ),
+ .wr(ram_wr),
+ .wr_addr(\leaf_core:153 [7:2]),
+ .wr_byte_en(ram_wr_byte_en),
+ .wr_data(ram_wr_data)
+ );
+ rom_8 leaf_rom (
+ .rd(1'h1),
+ .rd_addr(\leaf_core:149 [7:2]),
+ .rd_data(\leaf_rom:125 )
+ );
+ uart leaf_uart (
+ .clk(clk),
+ .rd(uart_rd),
+ .rd_addr(\leaf_core:153 [3:2]),
+ .rd_data(\leaf_uart:140 ),
+ .reset(reset),
+ .rx(rx),
+ .tx(\leaf_uart:141 ),
+ .wr(uart_wr),
+ .wr_addr(\leaf_core:153 [3:2]),
+ .wr_data(\leaf_core:150 [15:0])
+ );
+ assign tx = \leaf_uart:141 ;
+endmodule
+
+module lsu(wr_data, rd_wr_addr, data_type, mode, en, rd_mem_data, rd_data, rd_mem_en, wr_mem_en, wr_mem_data, rd_wr_mem_addr, wr_mem_byte_en);
+ wire _00_;
+ wire [31:0] _01_;
+ wire _02_;
+ wire _03_;
+ wire _04_;
+ wire _05_;
+ wire _06_;
+ wire _07_;
+ wire _08_;
+ wire _09_;
+ wire _10_;
+ wire _11_;
+ wire [31:0] _12_;
+ wire [31:0] _13_;
+ wire [31:0] _14_;
+ wire [3:0] _15_;
+ wire [31:0] data_in;
+ wire [31:0] data_out;
+ input [2:0] data_type;
+ input en;
+ input mode;
+ output [31:0] rd_data;
+ input [31:0] rd_mem_data;
+ output rd_mem_en;
+ wire rd_mem_en_i;
+ input [31:0] rd_wr_addr;
+ output [31:0] rd_wr_mem_addr;
+ input [31:0] wr_data;
+ output [3:0] wr_mem_byte_en;
+ wire [3:0] wr_mem_byte_en_i;
+ output [31:0] wr_mem_data;
+ output wr_mem_en;
+ wire wr_mem_en_i;
+ assign _00_ = ~ mode;
+ assign rd_mem_en_i = _00_ & en;
+ assign wr_mem_en_i = mode & en;
+ assign data_in = rd_mem_en_i ? rd_mem_data : _01_;
+ assign _01_ = wr_mem_en_i ? wr_data : 32'd0;
+ assign _02_ = data_type == 3'h0;
+ assign _03_ = data_type == 3'h4;
+ assign _04_ = data_type == 3'h1;
+ assign _05_ = data_type == 3'h5;
+ function [31:0] \1891 ;
+ input [31:0] a;
+ input [127:0] b;
+ input [3:0] s;
+ (* parallel_case *)
+ casez (s)
+ 4'b???1:
+ \1891 = b[31:0];
+ 4'b??1?:
+ \1891 = b[63:32];
+ 4'b?1??:
+ \1891 = b[95:64];
+ 4'b1???:
+ \1891 = b[127:96];
+ default:
+ \1891 = a;
+ endcase
+ endfunction
+ assign data_out = \1891 (data_in, { 16'h0000, data_in[15:0], data_in[15], data_in[15], data_in[15], data_in[15], data_in[15], data_in[15], data_in[15], data_in[15], data_in[15], data_in[15], data_in[15], data_in[15], data_in[15], data_in[15], data_in[15], data_in[15], data_in[15:0], 24'h000000, data_in[7:0], data_in[7], data_in[7], data_in[7], data_in[7], data_in[7], data_in[7], data_in[7], data_in[7], data_in[7], data_in[7], data_in[7], data_in[7], data_in[7], data_in[7], data_in[7], data_in[7], data_in[7], data_in[7], data_in[7], data_in[7], data_in[7], data_in[7], data_in[7], data_in[7], data_in[7:0] }, { _05_, _04_, _03_, _02_ });
+ assign _06_ = data_type == 3'h0;
+ assign _07_ = data_type == 3'h4;
+ assign _08_ = _06_ | _07_;
+ assign _09_ = data_type == 3'h1;
+ assign _10_ = data_type == 3'h5;
+ assign _11_ = _09_ | _10_;
+ function [3:0] \1908 ;
+ input [3:0] a;
+ input [7:0] b;
+ input [1:0] s;
+ (* parallel_case *)
+ casez (s)
+ 2'b?1:
+ \1908 = b[3:0];
+ 2'b1?:
+ \1908 = b[7:4];
+ default:
+ \1908 = a;
+ endcase
+ endfunction
+ assign wr_mem_byte_en_i = \1908 (4'hf, 8'h31, { _11_, _08_ });
+ assign _12_ = rd_mem_en_i ? data_out : 32'd0;
+ assign _13_ = wr_mem_en_i ? data_out : 32'd0;
+ assign _14_ = en ? rd_wr_addr : 32'd0;
+ assign _15_ = wr_mem_en_i ? wr_mem_byte_en_i : 4'h0;
+ assign rd_data = _12_;
+ assign rd_mem_en = rd_mem_en_i;
+ assign wr_mem_en = wr_mem_en_i;
+ assign wr_mem_data = _13_;
+ assign rd_wr_mem_addr = _14_;
+ assign wr_mem_byte_en = _15_;
+endmodule
+
+module main_ctrl(opcode, flush, rf_wr_reg_src, rf_wr_reg_en, ig_imm_type, alu_src0, alu_src1, alu_opd0_pass, alu_opd1_pass, alu_op_en, alu_func_type, lsu_mode, lsu_en, brd_en, csrs_wr_en, if_jmp);
+ wire _00_;
+ wire _01_;
+ wire _02_;
+ wire _03_;
+ wire _04_;
+ wire _05_;
+ wire _06_;
+ wire _07_;
+ wire _08_;
+ wire _09_;
+ wire _10_;
+ wire _11_;
+ wire [1:0] _12_;
+ wire _13_;
+ wire [1:0] _14_;
+ wire _15_;
+ wire _16_;
+ wire _17_;
+ wire _18_;
+ wire _19_;
+ wire _20_;
+ wire _21_;
+ wire _22_;
+ wire _23_;
+ wire _24_;
+ wire _25_;
+ wire _26_;
+ wire _27_;
+ wire [2:0] _28_;
+ wire [2:0] _29_;
+ wire _30_;
+ wire _31_;
+ wire _32_;
+ wire _33_;
+ wire _34_;
+ wire _35_;
+ wire _36_;
+ wire _37_;
+ wire _38_;
+ wire _39_;
+ wire _40_;
+ wire _41_;
+ wire _42_;
+ wire _43_;
+ wire _44_;
+ wire _45_;
+ wire _46_;
+ wire _47_;
+ wire _48_;
+ wire _49_;
+ wire _50_;
+ wire _51_;
+ wire _52_;
+ wire _53_;
+ wire _54_;
+ wire _55_;
+ wire _56_;
+ wire _57_;
+ wire _58_;
+ wire _59_;
+ wire _60_;
+ wire _61_;
+ wire _62_;
+ wire _63_;
+ wire _64_;
+ wire _65_;
+ wire _66_;
+ wire _67_;
+ wire _68_;
+ wire _69_;
+ output alu_func_type;
+ output alu_op_en;
+ output alu_opd0_pass;
+ output alu_opd1_pass;
+ output alu_src0;
+ output alu_src1;
+ output brd_en;
+ output csrs_wr_en;
+ input flush;
+ output if_jmp;
+ output [2:0] ig_imm_type;
+ output lsu_en;
+ output lsu_mode;
+ input [6:0] opcode;
+ output rf_wr_reg_en;
+ output [1:0] rf_wr_reg_src;
+ assign _00_ = opcode == 7'h33;
+ assign _01_ = opcode == 7'h13;
+ assign _02_ = _00_ | _01_;
+ assign _03_ = opcode == 7'h37;
+ assign _04_ = _02_ | _03_;
+ assign _05_ = opcode == 7'h17;
+ assign _06_ = _04_ | _05_;
+ assign _07_ = opcode == 7'h67;
+ assign _08_ = opcode == 7'h6f;
+ assign _09_ = _07_ | _08_;
+ assign _10_ = opcode == 7'h03;
+ assign _11_ = opcode == 7'h73;
+ function [1:0] \1090 ;
+ input [1:0] a;
+ input [7:0] b;
+ input [3:0] s;
+ (* parallel_case *)
+ casez (s)
+ 4'b???1:
+ \1090 = b[1:0];
+ 4'b??1?:
+ \1090 = b[3:2];
+ 4'b?1??:
+ \1090 = b[5:4];
+ 4'b1???:
+ \1090 = b[7:6];
+ default:
+ \1090 = a;
+ endcase
+ endfunction
+ assign _12_ = \1090 (2'h0, 8'hd8, { _11_, _10_, _09_, _06_ });
+ function [0:0] \1096 ;
+ input [0:0] a;
+ input [3:0] b;
+ input [3:0] s;
+ (* parallel_case *)
+ casez (s)
+ 4'b???1:
+ \1096 = b[0:0];
+ 4'b??1?:
+ \1096 = b[1:1];
+ 4'b?1??:
+ \1096 = b[2:2];
+ 4'b1???:
+ \1096 = b[3:3];
+ default:
+ \1096 = a;
+ endcase
+ endfunction
+ assign _13_ = \1096 (1'h0, 4'hf, { _11_, _10_, _09_, _06_ });
+ assign _14_ = flush ? 2'hx : _12_;
+ assign _15_ = flush ? 1'h0 : _13_;
+ assign _16_ = opcode == 7'h13;
+ assign _17_ = opcode == 7'h67;
+ assign _18_ = _16_ | _17_;
+ assign _19_ = opcode == 7'h03;
+ assign _20_ = _18_ | _19_;
+ assign _21_ = opcode == 7'h37;
+ assign _22_ = opcode == 7'h17;
+ assign _23_ = _21_ | _22_;
+ assign _24_ = opcode == 7'h23;
+ assign _25_ = opcode == 7'h63;
+ assign _26_ = opcode == 7'h6f;
+ assign _27_ = opcode == 7'h73;
+ function [2:0] \1132 ;
+ input [2:0] a;
+ input [17:0] b;
+ input [5:0] s;
+ (* parallel_case *)
+ casez (s)
+ 6'b?????1:
+ \1132 = b[2:0];
+ 6'b????1?:
+ \1132 = b[5:3];
+ 6'b???1??:
+ \1132 = b[8:6];
+ 6'b??1???:
+ \1132 = b[11:9];
+ 6'b?1????:
+ \1132 = b[14:12];
+ 6'b1?????:
+ \1132 = b[17:15];
+ default:
+ \1132 = a;
+ endcase
+ endfunction
+ assign _28_ = \1132 (3'hx, 18'h2c458, { _27_, _26_, _25_, _24_, _23_, _20_ });
+ assign _29_ = flush ? 3'hx : _28_;
+ assign _30_ = opcode == 7'h33;
+ assign _31_ = opcode == 7'h13;
+ assign _32_ = opcode == 7'h67;
+ assign _33_ = opcode == 7'h63;
+ assign _34_ = opcode == 7'h17;
+ assign _35_ = _33_ | _34_;
+ assign _36_ = opcode == 7'h6f;
+ assign _37_ = _35_ | _36_;
+ assign _38_ = opcode == 7'h03;
+ assign _39_ = opcode == 7'h23;
+ assign _40_ = _38_ | _39_;
+ assign _41_ = opcode == 7'h37;
+ function [0:0] \1166 ;
+ input [0:0] a;
+ input [5:0] b;
+ input [5:0] s;
+ (* parallel_case *)
+ casez (s)
+ 6'b?????1:
+ \1166 = b[0:0];
+ 6'b????1?:
+ \1166 = b[1:1];
+ 6'b???1??:
+ \1166 = b[2:2];
+ 6'b??1???:
+ \1166 = b[3:3];
+ 6'b?1????:
+ \1166 = b[4:4];
+ 6'b1?????:
+ \1166 = b[5:5];
+ default:
+ \1166 = a;
+ endcase
+ endfunction
+ assign _42_ = \1166 (1'h0, 6'bx01000, { _41_, _40_, _37_, _32_, _31_, _30_ });
+ function [0:0] \1174 ;
+ input [0:0] a;
+ input [5:0] b;
+ input [5:0] s;
+ (* parallel_case *)
+ casez (s)
+ 6'b?????1:
+ \1174 = b[0:0];
+ 6'b????1?:
+ \1174 = b[1:1];
+ 6'b???1??:
+ \1174 = b[2:2];
+ 6'b??1???:
+ \1174 = b[3:3];
+ 6'b?1????:
+ \1174 = b[4:4];
+ 6'b1?????:
+ \1174 = b[5:5];
+ default:
+ \1174 = a;
+ endcase
+ endfunction
+ assign _43_ = \1174 (1'h0, 6'h3e, { _41_, _40_, _37_, _32_, _31_, _30_ });
+ function [0:0] \1182 ;
+ input [0:0] a;
+ input [5:0] b;
+ input [5:0] s;
+ (* parallel_case *)
+ casez (s)
+ 6'b?????1:
+ \1182 = b[0:0];
+ 6'b????1?:
+ \1182 = b[1:1];
+ 6'b???1??:
+ \1182 = b[2:2];
+ 6'b??1???:
+ \1182 = b[3:3];
+ 6'b?1????:
+ \1182 = b[4:4];
+ 6'b1?????:
+ \1182 = b[5:5];
+ default:
+ \1182 = a;
+ endcase
+ endfunction
+ assign _44_ = \1182 (1'h0, 6'h1f, { _41_, _40_, _37_, _32_, _31_, _30_ });
+ function [0:0] \1190 ;
+ input [0:0] a;
+ input [5:0] b;
+ input [5:0] s;
+ (* parallel_case *)
+ casez (s)
+ 6'b?????1:
+ \1190 = b[0:0];
+ 6'b????1?:
+ \1190 = b[1:1];
+ 6'b???1??:
+ \1190 = b[2:2];
+ 6'b??1???:
+ \1190 = b[3:3];
+ 6'b?1????:
+ \1190 = b[4:4];
+ 6'b1?????:
+ \1190 = b[5:5];
+ default:
+ \1190 = a;
+ endcase
+ endfunction
+ assign _45_ = \1190 (1'h0, 6'h3f, { _41_, _40_, _37_, _32_, _31_, _30_ });
+ function [0:0] \1198 ;
+ input [0:0] a;
+ input [5:0] b;
+ input [5:0] s;
+ (* parallel_case *)
+ casez (s)
+ 6'b?????1:
+ \1198 = b[0:0];
+ 6'b????1?:
+ \1198 = b[1:1];
+ 6'b???1??:
+ \1198 = b[2:2];
+ 6'b??1???:
+ \1198 = b[3:3];
+ 6'b?1????:
+ \1198 = b[4:4];
+ 6'b1?????:
+ \1198 = b[5:5];
+ default:
+ \1198 = a;
+ endcase
+ endfunction
+ assign _46_ = \1198 (1'h0, 6'h03, { _41_, _40_, _37_, _32_, _31_, _30_ });
+ function [0:0] \1206 ;
+ input [0:0] a;
+ input [5:0] b;
+ input [5:0] s;
+ (* parallel_case *)
+ casez (s)
+ 6'b?????1:
+ \1206 = b[0:0];
+ 6'b????1?:
+ \1206 = b[1:1];
+ 6'b???1??:
+ \1206 = b[2:2];
+ 6'b??1???:
+ \1206 = b[3:3];
+ 6'b?1????:
+ \1206 = b[4:4];
+ 6'b1?????:
+ \1206 = b[5:5];
+ default:
+ \1206 = a;
+ endcase
+ endfunction
+ assign _47_ = \1206 (1'h0, 6'h02, { _41_, _40_, _37_, _32_, _31_, _30_ });
+ assign _48_ = flush ? 1'h0 : _42_;
+ assign _49_ = flush ? 1'h0 : _43_;
+ assign _50_ = flush ? 1'h0 : _44_;
+ assign _51_ = flush ? 1'h0 : _45_;
+ assign _52_ = flush ? 1'h0 : _46_;
+ assign _53_ = flush ? 1'h0 : _47_;
+ assign _54_ = opcode == 7'h03;
+ assign _55_ = opcode == 7'h23;
+ function [0:0] \1229 ;
+ input [0:0] a;
+ input [1:0] b;
+ input [1:0] s;
+ (* parallel_case *)
+ casez (s)
+ 2'b?1:
+ \1229 = b[0:0];
+ 2'b1?:
+ \1229 = b[1:1];
+ default:
+ \1229 = a;
+ endcase
+ endfunction
+ assign _56_ = \1229 (1'hx, 2'h2, { _55_, _54_ });
+ function [0:0] \1233 ;
+ input [0:0] a;
+ input [1:0] b;
+ input [1:0] s;
+ (* parallel_case *)
+ casez (s)
+ 2'b?1:
+ \1233 = b[0:0];
+ 2'b1?:
+ \1233 = b[1:1];
+ default:
+ \1233 = a;
+ endcase
+ endfunction
+ assign _57_ = \1233 (1'h0, 2'h3, { _55_, _54_ });
+ assign _58_ = flush ? 1'hx : _56_;
+ assign _59_ = flush ? 1'h0 : _57_;
+ assign _60_ = opcode == 7'h63;
+ assign _61_ = _60_ ? 1'h1 : 1'h0;
+ assign _62_ = flush ? 1'h0 : _61_;
+ assign _63_ = opcode == 7'h73;
+ assign _64_ = _63_ ? 1'h1 : 1'h0;
+ assign _65_ = opcode == 7'h67;
+ assign _66_ = opcode == 7'h6f;
+ assign _67_ = _65_ | _66_;
+ function [0:0] \1263 ;
+ input [0:0] a;
+ input [0:0] b;
+ input [0:0] s;
+ (* parallel_case *)
+ casez (s)
+ 1'b1:
+ \1263 = b[0:0];
+ default:
+ \1263 = a;
+ endcase
+ endfunction
+ assign _68_ = \1263 (1'h0, 1'h1, _67_);
+ assign _69_ = flush ? 1'h0 : _68_;
+ assign rf_wr_reg_src = _14_;
+ assign rf_wr_reg_en = _15_;
+ assign ig_imm_type = _29_;
+ assign alu_src0 = _48_;
+ assign alu_src1 = _49_;
+ assign alu_opd0_pass = _50_;
+ assign alu_opd1_pass = _51_;
+ assign alu_op_en = _52_;
+ assign alu_func_type = _53_;
+ assign lsu_mode = _58_;
+ assign lsu_en = _59_;
+ assign brd_en = _62_;
+ assign csrs_wr_en = _64_;
+ assign if_jmp = _69_;
+endmodule
+
+module piso_8(clk, clr, en, mode, load, ser);
+ wire [7:0] _0_;
+ wire [7:0] _1_;
+ input clk;
+ input clr;
+ input en;
+ reg [7:0] inter_val;
+ input [7:0] load;
+ input mode;
+ output ser;
+ assign _0_ = mode ? load : { 1'h1, inter_val[7:1] };
+ assign _1_ = en ? _0_ : inter_val;
+ always @(posedge clk, posedge clr)
+ if (clr) inter_val <= 8'hff;
+ else inter_val <= _1_;
+ assign ser = inter_val[0];
+endmodule
+
+module ram_8(clk, rd_addr0, rd_addr1, wr_addr, wr_data, wr_byte_en, wr, rd_data0, rd_data1);
+ wire _00_;
+ wire _01_;
+ wire _02_;
+ wire _03_;
+ wire [511:0] _04_;
+ wire [7:0] _05_;
+ wire [511:0] _06_;
+ wire [7:0] _07_;
+ wire [511:0] _08_;
+ wire [7:0] _09_;
+ wire [511:0] _10_;
+ wire [7:0] _11_;
+ wire [511:0] _12_;
+ wire [7:0] _13_;
+ wire [511:0] _14_;
+ wire [7:0] _15_;
+ wire [511:0] _16_;
+ wire [7:0] _17_;
+ wire [511:0] _18_;
+ wire [7:0] _19_;
+ input clk;
+ input [5:0] rd_addr0;
+ input [5:0] rd_addr1;
+ output [31:0] rd_data0;
+ output [31:0] rd_data1;
+ input wr;
+ input [5:0] wr_addr;
+ input [3:0] wr_byte_en;
+ input [31:0] wr_data;
+ reg [7:0] mem0 [63:0];
+ always @(posedge clk) begin
+ if (_00_)
+ mem0[wr_addr] <= wr_data[7:0];
+ end
+ assign _05_ = mem0[rd_addr1];
+ assign _07_ = mem0[rd_addr0];
+ reg [7:0] mem1 [63:0];
+ always @(posedge clk) begin
+ if (_01_)
+ mem1[wr_addr] <= wr_data[15:8];
+ end
+ assign _09_ = mem1[rd_addr1];
+ assign _11_ = mem1[rd_addr0];
+ reg [7:0] mem2 [63:0];
+ always @(posedge clk) begin
+ if (_02_)
+ mem2[wr_addr] <= wr_data[23:16];
+ end
+ assign _13_ = mem2[rd_addr1];
+ assign _15_ = mem2[rd_addr0];
+ reg [7:0] mem3 [63:0];
+ always @(posedge clk) begin
+ if (_03_)
+ mem3[wr_addr] <= wr_data[31:24];
+ end
+ assign _17_ = mem3[rd_addr1];
+ assign _19_ = mem3[rd_addr0];
+ assign _00_ = wr_byte_en[0] & wr;
+ assign _01_ = wr_byte_en[1] & wr;
+ assign _02_ = wr_byte_en[2] & wr;
+ assign _03_ = wr_byte_en[3] & wr;
+ assign rd_data0 = { _19_, _15_, _11_, _07_ };
+ assign rd_data1 = { _17_, _13_, _09_, _05_ };
+endmodule
+
+module reg_file(clk, rd_reg_addr0, rd_reg_addr1, wr_reg_addr, wr_reg_data, wr_reg_en, rd_reg_data0, rd_reg_data1);
+ wire _0_;
+ wire _1_;
+ wire _2_;
+ wire [31:0] _3_;
+ wire _4_;
+ wire [31:0] _5_;
+ wire [1023:0] _6_;
+ wire [31:0] _7_;
+ wire [1023:0] _8_;
+ wire [31:0] _9_;
+ input clk;
+ input [4:0] rd_reg_addr0;
+ input [4:0] rd_reg_addr1;
+ output [31:0] rd_reg_data0;
+ output [31:0] rd_reg_data1;
+ input [4:0] wr_reg_addr;
+ input [31:0] wr_reg_data;
+ input wr_reg_en;
+ reg [31:0] regs [31:0];
+ always @(posedge clk) begin
+ if (_0_)
+ regs[wr_reg_addr] <= wr_reg_data;
+ end
+ assign _7_ = regs[rd_reg_addr1];
+ assign _9_ = regs[rd_reg_addr0];
+ assign _0_ = wr_reg_en & _1_;
+ assign _1_ = wr_reg_addr != 5'h00;
+ assign _2_ = rd_reg_addr0 == 5'h00;
+ assign _3_ = _2_ ? 32'd0 : _9_;
+ assign _4_ = rd_reg_addr1 == 5'h00;
+ assign _5_ = _4_ ? 32'd0 : _7_;
+ assign rd_reg_data0 = _3_;
+ assign rd_reg_data1 = _5_;
+endmodule
+
+module rom_8(rd, rd_addr, rd_data);
+ wire [5:0] _0_;
+ wire [31:0] _1_;
+ wire [2047:0] _2_;
+ wire [31:0] _3_;
+ input rd;
+ input [5:0] rd_addr;
+ output [31:0] rd_data;
+ reg [31:0] \178 [63:0];
+ initial begin
+ \178 [0] = 32'd19;
+ \178 [1] = 32'd19;
+ \178 [2] = 32'd19;
+ \178 [3] = 32'd19;
+ \178 [4] = 32'd19;
+ \178 [5] = 32'd19;
+ \178 [6] = 32'd19;
+ \178 [7] = 32'd19;
+ \178 [8] = 32'd19;
+ \178 [9] = 32'd19;
+ \178 [10] = 32'd19;
+ \178 [11] = 32'd19;
+ \178 [12] = 32'd19;
+ \178 [13] = 32'd19;
+ \178 [14] = 32'd19;
+ \178 [15] = 32'd19;
+ \178 [16] = 32'd19;
+ \178 [17] = 32'd19;
+ \178 [18] = 32'd19;
+ \178 [19] = 32'd19;
+ \178 [20] = 32'd19;
+ \178 [21] = 32'd19;
+ \178 [22] = 32'd19;
+ \178 [23] = 32'd19;
+ \178 [24] = 32'd19;
+ \178 [25] = 32'd19;
+ \178 [26] = 32'd19;
+ \178 [27] = 32'd19;
+ \178 [28] = 32'd19;
+ \178 [29] = 32'd19;
+ \178 [30] = 32'd19;
+ \178 [31] = 32'd19;
+ \178 [32] = 32'd19;
+ \178 [33] = 32'd19;
+ \178 [34] = 32'd19;
+ \178 [35] = 32'd19;
+ \178 [36] = 32'd19;
+ \178 [37] = 32'd32871;
+ \178 [38] = 32'd12592387;
+ \178 [39] = 32'd4291009763;
+ \178 [40] = 32'd4453267;
+ \178 [41] = 32'd17283;
+ \178 [42] = 32'd4197907;
+ \178 [43] = 32'd915;
+ \178 [44] = 32'd188743791;
+ \178 [45] = 32'd4266879715;
+ \178 [46] = 32'd1245971;
+ \178 [47] = 32'd547553315;
+ \178 [48] = 32'd20971759;
+ \178 [49] = 32'd787;
+ \178 [50] = 32'd4267700335;
+ \178 [51] = 32'd5469283;
+ \178 [52] = 32'd268436243;
+ \178 [53] = 32'd328339;
+ \178 [54] = 32'd46137583;
+ \178 [55] = 32'd4272069859;
+ \178 [56] = 32'd54526191;
+ \178 [57] = 32'd124781203;
+ \178 [58] = 32'd5248035;
+ \178 [59] = 32'd455082643;
+ \178 [60] = 32'd3603;
+ \178 [61] = 32'd915;
+ \178 [62] = 32'd787;
+ \178 [63] = 32'd659;
+ end
+ assign _3_ = \178 [_0_];
+ assign _0_ = 6'h3f - rd_addr;
+ assign _1_ = rd ? _3_ : 32'd0;
+ assign rd_data = _1_;
+endmodule
+
+module sipo_8(clk, clr, en, ser, val);
+ wire [7:0] _0_;
+ input clk;
+ input clr;
+ input en;
+ reg [7:0] inter_val;
+ input ser;
+ output [7:0] val;
+ assign _0_ = en ? { ser, inter_val[7:1] } : inter_val;
+ always @(posedge clk, posedge clr)
+ if (clr) inter_val <= 8'hff;
+ else inter_val <= _0_;
+ assign val = inter_val;
+endmodule
+
+module uart(clk, reset, rd, rd_addr, wr, wr_addr, wr_data, rx, rd_data, tx);
+ wire [1:0] _00_;
+ wire [7:0] _01_;
+ wire [15:0] _02_;
+ wire _03_;
+ wire _04_;
+ wire [15:0] _05_;
+ wire _06_;
+ wire _07_;
+ wire _08_;
+ wire _09_;
+ wire _10_;
+ wire _11_;
+ wire _12_;
+ wire _13_;
+ wire [5:0] _14_;
+ reg [15:0] baud_div;
+ input clk;
+ input rd;
+ input [1:0] rd_addr;
+ output [15:0] rd_data;
+ wire \receiver:323 ;
+ wire [7:0] \receiver:324 ;
+ wire \receiver:325 ;
+ input reset;
+ input rx;
+ wire \rx_fifo:314 ;
+ wire \rx_fifo:315 ;
+ wire [7:0] \rx_fifo:316 ;
+ wire rx_fifo_rd;
+ wire \transmitter:348 ;
+ wire \transmitter:349 ;
+ wire \transmitter:350 ;
+ output tx;
+ wire \tx_fifo:339 ;
+ wire \tx_fifo:340 ;
+ wire [7:0] \tx_fifo:341 ;
+ wire tx_fifo_wr;
+ input wr;
+ input [1:0] wr_addr;
+ input [15:0] wr_data;
+ assign _03_ = wr_addr == 2'h2;
+ assign _04_ = wr & _03_;
+ assign _05_ = _04_ ? wr_data : baud_div;
+ always @(posedge clk, posedge reset)
+ if (reset) baud_div <= 16'hffff;
+ else baud_div <= _05_;
+ assign _06_ = rd_addr == 2'h3;
+ assign _07_ = rd & _06_;
+ assign rx_fifo_rd = _07_ ? 1'h1 : 1'h0;
+ assign _08_ = wr_addr == 2'h3;
+ assign _09_ = wr & _08_;
+ assign tx_fifo_wr = _09_ ? 1'h1 : 1'h0;
+ assign _10_ = rd_addr == 2'h0;
+ assign _11_ = rd_addr == 2'h1;
+ assign _12_ = rd_addr == 2'h2;
+ assign _13_ = rd_addr == 2'h3;
+ function [5:0] \376 ;
+ input [5:0] a;
+ input [23:0] b;
+ input [3:0] s;
+ (* parallel_case *)
+ casez (s)
+ 4'b???1:
+ \376 = b[5:0];
+ 4'b??1?:
+ \376 = b[11:6];
+ 4'b?1??:
+ \376 = b[17:12];
+ 4'b1???:
+ \376 = b[23:18];
+ default:
+ \376 = a;
+ endcase
+ endfunction
+ assign _14_ = \376 (6'h00, { \rx_fifo:316 [5:0], baud_div[5:0], 6'h00, \tx_fifo:339 , \rx_fifo:314 , \tx_fifo:340 , \rx_fifo:315 , \transmitter:349 , \receiver:325 }, { _13_, _12_, _11_, _10_ });
+ function [1:0] \382 ;
+ input [1:0] a;
+ input [7:0] b;
+ input [3:0] s;
+ (* parallel_case *)
+ casez (s)
+ 4'b???1:
+ \382 = b[1:0];
+ 4'b??1?:
+ \382 = b[3:2];
+ 4'b?1??:
+ \382 = b[5:4];
+ 4'b1???:
+ \382 = b[7:6];
+ default:
+ \382 = a;
+ endcase
+ endfunction
+ assign _00_ = \382 (2'h0, { \rx_fifo:316 [7:6], baud_div[7:6], 4'h0 }, { _13_, _12_, _11_, _10_ });
+ function [7:0] \387 ;
+ input [7:0] a;
+ input [31:0] b;
+ input [3:0] s;
+ (* parallel_case *)
+ casez (s)
+ 4'b???1:
+ \387 = b[7:0];
+ 4'b??1?:
+ \387 = b[15:8];
+ 4'b?1??:
+ \387 = b[23:16];
+ 4'b1???:
+ \387 = b[31:24];
+ default:
+ \387 = a;
+ endcase
+ endfunction
+ assign _01_ = \387 (8'h00, { 8'h00, baud_div[15:8], 16'h0300 }, { _13_, _12_, _11_, _10_ });
+ assign _02_ = rd ? { _01_, _00_, _14_ } : 16'h0000;
+ uart_rx receiver (
+ .baud_div(baud_div),
+ .busy(\receiver:325 ),
+ .clk(clk),
+ .reset(reset),
+ .rx(rx),
+ .wr(\receiver:323 ),
+ .wr_data(\receiver:324 ),
+ .wr_en(\rx_fifo:314 )
+ );
+ fifo_8_8 rx_fifo (
+ .clk(clk),
+ .rd(rx_fifo_rd),
+ .rd_data(\rx_fifo:316 ),
+ .rd_en(\rx_fifo:315 ),
+ .reset(reset),
+ .wr(\receiver:323 ),
+ .wr_data(\receiver:324 ),
+ .wr_en(\rx_fifo:314 )
+ );
+ uart_tx transmitter (
+ .baud_div(baud_div),
+ .busy(\transmitter:349 ),
+ .clk(clk),
+ .rd(\transmitter:348 ),
+ .rd_data(\tx_fifo:341 ),
+ .rd_en(\tx_fifo:340 ),
+ .reset(reset),
+ .tx(\transmitter:350 )
+ );
+ fifo_8_8 tx_fifo (
+ .clk(clk),
+ .rd(\transmitter:348 ),
+ .rd_data(\tx_fifo:341 ),
+ .rd_en(\tx_fifo:340 ),
+ .reset(reset),
+ .wr(tx_fifo_wr),
+ .wr_data(wr_data[7:0]),
+ .wr_en(\tx_fifo:339 )
+ );
+ assign rd_data = _02_;
+ assign tx = \transmitter:350 ;
+endmodule
+
+module uart_rx(clk, reset, baud_div, wr_en, rx, wr, wr_data, busy);
+ wire [2:0] _00_;
+ wire _01_;
+ wire _02_;
+ wire _03_;
+ wire [2:0] _04_;
+ wire _05_;
+ wire [2:0] _06_;
+ wire _07_;
+ wire _08_;
+ wire [2:0] _09_;
+ wire _10_;
+ wire [2:0] _11_;
+ wire _12_;
+ wire _13_;
+ wire _14_;
+ wire _15_;
+ wire _16_;
+ wire _17_;
+ wire _18_;
+ wire _19_;
+ wire _20_;
+ wire _21_;
+ wire _22_;
+ wire _23_;
+ wire _24_;
+ wire _25_;
+ wire _26_;
+ wire _27_;
+ wire _28_;
+ wire _29_;
+ wire _30_;
+ wire _31_;
+ wire [15:0] \baud_counter:668 ;
+ wire baud_counter_clr;
+ wire baud_counter_en;
+ wire [15:0] baud_counter_load;
+ wire baud_counter_mode;
+ wire baud_counter_tc;
+ input [15:0] baud_div;
+ output busy;
+ input clk;
+ reg [2:0] curr_state;
+ wire [2:0] next_state;
+ input reset;
+ input rx;
+ wire [2:0] \rx_counter:687 ;
+ wire rx_counter_clr;
+ wire rx_counter_en;
+ wire rx_counter_tc;
+ wire [7:0] \rx_sipo:702 ;
+ wire rx_sipo_clr;
+ wire rx_sipo_en;
+ output wr;
+ output [7:0] wr_data;
+ input wr_en;
+ assign _00_ = reset ? 3'h0 : next_state;
+ always @(posedge clk)
+ curr_state <= _00_;
+ assign _01_ = curr_state == 3'h0;
+ assign _02_ = ~ rx;
+ assign _03_ = wr_en & _02_;
+ assign _04_ = _03_ ? 3'h2 : 3'h1;
+ assign _05_ = curr_state == 3'h1;
+ assign _06_ = baud_counter_tc ? 3'h3 : 3'h2;
+ assign _07_ = curr_state == 3'h2;
+ assign _08_ = baud_counter_tc & rx_counter_tc;
+ assign _09_ = _08_ ? 3'h4 : 3'h3;
+ assign _10_ = curr_state == 3'h3;
+ assign _11_ = baud_counter_tc ? 3'h1 : 3'h4;
+ assign _12_ = curr_state == 3'h4;
+ function [2:0] \639 ;
+ input [2:0] a;
+ input [14:0] b;
+ input [4:0] s;
+ (* parallel_case *)
+ casez (s)
+ 5'b????1:
+ \639 = b[2:0];
+ 5'b???1?:
+ \639 = b[5:3];
+ 5'b??1??:
+ \639 = b[8:6];
+ 5'b?1???:
+ \639 = b[11:9];
+ 5'b1????:
+ \639 = b[14:12];
+ default:
+ \639 = a;
+ endcase
+ endfunction
+ assign next_state = \639 (3'hx, { _11_, _09_, _06_, _04_, 3'h1 }, { _12_, _10_, _07_, _05_, _01_ });
+ assign _13_ = curr_state == 3'h2;
+ assign baud_counter_load = _13_ ? { 1'h0, baud_div[15:1] } : baud_div;
+ assign _14_ = \baud_counter:668 == 16'h0000;
+ assign baud_counter_tc = _14_ ? 1'h1 : 1'h0;
+ assign _15_ = curr_state == 3'h0;
+ assign baud_counter_clr = _15_ ? 1'h1 : 1'h0;
+ assign _16_ = curr_state == 3'h0;
+ assign baud_counter_en = _16_ ? 1'h0 : 1'h1;
+ assign _17_ = curr_state == 3'h1;
+ assign _18_ = _17_ | baud_counter_tc;
+ assign baud_counter_mode = _18_ ? 1'h1 : 1'h0;
+ assign _19_ = \rx_counter:687 == 3'h0;
+ assign rx_counter_tc = _19_ ? 1'h1 : 1'h0;
+ assign _20_ = curr_state == 3'h0;
+ assign rx_counter_clr = _20_ ? 1'h1 : 1'h0;
+ assign _21_ = curr_state == 3'h3;
+ assign rx_counter_en = _21_ ? baud_counter_tc : 1'h0;
+ assign _22_ = curr_state == 3'h0;
+ assign rx_sipo_clr = _22_ ? 1'h1 : 1'h0;
+ assign _23_ = curr_state == 3'h2;
+ assign _24_ = curr_state == 3'h3;
+ assign _25_ = _23_ | _24_;
+ assign rx_sipo_en = _25_ ? baud_counter_tc : 1'h0;
+ assign _26_ = curr_state == 3'h4;
+ assign _27_ = next_state == 3'h1;
+ assign _28_ = _26_ & _27_;
+ assign _29_ = _28_ ? 1'h1 : 1'h0;
+ assign _30_ = curr_state == 3'h1;
+ assign _31_ = _30_ ? 1'h0 : 1'h1;
+ down_counter_16 baud_counter (
+ .clk(clk),
+ .clr(baud_counter_clr),
+ .en(baud_counter_en),
+ .load(baud_counter_load),
+ .mode(baud_counter_mode),
+ .val(\baud_counter:668 )
+ );
+ down_counter_3 rx_counter (
+ .clk(clk),
+ .clr(rx_counter_clr),
+ .en(rx_counter_en),
+ .load(3'h7),
+ .mode(1'h0),
+ .val(\rx_counter:687 )
+ );
+ sipo_8 rx_sipo (
+ .clk(clk),
+ .clr(rx_sipo_clr),
+ .en(rx_sipo_en),
+ .ser(rx),
+ .val(\rx_sipo:702 )
+ );
+ assign wr = _29_;
+ assign wr_data = \rx_sipo:702 ;
+ assign busy = _31_;
+endmodule
+
+module uart_tx(clk, reset, baud_div, rd_en, rd_data, rd, busy, tx);
+ wire [2:0] _00_;
+ wire _01_;
+ wire [2:0] _02_;
+ wire _03_;
+ wire [2:0] _04_;
+ wire _05_;
+ wire _06_;
+ wire [2:0] _07_;
+ wire _08_;
+ wire [2:0] _09_;
+ wire _10_;
+ wire _11_;
+ wire _12_;
+ wire _13_;
+ wire _14_;
+ wire _15_;
+ wire _16_;
+ wire _17_;
+ wire _18_;
+ wire _19_;
+ wire _20_;
+ wire _21_;
+ wire _22_;
+ wire _23_;
+ wire _24_;
+ wire _25_;
+ wire _26_;
+ wire _27_;
+ wire _28_;
+ wire _29_;
+ wire _30_;
+ wire _31_;
+ wire _32_;
+ wire [15:0] \baud_counter:779 ;
+ wire baud_counter_clr;
+ wire baud_counter_en;
+ wire baud_counter_mode;
+ wire baud_counter_tc;
+ input [15:0] baud_div;
+ output busy;
+ input clk;
+ reg [2:0] curr_state;
+ wire [2:0] next_state;
+ output rd;
+ input [7:0] rd_data;
+ input rd_en;
+ input reset;
+ output tx;
+ wire tx_bit;
+ wire [2:0] \tx_counter:798 ;
+ wire tx_counter_clr;
+ wire tx_counter_en;
+ wire tx_counter_tc;
+ wire \tx_piso:818 ;
+ wire tx_piso_clr;
+ wire tx_piso_en;
+ wire tx_piso_mode;
+ assign _00_ = reset ? 3'h0 : next_state;
+ always @(posedge clk)
+ curr_state <= _00_;
+ assign _01_ = curr_state == 3'h0;
+ assign _02_ = rd_en ? 3'h2 : 3'h1;
+ assign _03_ = curr_state == 3'h1;
+ assign _04_ = baud_counter_tc ? 3'h3 : 3'h2;
+ assign _05_ = curr_state == 3'h2;
+ assign _06_ = baud_counter_tc & tx_counter_tc;
+ assign _07_ = _06_ ? 3'h4 : 3'h3;
+ assign _08_ = curr_state == 3'h3;
+ assign _09_ = baud_counter_tc ? 3'h1 : 3'h4;
+ assign _10_ = curr_state == 3'h4;
+ function [2:0] \756 ;
+ input [2:0] a;
+ input [14:0] b;
+ input [4:0] s;
+ (* parallel_case *)
+ casez (s)
+ 5'b????1:
+ \756 = b[2:0];
+ 5'b???1?:
+ \756 = b[5:3];
+ 5'b??1??:
+ \756 = b[8:6];
+ 5'b?1???:
+ \756 = b[11:9];
+ 5'b1????:
+ \756 = b[14:12];
+ default:
+ \756 = a;
+ endcase
+ endfunction
+ assign next_state = \756 (3'hx, { _09_, _07_, _04_, _02_, 3'h1 }, { _10_, _08_, _05_, _03_, _01_ });
+ assign _11_ = \baud_counter:779 == 16'h0000;
+ assign baud_counter_tc = _11_ ? 1'h1 : 1'h0;
+ assign _12_ = curr_state == 3'h0;
+ assign baud_counter_clr = _12_ ? 1'h1 : 1'h0;
+ assign _13_ = curr_state == 3'h0;
+ assign baud_counter_en = _13_ ? 1'h0 : 1'h1;
+ assign _14_ = curr_state == 3'h1;
+ assign _15_ = _14_ | baud_counter_tc;
+ assign baud_counter_mode = _15_ ? 1'h1 : 1'h0;
+ assign _16_ = \tx_counter:798 == 3'h0;
+ assign tx_counter_tc = _16_ ? 1'h1 : 1'h0;
+ assign _17_ = curr_state == 3'h0;
+ assign tx_counter_clr = _17_ ? 1'h1 : 1'h0;
+ assign _18_ = curr_state == 3'h3;
+ assign tx_counter_en = _18_ ? baud_counter_tc : 1'h0;
+ assign _19_ = curr_state == 3'h0;
+ assign tx_piso_clr = _19_ ? 1'h1 : 1'h0;
+ assign _20_ = curr_state == 3'h2;
+ assign _21_ = curr_state == 3'h3;
+ assign _22_ = _20_ | _21_;
+ assign tx_piso_en = _22_ ? baud_counter_tc : 1'h0;
+ assign _23_ = curr_state == 3'h2;
+ assign tx_piso_mode = _23_ ? 1'h1 : 1'h0;
+ assign _24_ = curr_state == 3'h1;
+ assign _25_ = next_state == 3'h2;
+ assign _26_ = _24_ & _25_;
+ assign _27_ = _26_ ? 1'h1 : 1'h0;
+ assign _28_ = curr_state == 3'h2;
+ assign tx_bit = _28_ ? 1'h0 : 1'h1;
+ assign _29_ = curr_state == 3'h3;
+ assign _30_ = _29_ ? \tx_piso:818 : tx_bit;
+ assign _31_ = curr_state == 3'h1;
+ assign _32_ = _31_ ? 1'h0 : 1'h1;
+ down_counter_16 baud_counter (
+ .clk(clk),
+ .clr(baud_counter_clr),
+ .en(baud_counter_en),
+ .load(baud_div),
+ .mode(baud_counter_mode),
+ .val(\baud_counter:779 )
+ );
+ down_counter_3 tx_counter (
+ .clk(clk),
+ .clr(tx_counter_clr),
+ .en(tx_counter_en),
+ .load(3'h7),
+ .mode(1'h0),
+ .val(\tx_counter:798 )
+ );
+ piso_8 tx_piso (
+ .clk(clk),
+ .clr(tx_piso_clr),
+ .en(tx_piso_en),
+ .load(rd_data),
+ .mode(tx_piso_mode),
+ .ser(\tx_piso:818 )
+ );
+ assign rd = _27_;
+ assign busy = _32_;
+ assign tx = _30_;
+endmodule