From e6054811cd05f4932cdc4b269c8d655bc1b34fe1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=8BLaraib=20Khan?= <​laraib.khan@lampromellon.com> Date: Tue, 1 Dec 2020 11:44:51 +0500 Subject: [PATCH] axi to ahb update --- axi4_to_ahb.fir | 81 ++++++------- axi4_to_ahb.v | 110 +++++++++--------- src/main/scala/lib/axi4_to_ahb.scala | 8 +- .../scala-2.12/classes/lib/axi4_to_ahb.class | Bin 106764 -> 106872 bytes 4 files changed, 101 insertions(+), 98 deletions(-) diff --git a/axi4_to_ahb.fir b/axi4_to_ahb.fir index bed1eaae..c72bfbb9 100644 --- a/axi4_to_ahb.fir +++ b/axi4_to_ahb.fir @@ -507,6 +507,7 @@ circuit axi4_to_ahb : buf_nxtstate <= _T_51 @[axi4_to_ahb.scala 249:20] node _T_52 = and(master_valid, UInt<1>("h01")) @[axi4_to_ahb.scala 250:36] buf_state_en <= _T_52 @[axi4_to_ahb.scala 250:20] + buf_wr_en <= buf_state_en @[axi4_to_ahb.scala 251:17] node _T_53 = eq(buf_nxtstate, UInt<3>("h02")) @[axi4_to_ahb.scala 252:54] node _T_54 = and(buf_state_en, _T_53) @[axi4_to_ahb.scala 252:38] buf_data_wr_en <= _T_54 @[axi4_to_ahb.scala 252:22] @@ -592,6 +593,7 @@ circuit axi4_to_ahb : node _T_122 = eq(_T_121, UInt<3>("h06")) @[axi4_to_ahb.scala 266:174] node _T_123 = and(_T_116, _T_122) @[axi4_to_ahb.scala 266:88] master_ready <= _T_123 @[axi4_to_ahb.scala 266:20] + buf_wr_en <= master_ready @[axi4_to_ahb.scala 267:17] node _T_124 = and(master_ready, master_valid) @[axi4_to_ahb.scala 268:33] bypass_en <= _T_124 @[axi4_to_ahb.scala 268:17] node _T_125 = bits(bypass_en, 0, 0) @[axi4_to_ahb.scala 269:47] @@ -617,48 +619,49 @@ circuit axi4_to_ahb : node _T_140 = eq(_T_139, UInt<1>("h00")) @[axi4_to_ahb.scala 274:55] node _T_141 = and(_T_136, _T_140) @[axi4_to_ahb.scala 274:53] master_ready <= _T_141 @[axi4_to_ahb.scala 274:20] - node _T_142 = bits(ahb_hresp_q, 0, 0) @[axi4_to_ahb.scala 276:45] - node _T_143 = and(master_valid, master_ready) @[axi4_to_ahb.scala 276:82] - node _T_144 = bits(master_opc, 2, 0) @[axi4_to_ahb.scala 276:110] - node _T_145 = eq(_T_144, UInt<1>("h00")) @[axi4_to_ahb.scala 276:117] - node _T_146 = and(_T_143, _T_145) @[axi4_to_ahb.scala 276:97] - node _T_147 = bits(_T_146, 0, 0) @[axi4_to_ahb.scala 276:138] - node _T_148 = mux(_T_147, UInt<3>("h06"), UInt<3>("h03")) @[axi4_to_ahb.scala 276:67] - node _T_149 = mux(_T_142, UInt<3>("h07"), _T_148) @[axi4_to_ahb.scala 276:26] - buf_nxtstate <= _T_149 @[axi4_to_ahb.scala 276:20] - node _T_150 = or(ahb_hready_q, ahb_hresp_q) @[axi4_to_ahb.scala 277:37] - buf_state_en <= _T_150 @[axi4_to_ahb.scala 277:20] + node _T_142 = and(master_valid, master_ready) @[axi4_to_ahb.scala 275:34] + node _T_143 = bits(master_opc, 2, 0) @[axi4_to_ahb.scala 275:62] + node _T_144 = eq(_T_143, UInt<1>("h00")) @[axi4_to_ahb.scala 275:69] + node _T_145 = and(_T_142, _T_144) @[axi4_to_ahb.scala 275:49] + buf_wr_en <= _T_145 @[axi4_to_ahb.scala 275:17] + node _T_146 = bits(ahb_hresp_q, 0, 0) @[axi4_to_ahb.scala 276:45] + node _T_147 = and(master_valid, master_ready) @[axi4_to_ahb.scala 276:82] + node _T_148 = bits(master_opc, 2, 0) @[axi4_to_ahb.scala 276:110] + node _T_149 = eq(_T_148, UInt<1>("h00")) @[axi4_to_ahb.scala 276:117] + node _T_150 = and(_T_147, _T_149) @[axi4_to_ahb.scala 276:97] + node _T_151 = bits(_T_150, 0, 0) @[axi4_to_ahb.scala 276:138] + node _T_152 = mux(_T_151, UInt<3>("h06"), UInt<3>("h03")) @[axi4_to_ahb.scala 276:67] + node _T_153 = mux(_T_146, UInt<3>("h07"), _T_152) @[axi4_to_ahb.scala 276:26] + buf_nxtstate <= _T_153 @[axi4_to_ahb.scala 276:20] + node _T_154 = or(ahb_hready_q, ahb_hresp_q) @[axi4_to_ahb.scala 277:37] + buf_state_en <= _T_154 @[axi4_to_ahb.scala 277:20] buf_data_wr_en <= buf_state_en @[axi4_to_ahb.scala 278:22] slvbuf_error_in <= ahb_hresp_q @[axi4_to_ahb.scala 279:23] slvbuf_error_en <= buf_state_en @[axi4_to_ahb.scala 280:23] - node _T_151 = eq(ahb_hresp_q, UInt<1>("h00")) @[axi4_to_ahb.scala 281:41] - node _T_152 = and(buf_state_en, _T_151) @[axi4_to_ahb.scala 281:39] - slave_valid_pre <= _T_152 @[axi4_to_ahb.scala 281:23] - node _T_153 = eq(master_valid, UInt<1>("h00")) @[axi4_to_ahb.scala 282:34] - node _T_154 = and(buf_state_en, _T_153) @[axi4_to_ahb.scala 282:32] - cmd_done <= _T_154 @[axi4_to_ahb.scala 282:16] - node _T_155 = and(master_ready, master_valid) @[axi4_to_ahb.scala 283:33] - node _T_156 = eq(buf_nxtstate, UInt<3>("h06")) @[axi4_to_ahb.scala 283:64] - node _T_157 = and(_T_155, _T_156) @[axi4_to_ahb.scala 283:48] - node _T_158 = and(_T_157, buf_state_en) @[axi4_to_ahb.scala 283:79] - bypass_en <= _T_158 @[axi4_to_ahb.scala 283:17] - node _T_159 = bits(bypass_en, 0, 0) @[axi4_to_ahb.scala 284:47] - node _T_160 = bits(master_addr, 2, 0) @[axi4_to_ahb.scala 284:62] - node _T_161 = bits(buf_addr, 2, 0) @[axi4_to_ahb.scala 284:78] - node _T_162 = mux(_T_159, _T_160, _T_161) @[axi4_to_ahb.scala 284:30] - buf_cmd_byte_ptr <= _T_162 @[axi4_to_ahb.scala 284:24] - node _T_163 = neq(buf_nxtstate, UInt<3>("h06")) @[axi4_to_ahb.scala 285:59] - node _T_164 = and(_T_163, buf_state_en) @[axi4_to_ahb.scala 285:74] - node _T_165 = eq(_T_164, UInt<1>("h00")) @[axi4_to_ahb.scala 285:43] - node _T_166 = bits(_T_165, 0, 0) @[Bitwise.scala 72:15] - node _T_167 = mux(_T_166, UInt<2>("h03"), UInt<2>("h00")) @[Bitwise.scala 72:12] - node _T_168 = and(UInt<2>("h02"), _T_167) @[axi4_to_ahb.scala 285:32] - io.ahb_htrans <= _T_168 @[axi4_to_ahb.scala 285:21] - node _T_169 = and(master_valid, master_ready) @[axi4_to_ahb.scala 286:37] - node _T_170 = bits(master_opc, 2, 0) @[axi4_to_ahb.scala 286:65] - node _T_171 = eq(_T_170, UInt<1>("h00")) @[axi4_to_ahb.scala 286:72] - node _T_172 = and(_T_169, _T_171) @[axi4_to_ahb.scala 286:52] - slvbuf_wr_en <= _T_172 @[axi4_to_ahb.scala 286:20] + node _T_155 = eq(ahb_hresp_q, UInt<1>("h00")) @[axi4_to_ahb.scala 281:41] + node _T_156 = and(buf_state_en, _T_155) @[axi4_to_ahb.scala 281:39] + slave_valid_pre <= _T_156 @[axi4_to_ahb.scala 281:23] + node _T_157 = eq(master_valid, UInt<1>("h00")) @[axi4_to_ahb.scala 282:34] + node _T_158 = and(buf_state_en, _T_157) @[axi4_to_ahb.scala 282:32] + cmd_done <= _T_158 @[axi4_to_ahb.scala 282:16] + node _T_159 = and(master_ready, master_valid) @[axi4_to_ahb.scala 283:33] + node _T_160 = eq(buf_nxtstate, UInt<3>("h06")) @[axi4_to_ahb.scala 283:64] + node _T_161 = and(_T_159, _T_160) @[axi4_to_ahb.scala 283:48] + node _T_162 = and(_T_161, buf_state_en) @[axi4_to_ahb.scala 283:79] + bypass_en <= _T_162 @[axi4_to_ahb.scala 283:17] + node _T_163 = bits(bypass_en, 0, 0) @[axi4_to_ahb.scala 284:47] + node _T_164 = bits(master_addr, 2, 0) @[axi4_to_ahb.scala 284:62] + node _T_165 = bits(buf_addr, 2, 0) @[axi4_to_ahb.scala 284:78] + node _T_166 = mux(_T_163, _T_164, _T_165) @[axi4_to_ahb.scala 284:30] + buf_cmd_byte_ptr <= _T_166 @[axi4_to_ahb.scala 284:24] + node _T_167 = neq(buf_nxtstate, UInt<3>("h06")) @[axi4_to_ahb.scala 285:59] + node _T_168 = and(_T_167, buf_state_en) @[axi4_to_ahb.scala 285:74] + node _T_169 = eq(_T_168, UInt<1>("h00")) @[axi4_to_ahb.scala 285:43] + node _T_170 = bits(_T_169, 0, 0) @[Bitwise.scala 72:15] + node _T_171 = mux(_T_170, UInt<2>("h03"), UInt<2>("h00")) @[Bitwise.scala 72:12] + node _T_172 = and(UInt<2>("h02"), _T_171) @[axi4_to_ahb.scala 285:32] + io.ahb_htrans <= _T_172 @[axi4_to_ahb.scala 285:21] + slvbuf_wr_en <= buf_wr_en @[axi4_to_ahb.scala 286:20] skip @[Conditional.scala 39:67] else : @[Conditional.scala 39:67] node _T_173 = eq(UInt<3>("h07"), buf_state) @[Conditional.scala 37:30] diff --git a/axi4_to_ahb.v b/axi4_to_ahb.v index c32f28cf..8db8c6a1 100644 --- a/axi4_to_ahb.v +++ b/axi4_to_ahb.v @@ -151,7 +151,7 @@ module axi4_to_ahb( wire _T_109 = _T_107 & _T_108; // @[axi4_to_ahb.scala 263:70] wire _T_134 = 3'h6 == buf_state; // @[Conditional.scala 37:30] reg ahb_hresp_q; // @[axi4_to_ahb.scala 454:12] - wire _T_150 = ahb_hready_q | ahb_hresp_q; // @[axi4_to_ahb.scala 277:37] + wire _T_154 = ahb_hready_q | ahb_hresp_q; // @[axi4_to_ahb.scala 277:37] wire _T_173 = 3'h7 == buf_state; // @[Conditional.scala 37:30] wire _T_184 = 3'h3 == buf_state; // @[Conditional.scala 37:30] wire _T_186 = 3'h2 == buf_state; // @[Conditional.scala 37:30] @@ -162,9 +162,9 @@ module axi4_to_ahb( wire _GEN_19 = _T_186 ? _T_190 : _GEN_15; // @[Conditional.scala 39:67] wire _GEN_40 = _T_184 ? 1'h0 : _GEN_19; // @[Conditional.scala 39:67] wire _GEN_59 = _T_173 ? 1'h0 : _GEN_40; // @[Conditional.scala 39:67] - wire _GEN_78 = _T_134 ? 1'h0 : _GEN_59; // @[Conditional.scala 39:67] - wire _GEN_94 = _T_99 ? 1'h0 : _GEN_78; // @[Conditional.scala 39:67] - wire trxn_done = _T_47 ? 1'h0 : _GEN_94; // @[Conditional.scala 40:58] + wire _GEN_79 = _T_134 ? 1'h0 : _GEN_59; // @[Conditional.scala 39:67] + wire _GEN_95 = _T_99 ? 1'h0 : _GEN_79; // @[Conditional.scala 39:67] + wire trxn_done = _T_47 ? 1'h0 : _GEN_95; // @[Conditional.scala 40:58] reg cmd_doneQ; // @[axi4_to_ahb.scala 436:12] wire _T_280 = cmd_doneQ & ahb_hready_q; // @[axi4_to_ahb.scala 319:34] wire _T_281 = _T_280 | ahb_hresp_q; // @[axi4_to_ahb.scala 319:50] @@ -173,10 +173,10 @@ module axi4_to_ahb( wire _GEN_1 = _T_442 & slave_ready; // @[Conditional.scala 39:67] wire _GEN_3 = _T_279 ? _T_281 : _GEN_1; // @[Conditional.scala 39:67] wire _GEN_20 = _T_186 ? trxn_done : _GEN_3; // @[Conditional.scala 39:67] - wire _GEN_35 = _T_184 ? _T_150 : _GEN_20; // @[Conditional.scala 39:67] + wire _GEN_35 = _T_184 ? _T_154 : _GEN_20; // @[Conditional.scala 39:67] wire _GEN_51 = _T_173 ? _T_109 : _GEN_35; // @[Conditional.scala 39:67] - wire _GEN_68 = _T_134 ? _T_150 : _GEN_51; // @[Conditional.scala 39:67] - wire _GEN_83 = _T_99 ? _T_109 : _GEN_68; // @[Conditional.scala 39:67] + wire _GEN_69 = _T_134 ? _T_154 : _GEN_51; // @[Conditional.scala 39:67] + wire _GEN_83 = _T_99 ? _T_109 : _GEN_69; // @[Conditional.scala 39:67] wire buf_state_en = _T_47 ? master_valid : _GEN_83; // @[Conditional.scala 40:58] wire [1:0] _T_12 = wr_cmd_vld ? 2'h3 : 2'h0; // @[axi4_to_ahb.scala 203:20] wire [2:0] master_opc = {{1'd0}, _T_12}; // @[axi4_to_ahb.scala 203:14] @@ -185,9 +185,9 @@ module axi4_to_ahb( wire _GEN_29 = _T_186 ? 1'h0 : _GEN_8; // @[Conditional.scala 39:67] wire _GEN_46 = _T_184 ? 1'h0 : _GEN_29; // @[Conditional.scala 39:67] wire _GEN_63 = _T_173 ? 1'h0 : _GEN_46; // @[Conditional.scala 39:67] - wire _GEN_80 = _T_134 ? 1'h0 : _GEN_63; // @[Conditional.scala 39:67] - wire _GEN_96 = _T_99 ? 1'h0 : _GEN_80; // @[Conditional.scala 39:67] - wire buf_write_in = _T_47 ? _T_49 : _GEN_96; // @[Conditional.scala 40:58] + wire _GEN_81 = _T_134 ? 1'h0 : _GEN_63; // @[Conditional.scala 39:67] + wire _GEN_97 = _T_99 ? 1'h0 : _GEN_81; // @[Conditional.scala 39:67] + wire buf_write_in = _T_47 ? _T_49 : _GEN_97; // @[Conditional.scala 40:58] wire [2:0] _T_51 = buf_write_in ? 3'h2 : 3'h1; // @[axi4_to_ahb.scala 249:26] wire _T_101 = master_opc == 3'h0; // @[axi4_to_ahb.scala 262:61] wire _T_102 = master_valid & _T_101; // @[axi4_to_ahb.scala 262:41] @@ -208,21 +208,21 @@ module axi4_to_ahb( wire _GEN_66 = _T_134 ? _T_141 : _GEN_62; // @[Conditional.scala 39:67] wire _GEN_86 = _T_99 ? _T_123 : _GEN_66; // @[Conditional.scala 39:67] wire master_ready = _T_47 | _GEN_86; // @[Conditional.scala 40:58] - wire _T_143 = master_valid & master_ready; // @[axi4_to_ahb.scala 276:82] - wire _T_146 = _T_143 & _T_101; // @[axi4_to_ahb.scala 276:97] - wire [2:0] _T_148 = _T_146 ? 3'h6 : 3'h3; // @[axi4_to_ahb.scala 276:67] - wire [2:0] _T_149 = ahb_hresp_q ? 3'h7 : _T_148; // @[axi4_to_ahb.scala 276:26] + wire _T_147 = master_valid & master_ready; // @[axi4_to_ahb.scala 276:82] + wire _T_150 = _T_147 & _T_101; // @[axi4_to_ahb.scala 276:97] + wire [2:0] _T_152 = _T_150 ? 3'h6 : 3'h3; // @[axi4_to_ahb.scala 276:67] + wire [2:0] _T_153 = ahb_hresp_q ? 3'h7 : _T_152; // @[axi4_to_ahb.scala 276:26] wire _T_287 = ~slave_ready; // @[axi4_to_ahb.scala 321:42] wire _T_288 = ahb_hresp_q | _T_287; // @[axi4_to_ahb.scala 321:40] wire [2:0] _T_294 = _T_49 ? 3'h2 : 3'h1; // @[axi4_to_ahb.scala 321:119] - wire [2:0] _T_295 = _T_143 ? _T_294 : 3'h0; // @[axi4_to_ahb.scala 321:75] + wire [2:0] _T_295 = _T_147 ? _T_294 : 3'h0; // @[axi4_to_ahb.scala 321:75] wire [2:0] _T_296 = _T_288 ? 3'h5 : _T_295; // @[axi4_to_ahb.scala 321:26] wire [2:0] _GEN_5 = _T_279 ? _T_296 : 3'h0; // @[Conditional.scala 39:67] wire [2:0] _GEN_18 = _T_186 ? 3'h4 : _GEN_5; // @[Conditional.scala 39:67] wire [2:0] _GEN_34 = _T_184 ? 3'h5 : _GEN_18; // @[Conditional.scala 39:67] wire [2:0] _GEN_50 = _T_173 ? 3'h3 : _GEN_34; // @[Conditional.scala 39:67] - wire [2:0] _GEN_67 = _T_134 ? _T_149 : _GEN_50; // @[Conditional.scala 39:67] - wire [2:0] _GEN_82 = _T_99 ? _T_104 : _GEN_67; // @[Conditional.scala 39:67] + wire [2:0] _GEN_68 = _T_134 ? _T_153 : _GEN_50; // @[Conditional.scala 39:67] + wire [2:0] _GEN_82 = _T_99 ? _T_104 : _GEN_68; // @[Conditional.scala 39:67] wire [2:0] buf_nxtstate = _T_47 ? _T_51 : _GEN_82; // @[Conditional.scala 40:58] wire [2:0] _T_1 = buf_state_en ? buf_nxtstate : buf_state; // @[axi4_to_ahb.scala 69:16] reg wrbuf_tag; // @[Reg.scala 27:20] @@ -232,16 +232,16 @@ module axi4_to_ahb( wire [2:0] master_size = wr_cmd_vld ? wrbuf_size : io_axi_arsize; // @[axi4_to_ahb.scala 205:21] reg [7:0] wrbuf_byteen; // @[Reg.scala 27:20] reg [63:0] wrbuf_data; // @[el2_lib.scala 514:16] - wire _T_152 = buf_state_en & _T_135; // @[axi4_to_ahb.scala 281:39] + wire _T_156 = buf_state_en & _T_135; // @[axi4_to_ahb.scala 281:39] wire _T_359 = buf_nxtstate != 3'h5; // @[axi4_to_ahb.scala 330:55] wire _T_360 = buf_state_en & _T_359; // @[axi4_to_ahb.scala 330:39] wire _GEN_14 = _T_279 ? _T_360 : _T_442; // @[Conditional.scala 39:67] wire _GEN_33 = _T_186 ? 1'h0 : _GEN_14; // @[Conditional.scala 39:67] wire _GEN_49 = _T_184 ? 1'h0 : _GEN_33; // @[Conditional.scala 39:67] wire _GEN_52 = _T_173 ? buf_state_en : _GEN_49; // @[Conditional.scala 39:67] - wire _GEN_72 = _T_134 ? _T_152 : _GEN_52; // @[Conditional.scala 39:67] - wire _GEN_93 = _T_99 ? 1'h0 : _GEN_72; // @[Conditional.scala 39:67] - wire slave_valid_pre = _T_47 ? 1'h0 : _GEN_93; // @[Conditional.scala 40:58] + wire _GEN_73 = _T_134 ? _T_156 : _GEN_52; // @[Conditional.scala 39:67] + wire _GEN_94 = _T_99 ? 1'h0 : _GEN_73; // @[Conditional.scala 39:67] + wire slave_valid_pre = _T_47 ? 1'h0 : _GEN_94; // @[Conditional.scala 40:58] wire _T_23 = slave_valid_pre & slave_ready; // @[axi4_to_ahb.scala 210:32] wire buf_clk = rvclkhdr_6_io_l1clk; // @[axi4_to_ahb.scala 158:21 axi4_to_ahb.scala 465:12] reg slvbuf_write; // @[Reg.scala 27:20] @@ -276,18 +276,18 @@ module axi4_to_ahb( wire [2:0] _T_93 = buf_write_in ? _T_91 : master_addr[2:0]; // @[axi4_to_ahb.scala 255:30] wire _T_94 = buf_nxtstate == 3'h1; // @[axi4_to_ahb.scala 257:51] wire _T_124 = master_ready & master_valid; // @[axi4_to_ahb.scala 268:33] - wire _T_156 = buf_nxtstate == 3'h6; // @[axi4_to_ahb.scala 283:64] - wire _T_157 = _T_124 & _T_156; // @[axi4_to_ahb.scala 283:48] - wire _T_158 = _T_157 & buf_state_en; // @[axi4_to_ahb.scala 283:79] + wire _T_160 = buf_nxtstate == 3'h6; // @[axi4_to_ahb.scala 283:64] + wire _T_161 = _T_124 & _T_160; // @[axi4_to_ahb.scala 283:48] + wire _T_162 = _T_161 & buf_state_en; // @[axi4_to_ahb.scala 283:79] wire _T_350 = buf_state_en & buf_write_in; // @[axi4_to_ahb.scala 328:33] wire _T_352 = _T_350 & _T_53; // @[axi4_to_ahb.scala 328:48] wire _GEN_12 = _T_279 & _T_352; // @[Conditional.scala 39:67] wire _GEN_32 = _T_186 ? 1'h0 : _GEN_12; // @[Conditional.scala 39:67] wire _GEN_48 = _T_184 ? 1'h0 : _GEN_32; // @[Conditional.scala 39:67] wire _GEN_65 = _T_173 ? 1'h0 : _GEN_48; // @[Conditional.scala 39:67] - wire _GEN_74 = _T_134 ? _T_158 : _GEN_65; // @[Conditional.scala 39:67] - wire _GEN_87 = _T_99 ? _T_124 : _GEN_74; // @[Conditional.scala 39:67] - wire bypass_en = _T_47 ? buf_state_en : _GEN_87; // @[Conditional.scala 40:58] + wire _GEN_75 = _T_134 ? _T_162 : _GEN_65; // @[Conditional.scala 39:67] + wire _GEN_88 = _T_99 ? _T_124 : _GEN_75; // @[Conditional.scala 39:67] + wire bypass_en = _T_47 ? buf_state_en : _GEN_88; // @[Conditional.scala 40:58] wire [1:0] _T_97 = bypass_en ? 2'h3 : 2'h0; // @[Bitwise.scala 72:12] wire [1:0] _T_98 = _T_97 & 2'h2; // @[axi4_to_ahb.scala 258:45] wire _T_110 = ~master_valid; // @[axi4_to_ahb.scala 264:34] @@ -298,11 +298,11 @@ module axi4_to_ahb( wire _T_130 = _T_129 | bypass_en; // @[axi4_to_ahb.scala 270:58] wire [1:0] _T_132 = _T_130 ? 2'h3 : 2'h0; // @[Bitwise.scala 72:12] wire [1:0] _T_133 = 2'h2 & _T_132; // @[axi4_to_ahb.scala 270:32] - wire _T_163 = buf_nxtstate != 3'h6; // @[axi4_to_ahb.scala 285:59] - wire _T_164 = _T_163 & buf_state_en; // @[axi4_to_ahb.scala 285:74] - wire _T_165 = ~_T_164; // @[axi4_to_ahb.scala 285:43] - wire [1:0] _T_167 = _T_165 ? 2'h3 : 2'h0; // @[Bitwise.scala 72:12] - wire [1:0] _T_168 = 2'h2 & _T_167; // @[axi4_to_ahb.scala 285:32] + wire _T_167 = buf_nxtstate != 3'h6; // @[axi4_to_ahb.scala 285:59] + wire _T_168 = _T_167 & buf_state_en; // @[axi4_to_ahb.scala 285:74] + wire _T_169 = ~_T_168; // @[axi4_to_ahb.scala 285:43] + wire [1:0] _T_171 = _T_169 ? 2'h3 : 2'h0; // @[Bitwise.scala 72:12] + wire [1:0] _T_172 = 2'h2 & _T_171; // @[axi4_to_ahb.scala 285:32] wire [1:0] _T_182 = _T_129 ? 2'h3 : 2'h0; // @[Bitwise.scala 72:12] wire [1:0] _T_183 = 2'h2 & _T_182; // @[axi4_to_ahb.scala 295:37] reg [2:0] buf_cmd_byte_ptrQ; // @[Reg.scala 27:20] @@ -345,8 +345,8 @@ module axi4_to_ahb( wire _GEN_24 = _T_186 ? _T_273 : _GEN_11; // @[Conditional.scala 39:67] wire _GEN_43 = _T_184 ? 1'h0 : _GEN_24; // @[Conditional.scala 39:67] wire _GEN_61 = _T_173 ? 1'h0 : _GEN_43; // @[Conditional.scala 39:67] - wire _GEN_73 = _T_134 ? _T_111 : _GEN_61; // @[Conditional.scala 39:67] - wire _GEN_84 = _T_99 ? _T_111 : _GEN_73; // @[Conditional.scala 39:67] + wire _GEN_74 = _T_134 ? _T_111 : _GEN_61; // @[Conditional.scala 39:67] + wire _GEN_84 = _T_99 ? _T_111 : _GEN_74; // @[Conditional.scala 39:67] wire cmd_done = _T_47 ? 1'h0 : _GEN_84; // @[Conditional.scala 40:58] wire _T_274 = cmd_done | cmd_doneQ; // @[axi4_to_ahb.scala 315:43] wire _T_275 = ~_T_274; // @[axi4_to_ahb.scala 315:32] @@ -365,9 +365,9 @@ module axi4_to_ahb( wire _GEN_30 = _T_186 ? 1'h0 : _GEN_9; // @[Conditional.scala 39:67] wire _GEN_47 = _T_184 ? 1'h0 : _GEN_30; // @[Conditional.scala 39:67] wire _GEN_64 = _T_173 ? 1'h0 : _GEN_47; // @[Conditional.scala 39:67] - wire _GEN_81 = _T_134 ? 1'h0 : _GEN_64; // @[Conditional.scala 39:67] - wire _GEN_97 = _T_99 ? 1'h0 : _GEN_81; // @[Conditional.scala 39:67] - wire buf_wr_en = _T_47 ? 1'h0 : _GEN_97; // @[Conditional.scala 40:58] + wire _GEN_67 = _T_134 ? _T_150 : _GEN_64; // @[Conditional.scala 39:67] + wire _GEN_87 = _T_99 ? master_ready : _GEN_67; // @[Conditional.scala 39:67] + wire buf_wr_en = _T_47 ? buf_state_en : _GEN_87; // @[Conditional.scala 40:58] wire _GEN_10 = _T_279 & buf_wr_en; // @[Conditional.scala 39:67] wire [1:0] _GEN_13 = _T_279 ? _T_358 : 2'h0; // @[Conditional.scala 39:67] wire _GEN_16 = _T_279 & _T_365; // @[Conditional.scala 39:67] @@ -390,23 +390,23 @@ module axi4_to_ahb( wire _GEN_56 = _T_173 ? 1'h0 : _GEN_36; // @[Conditional.scala 39:67] wire _GEN_58 = _T_173 ? 1'h0 : _GEN_38; // @[Conditional.scala 39:67] wire _GEN_60 = _T_173 ? 1'h0 : _GEN_41; // @[Conditional.scala 39:67] - wire _GEN_69 = _T_134 ? buf_state_en : _GEN_56; // @[Conditional.scala 39:67] - wire _GEN_71 = _T_134 ? buf_state_en : _GEN_58; // @[Conditional.scala 39:67] - wire [2:0] _GEN_75 = _T_134 ? _T_128 : _GEN_54; // @[Conditional.scala 39:67] - wire [1:0] _GEN_76 = _T_134 ? _T_168 : _GEN_55; // @[Conditional.scala 39:67] - wire _GEN_77 = _T_134 ? _T_146 : _GEN_53; // @[Conditional.scala 39:67] - wire _GEN_79 = _T_134 ? 1'h0 : _GEN_60; // @[Conditional.scala 39:67] - wire _GEN_85 = _T_99 ? buf_state_en : _GEN_77; // @[Conditional.scala 39:67] - wire [2:0] _GEN_88 = _T_99 ? _T_128 : _GEN_75; // @[Conditional.scala 39:67] - wire [1:0] _GEN_89 = _T_99 ? _T_133 : _GEN_76; // @[Conditional.scala 39:67] - wire _GEN_90 = _T_99 ? 1'h0 : _GEN_69; // @[Conditional.scala 39:67] - wire _GEN_92 = _T_99 ? 1'h0 : _GEN_71; // @[Conditional.scala 39:67] - wire _GEN_95 = _T_99 ? 1'h0 : _GEN_79; // @[Conditional.scala 39:67] - wire buf_data_wr_en = _T_47 ? _T_54 : _GEN_90; // @[Conditional.scala 40:58] - wire buf_cmd_byte_ptr_en = _T_47 ? buf_state_en : _GEN_95; // @[Conditional.scala 40:58] - wire [2:0] buf_cmd_byte_ptr = _T_47 ? _T_93 : _GEN_88; // @[Conditional.scala 40:58] + wire _GEN_70 = _T_134 ? buf_state_en : _GEN_56; // @[Conditional.scala 39:67] + wire _GEN_72 = _T_134 ? buf_state_en : _GEN_58; // @[Conditional.scala 39:67] + wire [2:0] _GEN_76 = _T_134 ? _T_128 : _GEN_54; // @[Conditional.scala 39:67] + wire [1:0] _GEN_77 = _T_134 ? _T_172 : _GEN_55; // @[Conditional.scala 39:67] + wire _GEN_78 = _T_134 ? buf_wr_en : _GEN_53; // @[Conditional.scala 39:67] + wire _GEN_80 = _T_134 ? 1'h0 : _GEN_60; // @[Conditional.scala 39:67] + wire _GEN_85 = _T_99 ? buf_state_en : _GEN_78; // @[Conditional.scala 39:67] + wire [2:0] _GEN_89 = _T_99 ? _T_128 : _GEN_76; // @[Conditional.scala 39:67] + wire [1:0] _GEN_90 = _T_99 ? _T_133 : _GEN_77; // @[Conditional.scala 39:67] + wire _GEN_91 = _T_99 ? 1'h0 : _GEN_70; // @[Conditional.scala 39:67] + wire _GEN_93 = _T_99 ? 1'h0 : _GEN_72; // @[Conditional.scala 39:67] + wire _GEN_96 = _T_99 ? 1'h0 : _GEN_80; // @[Conditional.scala 39:67] + wire buf_data_wr_en = _T_47 ? _T_54 : _GEN_91; // @[Conditional.scala 40:58] + wire buf_cmd_byte_ptr_en = _T_47 ? buf_state_en : _GEN_96; // @[Conditional.scala 40:58] + wire [2:0] buf_cmd_byte_ptr = _T_47 ? _T_93 : _GEN_89; // @[Conditional.scala 40:58] wire slvbuf_wr_en = _T_47 ? 1'h0 : _GEN_85; // @[Conditional.scala 40:58] - wire slvbuf_error_en = _T_47 ? 1'h0 : _GEN_92; // @[Conditional.scala 40:58] + wire slvbuf_error_en = _T_47 ? 1'h0 : _GEN_93; // @[Conditional.scala 40:58] wire _T_534 = master_size[1:0] == 2'h0; // @[axi4_to_ahb.scala 353:24] wire _T_535 = _T_101 | _T_534; // @[axi4_to_ahb.scala 352:51] wire _T_537 = master_size[1:0] == 2'h1; // @[axi4_to_ahb.scala 353:57] @@ -453,7 +453,7 @@ module axi4_to_ahb( wire last_addr_en = _T_611 & io_ahb_hwrite; // @[axi4_to_ahb.scala 371:68] wire wrbuf_en = _T_42 & master_ready; // @[axi4_to_ahb.scala 373:47] wire wrbuf_data_en = _T_43 & master_ready; // @[axi4_to_ahb.scala 374:50] - wire wrbuf_cmd_sent = _T_143 & _T_49; // @[axi4_to_ahb.scala 375:49] + wire wrbuf_cmd_sent = _T_147 & _T_49; // @[axi4_to_ahb.scala 375:49] wire _T_621 = ~wrbuf_en; // @[axi4_to_ahb.scala 376:33] wire wrbuf_rst = wrbuf_cmd_sent & _T_621; // @[axi4_to_ahb.scala 376:31] wire _T_623 = ~wrbuf_cmd_sent; // @[axi4_to_ahb.scala 378:35] @@ -549,7 +549,7 @@ module axi4_to_ahb( assign io_ahb_hmastlock = 1'h0; // @[axi4_to_ahb.scala 361:20] assign io_ahb_hprot = {{2'd0}, _T_588}; // @[axi4_to_ahb.scala 362:16] assign io_ahb_hsize = bypass_en ? _T_579 : _T_584; // @[axi4_to_ahb.scala 358:16] - assign io_ahb_htrans = _T_47 ? _T_98 : _GEN_89; // @[axi4_to_ahb.scala 227:17 axi4_to_ahb.scala 258:21 axi4_to_ahb.scala 270:21 axi4_to_ahb.scala 285:21 axi4_to_ahb.scala 295:21 axi4_to_ahb.scala 315:21 axi4_to_ahb.scala 329:21] + assign io_ahb_htrans = _T_47 ? _T_98 : _GEN_90; // @[axi4_to_ahb.scala 227:17 axi4_to_ahb.scala 258:21 axi4_to_ahb.scala 270:21 axi4_to_ahb.scala 285:21 axi4_to_ahb.scala 295:21 axi4_to_ahb.scala 315:21 axi4_to_ahb.scala 329:21] assign io_ahb_hwrite = bypass_en ? _T_49 : buf_write; // @[axi4_to_ahb.scala 363:17] assign io_ahb_hwdata = buf_data; // @[axi4_to_ahb.scala 364:17] assign rvclkhdr_io_clk = clock; // @[el2_lib.scala 484:17] diff --git a/src/main/scala/lib/axi4_to_ahb.scala b/src/main/scala/lib/axi4_to_ahb.scala index 2ef1bbe3..1537eb6a 100644 --- a/src/main/scala/lib/axi4_to_ahb.scala +++ b/src/main/scala/lib/axi4_to_ahb.scala @@ -248,7 +248,7 @@ class axi4_to_ahb extends Module with el2_lib with RequireAsyncReset with Config buf_write_in := (master_opc(2, 1) === "b01".U) buf_nxtstate := Mux(buf_write_in.asBool(), cmd_wr, cmd_rd) buf_state_en := master_valid & 1.U - // buf_wr_en := buf_state_en + buf_wr_en := buf_state_en buf_data_wr_en := buf_state_en & (buf_nxtstate === cmd_wr) buf_cmd_byte_ptr_en := buf_state_en // ---------------------FROM FUNCTION CHECK LATER @@ -264,7 +264,7 @@ class axi4_to_ahb extends Module with el2_lib with RequireAsyncReset with Config cmd_done := buf_state_en & !master_valid slvbuf_wr_en := buf_state_en master_ready := (ahb_hready_q & (ahb_htrans_q(1, 0) =/= "b0".U) & !ahb_hwrite_q) & (Mux((master_valid & (master_opc(2, 0) === "b000".U)).asBool(), stream_rd, data_rd) === stream_rd) ////////////TBD//////// - // buf_wr_en := master_ready + buf_wr_en := master_ready bypass_en := master_ready & master_valid buf_cmd_byte_ptr := Mux(bypass_en.asBool(), master_addr(2, 0), buf_addr(2, 0)) io.ahb_htrans := "b10".U & (Fill(2, (!buf_state_en | bypass_en))) @@ -272,7 +272,7 @@ class axi4_to_ahb extends Module with el2_lib with RequireAsyncReset with Config is(stream_rd) { master_ready := (ahb_hready_q & !ahb_hresp_q) & !(master_valid & master_opc(2, 1) === "b01".U) - // buf_wr_en := (master_valid & master_ready & (master_opc(2, 0) === "b000".U)) // update the fifo if we are streaming the read commands + buf_wr_en := (master_valid & master_ready & (master_opc(2, 0) === "b000".U)) // update the fifo if we are streaming the read commands buf_nxtstate := Mux(ahb_hresp_q.asBool(), stream_err_rd, Mux((master_valid & master_ready & (master_opc(2, 0) === "b000".U)).asBool(), stream_rd, data_rd)) // assuming that the master accpets the slave response right away. buf_state_en := (ahb_hready_q | ahb_hresp_q) buf_data_wr_en := buf_state_en @@ -283,7 +283,7 @@ class axi4_to_ahb extends Module with el2_lib with RequireAsyncReset with Config bypass_en := master_ready & master_valid & (buf_nxtstate === stream_rd) & buf_state_en buf_cmd_byte_ptr := Mux(bypass_en.asBool(), master_addr(2, 0), buf_addr(2, 0)) io.ahb_htrans := "b10".U & Fill(2, (!((buf_nxtstate =/= stream_rd) & buf_state_en))) - slvbuf_wr_en := (master_valid & master_ready & (master_opc(2, 0) === "b000".U)) // shifting the contents from the buf to slv_buf for streaming cases + slvbuf_wr_en := buf_wr_en// shifting the contents from the buf to slv_buf for streaming cases } is(stream_err_rd) { diff --git a/target/scala-2.12/classes/lib/axi4_to_ahb.class b/target/scala-2.12/classes/lib/axi4_to_ahb.class index 4756d5aac3671e0d8a6445df446481f288cf143b..61fdd00b8e230e8acb26b49b77e4d4805ddd2975 100644 GIT binary patch delta 4486 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⁡9?eC9nDXW2;>P)d&RuCOkg^?WS;I%eyz+b;_Xc+ z_*?cTz|01sDzZP=+Nh?AcXD@q+<$A9>+s;bP zU0pt|8SX7&!&{mZqe)$-vsA8016ks#p<5Pe=-BCuu9=Sb-nVUgEF*<*SVr?DSa4V?{2kl?NsIAaj>xRwg?u((j*s-zjkhZ}Ti=%s@2r zS22TY20!Pv72`Nx;n^iz)Al((EP=O?`TL|C1=b{-6&hdZMmOtxU zHV@T6t78EsXa_X0R@{N%lHiM(voFp?` rwe}rw-dK&p-VyxJhxrjD6WSjsXn&oc{aJ$c_Xx^$=lN&xoX7tG&0c0?