blob: c8e22a78e41267a1259771632e6e1c98104ca760 [file] [log] [blame]
/* 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