From 65c83526ed0628ef6891920c83942130cec4cd97 Mon Sep 17 00:00:00 2001 From: waleed-lm Date: Mon, 9 Nov 2020 12:10:58 +0500 Subject: [PATCH] Bus-buffer testing start --- el2_lsu_bus_buffer.fir | 18 ++++++++-------- el2_lsu_bus_buffer.v | 20 ++++++++---------- src/main/scala/lsu/el2_lsu_bus_buffer.scala | 2 +- .../classes/lsu/el2_lsu_bus_buffer.class | Bin 569518 -> 569512 bytes 4 files changed, 19 insertions(+), 21 deletions(-) diff --git a/el2_lsu_bus_buffer.fir b/el2_lsu_bus_buffer.fir index 4de50a73..4229ce91 100644 --- a/el2_lsu_bus_buffer.fir +++ b/el2_lsu_bus_buffer.fir @@ -2689,7 +2689,7 @@ circuit el2_lsu_bus_buffer : obuf_wr_timer <= _T_1873 @[el2_lsu_bus_buffer.scala 421:17] wire WrPtr0_m : UInt<2> WrPtr0_m <= UInt<1>("h00") - node _T_1874 = eq(buf_state[0], UInt<3>("h00")) @[el2_lsu_bus_buffer.scala 424:65] + node _T_1874 = eq(buf_state[0], UInt<3>("h00")) @[el2_lsu_bus_buffer.scala 424:70] node _T_1875 = eq(ibuf_tag, UInt<1>("h00")) @[el2_lsu_bus_buffer.scala 425:30] node _T_1876 = and(ibuf_valid, _T_1875) @[el2_lsu_bus_buffer.scala 425:19] node _T_1877 = eq(WrPtr0_r, UInt<1>("h00")) @[el2_lsu_bus_buffer.scala 426:18] @@ -2699,8 +2699,8 @@ circuit el2_lsu_bus_buffer : node _T_1881 = and(io.lsu_busreq_r, _T_1880) @[el2_lsu_bus_buffer.scala 425:58] node _T_1882 = or(_T_1876, _T_1881) @[el2_lsu_bus_buffer.scala 425:39] node _T_1883 = eq(_T_1882, UInt<1>("h00")) @[el2_lsu_bus_buffer.scala 425:5] - node _T_1884 = and(_T_1874, _T_1883) @[el2_lsu_bus_buffer.scala 424:76] - node _T_1885 = eq(buf_state[1], UInt<3>("h00")) @[el2_lsu_bus_buffer.scala 424:65] + node _T_1884 = and(_T_1874, _T_1883) @[el2_lsu_bus_buffer.scala 424:81] + node _T_1885 = eq(buf_state[1], UInt<3>("h00")) @[el2_lsu_bus_buffer.scala 424:70] node _T_1886 = eq(ibuf_tag, UInt<1>("h01")) @[el2_lsu_bus_buffer.scala 425:30] node _T_1887 = and(ibuf_valid, _T_1886) @[el2_lsu_bus_buffer.scala 425:19] node _T_1888 = eq(WrPtr0_r, UInt<1>("h01")) @[el2_lsu_bus_buffer.scala 426:18] @@ -2710,8 +2710,8 @@ circuit el2_lsu_bus_buffer : node _T_1892 = and(io.lsu_busreq_r, _T_1891) @[el2_lsu_bus_buffer.scala 425:58] node _T_1893 = or(_T_1887, _T_1892) @[el2_lsu_bus_buffer.scala 425:39] node _T_1894 = eq(_T_1893, UInt<1>("h00")) @[el2_lsu_bus_buffer.scala 425:5] - node _T_1895 = and(_T_1885, _T_1894) @[el2_lsu_bus_buffer.scala 424:76] - node _T_1896 = eq(buf_state[2], UInt<3>("h00")) @[el2_lsu_bus_buffer.scala 424:65] + node _T_1895 = and(_T_1885, _T_1894) @[el2_lsu_bus_buffer.scala 424:81] + node _T_1896 = eq(buf_state[2], UInt<3>("h00")) @[el2_lsu_bus_buffer.scala 424:70] node _T_1897 = eq(ibuf_tag, UInt<2>("h02")) @[el2_lsu_bus_buffer.scala 425:30] node _T_1898 = and(ibuf_valid, _T_1897) @[el2_lsu_bus_buffer.scala 425:19] node _T_1899 = eq(WrPtr0_r, UInt<2>("h02")) @[el2_lsu_bus_buffer.scala 426:18] @@ -2721,8 +2721,8 @@ circuit el2_lsu_bus_buffer : node _T_1903 = and(io.lsu_busreq_r, _T_1902) @[el2_lsu_bus_buffer.scala 425:58] node _T_1904 = or(_T_1898, _T_1903) @[el2_lsu_bus_buffer.scala 425:39] node _T_1905 = eq(_T_1904, UInt<1>("h00")) @[el2_lsu_bus_buffer.scala 425:5] - node _T_1906 = and(_T_1896, _T_1905) @[el2_lsu_bus_buffer.scala 424:76] - node _T_1907 = eq(buf_state[3], UInt<3>("h00")) @[el2_lsu_bus_buffer.scala 424:65] + node _T_1906 = and(_T_1896, _T_1905) @[el2_lsu_bus_buffer.scala 424:81] + node _T_1907 = eq(buf_state[3], UInt<3>("h00")) @[el2_lsu_bus_buffer.scala 424:70] node _T_1908 = eq(ibuf_tag, UInt<2>("h03")) @[el2_lsu_bus_buffer.scala 425:30] node _T_1909 = and(ibuf_valid, _T_1908) @[el2_lsu_bus_buffer.scala 425:19] node _T_1910 = eq(WrPtr0_r, UInt<2>("h03")) @[el2_lsu_bus_buffer.scala 426:18] @@ -2732,8 +2732,8 @@ circuit el2_lsu_bus_buffer : node _T_1914 = and(io.lsu_busreq_r, _T_1913) @[el2_lsu_bus_buffer.scala 425:58] node _T_1915 = or(_T_1909, _T_1914) @[el2_lsu_bus_buffer.scala 425:39] node _T_1916 = eq(_T_1915, UInt<1>("h00")) @[el2_lsu_bus_buffer.scala 425:5] - node _T_1917 = and(_T_1907, _T_1916) @[el2_lsu_bus_buffer.scala 424:76] - node _T_1918 = mux(_T_1917, UInt<2>("h03"), UInt<1>("h00")) @[Mux.scala 98:16] + node _T_1917 = and(_T_1907, _T_1916) @[el2_lsu_bus_buffer.scala 424:81] + node _T_1918 = mux(_T_1917, UInt<2>("h03"), WrPtr0_r) @[Mux.scala 98:16] node _T_1919 = mux(_T_1906, UInt<2>("h02"), _T_1918) @[Mux.scala 98:16] node _T_1920 = mux(_T_1895, UInt<1>("h01"), _T_1919) @[Mux.scala 98:16] node _T_1921 = mux(_T_1884, UInt<1>("h00"), _T_1920) @[Mux.scala 98:16] diff --git a/el2_lsu_bus_buffer.v b/el2_lsu_bus_buffer.v index 68c567de..e44a164a 100644 --- a/el2_lsu_bus_buffer.v +++ b/el2_lsu_bus_buffer.v @@ -1500,7 +1500,7 @@ module el2_lsu_bus_buffer( reg [1:0] obuf_sz; // @[Reg.scala 27:20] reg [7:0] obuf_byteen; // @[Reg.scala 27:20] reg [63:0] obuf_data; // @[el2_lib.scala 491:16] - wire _T_1874 = buf_state_0 == 3'h0; // @[el2_lsu_bus_buffer.scala 424:65] + wire _T_1874 = buf_state_0 == 3'h0; // @[el2_lsu_bus_buffer.scala 424:70] wire _T_1875 = ibuf_tag == 2'h0; // @[el2_lsu_bus_buffer.scala 425:30] wire _T_1876 = ibuf_valid & _T_1875; // @[el2_lsu_bus_buffer.scala 425:19] wire _T_1877 = WrPtr0_r == 2'h0; // @[el2_lsu_bus_buffer.scala 426:18] @@ -1510,8 +1510,8 @@ module el2_lsu_bus_buffer( wire _T_1881 = io_lsu_busreq_r & _T_1880; // @[el2_lsu_bus_buffer.scala 425:58] wire _T_1882 = _T_1876 | _T_1881; // @[el2_lsu_bus_buffer.scala 425:39] wire _T_1883 = ~_T_1882; // @[el2_lsu_bus_buffer.scala 425:5] - wire _T_1884 = _T_1874 & _T_1883; // @[el2_lsu_bus_buffer.scala 424:76] - wire _T_1885 = buf_state_1 == 3'h0; // @[el2_lsu_bus_buffer.scala 424:65] + wire _T_1884 = _T_1874 & _T_1883; // @[el2_lsu_bus_buffer.scala 424:81] + wire _T_1885 = buf_state_1 == 3'h0; // @[el2_lsu_bus_buffer.scala 424:70] wire _T_1886 = ibuf_tag == 2'h1; // @[el2_lsu_bus_buffer.scala 425:30] wire _T_1887 = ibuf_valid & _T_1886; // @[el2_lsu_bus_buffer.scala 425:19] wire _T_1888 = WrPtr0_r == 2'h1; // @[el2_lsu_bus_buffer.scala 426:18] @@ -1521,8 +1521,8 @@ module el2_lsu_bus_buffer( wire _T_1892 = io_lsu_busreq_r & _T_1891; // @[el2_lsu_bus_buffer.scala 425:58] wire _T_1893 = _T_1887 | _T_1892; // @[el2_lsu_bus_buffer.scala 425:39] wire _T_1894 = ~_T_1893; // @[el2_lsu_bus_buffer.scala 425:5] - wire _T_1895 = _T_1885 & _T_1894; // @[el2_lsu_bus_buffer.scala 424:76] - wire _T_1896 = buf_state_2 == 3'h0; // @[el2_lsu_bus_buffer.scala 424:65] + wire _T_1895 = _T_1885 & _T_1894; // @[el2_lsu_bus_buffer.scala 424:81] + wire _T_1896 = buf_state_2 == 3'h0; // @[el2_lsu_bus_buffer.scala 424:70] wire _T_1897 = ibuf_tag == 2'h2; // @[el2_lsu_bus_buffer.scala 425:30] wire _T_1898 = ibuf_valid & _T_1897; // @[el2_lsu_bus_buffer.scala 425:19] wire _T_1899 = WrPtr0_r == 2'h2; // @[el2_lsu_bus_buffer.scala 426:18] @@ -1532,8 +1532,8 @@ module el2_lsu_bus_buffer( wire _T_1903 = io_lsu_busreq_r & _T_1902; // @[el2_lsu_bus_buffer.scala 425:58] wire _T_1904 = _T_1898 | _T_1903; // @[el2_lsu_bus_buffer.scala 425:39] wire _T_1905 = ~_T_1904; // @[el2_lsu_bus_buffer.scala 425:5] - wire _T_1906 = _T_1896 & _T_1905; // @[el2_lsu_bus_buffer.scala 424:76] - wire _T_1907 = buf_state_3 == 3'h0; // @[el2_lsu_bus_buffer.scala 424:65] + wire _T_1906 = _T_1896 & _T_1905; // @[el2_lsu_bus_buffer.scala 424:81] + wire _T_1907 = buf_state_3 == 3'h0; // @[el2_lsu_bus_buffer.scala 424:70] wire _T_1908 = ibuf_tag == 2'h3; // @[el2_lsu_bus_buffer.scala 425:30] wire _T_1909 = ibuf_valid & _T_1908; // @[el2_lsu_bus_buffer.scala 425:19] wire _T_1910 = WrPtr0_r == 2'h3; // @[el2_lsu_bus_buffer.scala 426:18] @@ -1543,8 +1543,8 @@ module el2_lsu_bus_buffer( wire _T_1914 = io_lsu_busreq_r & _T_1913; // @[el2_lsu_bus_buffer.scala 425:58] wire _T_1915 = _T_1909 | _T_1914; // @[el2_lsu_bus_buffer.scala 425:39] wire _T_1916 = ~_T_1915; // @[el2_lsu_bus_buffer.scala 425:5] - wire _T_1917 = _T_1907 & _T_1916; // @[el2_lsu_bus_buffer.scala 424:76] - wire [1:0] _T_1918 = _T_1917 ? 2'h3 : 2'h0; // @[Mux.scala 98:16] + wire _T_1917 = _T_1907 & _T_1916; // @[el2_lsu_bus_buffer.scala 424:81] + wire [1:0] _T_1918 = _T_1917 ? 2'h3 : WrPtr0_r; // @[Mux.scala 98:16] wire [1:0] _T_1919 = _T_1906 ? 2'h2 : _T_1918; // @[Mux.scala 98:16] wire [1:0] _T_1920 = _T_1895 ? 2'h1 : _T_1919; // @[Mux.scala 98:16] wire [1:0] WrPtr0_m = _T_1884 ? 2'h0 : _T_1920; // @[Mux.scala 98:16] @@ -4022,8 +4022,6 @@ end // initial WrPtr0_r <= 2'h2; end else if (_T_1917) begin WrPtr0_r <= 2'h3; - end else begin - WrPtr0_r <= 2'h0; end end always @(posedge io_lsu_bus_ibuf_c1_clk or posedge reset) begin diff --git a/src/main/scala/lsu/el2_lsu_bus_buffer.scala b/src/main/scala/lsu/el2_lsu_bus_buffer.scala index ac896531..9ef2b142 100644 --- a/src/main/scala/lsu/el2_lsu_bus_buffer.scala +++ b/src/main/scala/lsu/el2_lsu_bus_buffer.scala @@ -421,7 +421,7 @@ class el2_lsu_bus_buffer extends Module with RequireAsyncReset with el2_lib { obuf_wr_timer := withClock(io.lsu_busm_clk){RegNext(obuf_wr_timer_in, 0.U)} val WrPtr0_m = WireInit(UInt(DEPTH_LOG2.W), 0.U) - WrPtr0_m := MuxCase(0.U, (0 until DEPTH).map(i=>((buf_state(i)===idle_C) & + WrPtr0_m := MuxCase(WrPtr0_r, (0 until DEPTH).map(i=>((buf_state(i)===idle_C) & !((ibuf_valid & (ibuf_tag===i.U)) | (io.lsu_busreq_r & ((WrPtr0_r === i.U) | (io.ldst_dual_r & (WrPtr1_r === i.U)))))) -> i.U)) io.buf_state := buf_state.reverse.reduce(Cat(_,_)) diff --git a/target/scala-2.12/classes/lsu/el2_lsu_bus_buffer.class b/target/scala-2.12/classes/lsu/el2_lsu_bus_buffer.class index aea6319215cfbfbd1d46d7ffe99390479d67fdab..233fe0b139667de4c4096fb222ce433a7785812d 100644 GIT binary patch delta 4215 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 N|342Dt6P!a{{gJ`3;X~8 delta 4236 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