# vl2mv gigamax.v # version: 0.2 # date: 11:15:57 12/11/95 (PST) .model main # I/O ports .mv p2_cmd 9 idle read_shared read_owned write_invalid write_shared write_resp_invalid write_resp_shared invalidate response .mv m_cmd 9 idle read_shared read_owned write_invalid write_shared write_resp_invalid write_resp_shared invalidate response .mv p0_cmd 9 idle read_shared read_owned write_invalid write_shared write_resp_invalid write_resp_shared invalidate response .mv nond_CMD 9 idle read_shared read_owned write_invalid write_shared write_resp_invalid write_resp_shared invalidate response .mv CMD 9 idle read_shared read_owned write_invalid write_shared write_resp_invalid write_resp_shared invalidate response .mv p1_cmd 9 idle read_shared read_owned write_invalid write_shared write_resp_invalid write_resp_shared invalidate response .subckt processor p0 CMD=CMD master=p0_master REPLY_OWNED=REPLY_OWNED REPLY_WAITING=REPLY_WAITING REPLY_STALL=REPLY_STALL cmd=p0_cmd reply_owned=p0_reply_owned reply_waiting=p0_reply_waiting reply_stall=p0_reply_stall .subckt processor p1 CMD=CMD master=p1_master REPLY_OWNED=REPLY_OWNED REPLY_WAITING=REPLY_WAITING REPLY_STALL=REPLY_STALL cmd=p1_cmd reply_owned=p1_reply_owned reply_waiting=p1_reply_waiting reply_stall=p1_reply_stall .subckt processor p2 CMD=CMD master=p2_master REPLY_OWNED=REPLY_OWNED REPLY_WAITING=REPLY_WAITING REPLY_STALL=REPLY_STALL cmd=p2_cmd reply_owned=p2_reply_owned reply_waiting=p2_reply_waiting reply_stall=p2_reply_stall .subckt memory m CMD=CMD master=m_master REPLY_OWNED=REPLY_OWNED REPLY_WAITING=REPLY_WAITING REPLY_STALL=REPLY_STALL cmd=m_cmd reply_owned=m_reply_owned reply_waiting=m_reply_waiting reply_stall=m_reply_stall # assign REPLY_OWNED = p0_reply_owned | p1_reply_owned | p2_reply_owned # p0_reply_owned | p1_reply_owned .names p0_reply_owned p1_reply_owned _n1 .def 1 0 0 0 # p0_reply_owned | p1_reply_owned | p2_reply_owned .names _n1 p2_reply_owned _n2 .def 1 0 0 0 .names _n2 REPLY_OWNED$raw_n0 - =_n2 # assign REPLY_WAITING = p0_reply_waiting | p1_reply_waiting | p2_reply_waiting # p0_reply_waiting | p1_reply_waiting .names p0_reply_waiting p1_reply_waiting _n4 .def 1 0 0 0 # p0_reply_waiting | p1_reply_waiting | p2_reply_waiting .names _n4 p2_reply_waiting _n5 .def 1 0 0 0 .names _n5 REPLY_WAITING$raw_n3 - =_n5 # assign REPLY_STALL = p0_reply_stall | p1_reply_stall | p2_reply_stall | m_reply_stall # p0_reply_stall | p1_reply_stall .names p0_reply_stall p1_reply_stall _n7 .def 1 0 0 0 # p0_reply_stall | p1_reply_stall | p2_reply_stall .names _n7 p2_reply_stall _n8 .def 1 0 0 0 # p0_reply_stall | p1_reply_stall | p2_reply_stall | m_reply_stall .names _n8 m_reply_stall _n9 .def 1 0 0 0 .names _n9 REPLY_STALL$raw_n6 - =_n9 # assign CMD = (p1_cmd == 0 && p2_cmd == 0 && m_cmd == 0) ? p0_cmd : (p0_cmd == 0 && p2_cmd == 0 && m_cmd == 0) ? p1_cmd : (p0_cmd == 0 && p1_cmd == 0 && m_cmd == 0) ? p2_cmd : (p0_cmd == 0 && p1_cmd == 0 && p2_cmd == 0) ? m_cmd : nond_CMD .mv CMD$raw_na 9 idle read_shared read_owned write_invalid write_shared write_resp_invalid write_resp_shared invalidate response .mv _nc 9 idle read_shared read_owned write_invalid write_shared write_resp_invalid write_resp_shared invalidate response .names _nc idle # p1_cmd == 0 .names p1_cmd _nc _nb .def 0 - =p1_cmd 1 .mv _ne 9 idle read_shared read_owned write_invalid write_shared write_resp_invalid write_resp_shared invalidate response .names _ne idle # p2_cmd == 0 .names p2_cmd _ne _nd .def 0 - =p2_cmd 1 # p1_cmd == 0 && p2_cmd == 0 .names _nb _nd _nf .def 0 1 1 1 .mv _n11 9 idle read_shared read_owned write_invalid write_shared write_resp_invalid write_resp_shared invalidate response .names _n11 idle # m_cmd == 0 .names m_cmd _n11 _n10 .def 0 - =m_cmd 1 # p1_cmd == 0 && p2_cmd == 0 && m_cmd == 0 .names _nf _n10 _n12 .def 0 1 1 1 .mv _n14 9 idle read_shared read_owned write_invalid write_shared write_resp_invalid write_resp_shared invalidate response .names _n14 idle # p0_cmd == 0 .names p0_cmd _n14 _n13 .def 0 - =p0_cmd 1 .mv _n16 9 idle read_shared read_owned write_invalid write_shared write_resp_invalid write_resp_shared invalidate response .names _n16 idle # p2_cmd == 0 .names p2_cmd _n16 _n15 .def 0 - =p2_cmd 1 # p0_cmd == 0 && p2_cmd == 0 .names _n13 _n15 _n17 .def 0 1 1 1 .mv _n19 9 idle read_shared read_owned write_invalid write_shared write_resp_invalid write_resp_shared invalidate response .names _n19 idle # m_cmd == 0 .names m_cmd _n19 _n18 .def 0 - =m_cmd 1 # p0_cmd == 0 && p2_cmd == 0 && m_cmd == 0 .names _n17 _n18 _n1a .def 0 1 1 1 .mv _n1c 9 idle read_shared read_owned write_invalid write_shared write_resp_invalid write_resp_shared invalidate response .names _n1c idle # p0_cmd == 0 .names p0_cmd _n1c _n1b .def 0 - =p0_cmd 1 .mv _n1e 9 idle read_shared read_owned write_invalid write_shared write_resp_invalid write_resp_shared invalidate response .names _n1e idle # p1_cmd == 0 .names p1_cmd _n1e _n1d .def 0 - =p1_cmd 1 # p0_cmd == 0 && p1_cmd == 0 .names _n1b _n1d _n1f .def 0 1 1 1 .mv _n21 9 idle read_shared read_owned write_invalid write_shared write_resp_invalid write_resp_shared invalidate response .names _n21 idle # m_cmd == 0 .names m_cmd _n21 _n20 .def 0 - =m_cmd 1 # p0_cmd == 0 && p1_cmd == 0 && m_cmd == 0 .names _n1f _n20 _n22 .def 0 1 1 1 .mv _n24 9 idle read_shared read_owned write_invalid write_shared write_resp_invalid write_resp_shared invalidate response .names _n24 idle # p0_cmd == 0 .names p0_cmd _n24 _n23 .def 0 - =p0_cmd 1 .mv _n26 9 idle read_shared read_owned write_invalid write_shared write_resp_invalid write_resp_shared invalidate response .names _n26 idle # p1_cmd == 0 .names p1_cmd _n26 _n25 .def 0 - =p1_cmd 1 # p0_cmd == 0 && p1_cmd == 0 .names _n23 _n25 _n27 .def 0 1 1 1 .mv _n29 9 idle read_shared read_owned write_invalid write_shared write_resp_invalid write_resp_shared invalidate response .names _n29 idle # p2_cmd == 0 .names p2_cmd _n29 _n28 .def 0 - =p2_cmd 1 # p0_cmd == 0 && p1_cmd == 0 && p2_cmd == 0 .names _n27 _n28 _n2a .def 0 1 1 1 # (p0_cmd == 0 && p1_cmd == 0 && p2_cmd == 0) ? m_cmd : nond_CMD .mv _n2b 9 idle read_shared read_owned write_invalid write_shared write_resp_invalid write_resp_shared invalidate response .names m_cmd nond_CMD _n2a _n2b - - 0 =nond_CMD - - 1 =m_cmd # (p0_cmd == 0 && p1_cmd == 0 && m_cmd == 0) ? p2_cmd : (p0_cmd == 0 && p1_cmd == 0 && p2_cmd == 0) ? m_cmd : nond_CMD .mv _n2c 9 idle read_shared read_owned write_invalid write_shared write_resp_invalid write_resp_shared invalidate response .names p2_cmd _n2b _n22 _n2c - - 0 =_n2b - - 1 =p2_cmd # (p0_cmd == 0 && p2_cmd == 0 && m_cmd == 0) ? p1_cmd : (p0_cmd == 0 && p1_cmd == 0 && m_cmd == 0) ? p2_cmd : (p0_cmd == 0 && p1_cmd == 0 && p2_cmd == 0) ? m_cmd : nond_CMD .mv _n2d 9 idle read_shared read_owned write_invalid write_shared write_resp_invalid write_resp_shared invalidate response .names p1_cmd _n2c _n1a _n2d - - 0 =_n2c - - 1 =p1_cmd # (p1_cmd == 0 && p2_cmd == 0 && m_cmd == 0) ? p0_cmd : (p0_cmd == 0 && p2_cmd == 0 && m_cmd == 0) ? p1_cmd : (p0_cmd == 0 && p1_cmd == 0 && m_cmd == 0) ? p2_cmd : (p0_cmd == 0 && p1_cmd == 0 && p2_cmd == 0) ? m_cmd : nond_CMD .mv _n2e 9 idle read_shared read_owned write_invalid write_shared write_resp_invalid write_resp_shared invalidate response .names p0_cmd _n2d _n12 _n2e - - 0 =_n2d - - 1 =p0_cmd .names _n2e CMD$raw_na - =_n2e # assign p0_master = nond0_master .names nond0_master p0_master$raw_n2f - =nond0_master # assign p1_master = (p0_master ) ? 0 : nond1_master .names _n31 0 # (p0_master ) ? 0 : nond1_master .names _n31 nond1_master p0_master _n32 0 - 1 0 1 - 1 1 - 0 0 0 - 1 0 1 .names _n32 p1_master$raw_n30 - =_n32 # assign p2_master = (p0_master || p1_master ) ? 0 : nond2_master # p0_master || p1_master .names p0_master p1_master _n35 .def 1 0 0 0 .names _n36 0 # (p0_master || p1_master ) ? 0 : nond2_master .names _n36 nond2_master _n35 _n37 0 - 1 0 1 - 1 1 - 0 0 0 - 1 0 1 .names _n37 p2_master$raw_n34 - =_n37 # assign m_master = ((p0_master || p1_master ) || p2_master ) ? 0 : nondm_master # p0_master || p1_master .names p0_master p1_master _n3a .def 1 0 0 0 # (p0_master || p1_master ) || p2_master .names _n3a p2_master _n3b .def 1 0 0 0 .names _n3c 0 # ((p0_master || p1_master ) || p2_master ) ? 0 : nondm_master .names _n3c nondm_master _n3b _n3d 0 - 1 0 1 - 1 1 - 0 0 0 - 1 0 1 .names _n3d m_master$raw_n39 - =_n3d # assign nond0_master = $NDset ( 0,1 ) .names nond0_master 0 1 # assign nond1_master = $NDset ( 0,1 ) .names nond1_master 0 1 # assign nond2_master = $NDset ( 0,1 ) .names nond2_master 0 1 # assign nondm_master = $NDset ( 0,1 ) .names nondm_master 0 1 # assign nond_CMD = $NDset ( 0,1,2,3,4,5,6,7,8 ) .names nond_CMD idle read_shared read_owned write_invalid write_shared write_resp_invalid write_resp_shared invalidate response # conflict arbitrators .names REPLY_OWNED$raw_n0 REPLY_OWNED 0 0 1 1 .names m_master$raw_n39 m_master 0 0 1 1 .names REPLY_WAITING$raw_n3 REPLY_WAITING 0 0 1 1 .names p1_master$raw_n30 p1_master 0 0 1 1 .names p2_master$raw_n34 p2_master 0 0 1 1 .names REPLY_STALL$raw_n6 REPLY_STALL 0 0 1 1 .names CMD$raw_na CMD - =CMD$raw_na .names p0_master$raw_n2f p0_master 0 0 1 1 # non-blocking assignments # latches # quasi-continuous assignment .end .model processor # I/O ports .inputs REPLY_OWNED .outputs reply_waiting .inputs REPLY_WAITING .inputs master .outputs reply_owned .outputs reply_stall .outputs cmd .inputs REPLY_STALL .inputs CMD .mv snoop 3 invalid shared owned .mv cmd 9 idle read_shared read_owned write_invalid write_shared write_resp_invalid write_resp_shared invalidate response .mv CMD 9 idle read_shared read_owned write_invalid write_shared write_resp_invalid write_resp_shared invalidate response .mv state 3 invalid shared owned .mv nond_cmd 9 idle read_shared read_owned write_invalid write_shared write_resp_invalid write_resp_shared invalidate response .subckt bus_device Bdevice CMD=CMD master=master REPLY_STALL=REPLY_STALL REPLY_WAITING=REPLY_WAITING waiting=waiting reply_waiting=reply_waiting abort=abort .subckt cache_device Cdevice CMD=CMD master=master abort=abort waiting=waiting state=state snoop=snoop reply_owned=reply_owned readable=readable writable=writable # assign cmd = (master && state == invalid ) ? nond_cmd : (master && state == shared ) ? 2 : (master && state == owned && snoop == owned ) ? 5 : (master && state == owned && snoop == shared ) ? 6 : (master && state == owned && snoop == invalid ) ? 3 : 0 .mv cmd$raw_n49 9 idle read_shared read_owned write_invalid write_shared write_resp_invalid write_resp_shared invalidate response .mv _n4b 3 invalid shared owned .names _n4b invalid # state == 0 .names state _n4b _n4a .def 0 - =state 1 # master && state == 0 .names master _n4a _n4c .def 0 1 1 1 .mv _n4e 3 invalid shared owned .names _n4e shared # state == 1 .names state _n4e _n4d .def 0 - =state 1 # master && state == 1 .names master _n4d _n4f .def 0 1 1 1 .mv _n51 3 invalid shared owned .names _n51 owned # state == 2 .names state _n51 _n50 .def 0 - =state 1 # master && state == 2 .names master _n50 _n52 .def 0 1 1 1 .mv _n54 3 invalid shared owned .names _n54 owned # snoop == 2 .names snoop _n54 _n53 .def 0 - =snoop 1 # master && state == 2 && snoop == 2 .names _n52 _n53 _n55 .def 0 1 1 1 .mv _n57 3 invalid shared owned .names _n57 owned # state == 2 .names state _n57 _n56 .def 0 - =state 1 # master && state == 2 .names master _n56 _n58 .def 0 1 1 1 .mv _n5a 3 invalid shared owned .names _n5a shared # snoop == 1 .names snoop _n5a _n59 .def 0 - =snoop 1 # master && state == 2 && snoop == 1 .names _n58 _n59 _n5b .def 0 1 1 1 .mv _n5d 3 invalid shared owned .names _n5d owned # state == 2 .names state _n5d _n5c .def 0 - =state 1 # master && state == 2 .names master _n5c _n5e .def 0 1 1 1 .mv _n60 3 invalid shared owned .names _n60 invalid # snoop == 0 .names snoop _n60 _n5f .def 0 - =snoop 1 # master && state == 2 && snoop == 0 .names _n5e _n5f _n61 .def 0 1 1 1 .mv _n62 9 idle read_shared read_owned write_invalid write_shared write_resp_invalid write_resp_shared invalidate response .names _n62 write_invalid .mv _n63 9 idle read_shared read_owned write_invalid write_shared write_resp_invalid write_resp_shared invalidate response .names _n63 idle # (master && state == 2 && snoop == 0) ? 3 : 0 .mv _n64 9 idle read_shared read_owned write_invalid write_shared write_resp_invalid write_resp_shared invalidate response .names _n62 _n63 _n61 _n64 - - 0 =_n63 - - 1 =_n62 .mv _n65 9 idle read_shared read_owned write_invalid write_shared write_resp_invalid write_resp_shared invalidate response .names _n65 write_resp_shared # (master && state == 2 && snoop == 1) ? 6 : (master && state == 2 && snoop == 0) ? 3 : 0 .mv _n66 9 idle read_shared read_owned write_invalid write_shared write_resp_invalid write_resp_shared invalidate response .names _n65 _n64 _n5b _n66 - - 0 =_n64 - - 1 =_n65 .mv _n67 9 idle read_shared read_owned write_invalid write_shared write_resp_invalid write_resp_shared invalidate response .names _n67 write_resp_invalid # (master && state == 2 && snoop == 2) ? 5 : (master && state == 2 && snoop == 1) ? 6 : (master && state == 2 && snoop == 0) ? 3 : 0 .mv _n68 9 idle read_shared read_owned write_invalid write_shared write_resp_invalid write_resp_shared invalidate response .names _n67 _n66 _n55 _n68 - - 0 =_n66 - - 1 =_n67 .mv _n69 9 idle read_shared read_owned write_invalid write_shared write_resp_invalid write_resp_shared invalidate response .names _n69 read_owned # (master && state == 1) ? 2 : (master && state == 2 && snoop == 2) ? 5 : (master && state == 2 && snoop == 1) ? 6 : (master && state == 2 && snoop == 0) ? 3 : 0 .mv _n6a 9 idle read_shared read_owned write_invalid write_shared write_resp_invalid write_resp_shared invalidate response .names _n69 _n68 _n4f _n6a - - 0 =_n68 - - 1 =_n69 # (master && state == 0) ? nond_cmd : (master && state == 1) ? 2 : (master && state == 2 && snoop == 2) ? 5 : (master && state == 2 && snoop == 1) ? 6 : (master && state == 2 && snoop == 0) ? 3 : 0 .mv _n6b 9 idle read_shared read_owned write_invalid write_shared write_resp_invalid write_resp_shared invalidate response .names nond_cmd _n6a _n4c _n6b - - 0 =_n6a - - 1 =nond_cmd .names _n6b cmd$raw_n49 - =_n6b # assign nond_cmd = $NDset ( 1,2 ) .names nond_cmd read_shared read_owned # assign reply_stall = $NDset ( 0,1 ) .names reply_stall 0 1 # conflict arbitrators .names cmd$raw_n49 cmd - =cmd$raw_n49 # non-blocking assignments # latches # quasi-continuous assignment .end .model memory # I/O ports .inputs REPLY_OWNED .outputs reply_waiting .inputs REPLY_WAITING .inputs master .outputs reply_owned .outputs reply_stall .outputs cmd .inputs REPLY_STALL .inputs CMD .mv cmd 9 idle read_shared read_owned write_invalid write_shared write_resp_invalid write_resp_shared invalidate response .mv CMD 9 idle read_shared read_owned write_invalid write_shared write_resp_invalid write_resp_shared invalidate response .mv nond_cmd 9 idle read_shared read_owned write_invalid write_shared write_resp_invalid write_resp_shared invalidate response # assign reply_owned = 0 .names reply_owned$raw_n70 0 # assign reply_waiting = 0 .names reply_waiting$raw_n71 0 # assign abort = REPLY_STALL || (CMD == read_shared || CMD == read_owned ) && REPLY_WAITING || (CMD == read_shared || CMD == read_owned ) && REPLY_OWNED .mv _n74 9 idle read_shared read_owned write_invalid write_shared write_resp_invalid write_resp_shared invalidate response .names _n74 read_shared # CMD == 1 .names CMD _n74 _n73 .def 0 - =CMD 1 .mv _n76 9 idle read_shared read_owned write_invalid write_shared write_resp_invalid write_resp_shared invalidate response .names _n76 read_owned # CMD == 2 .names CMD _n76 _n75 .def 0 - =CMD 1 # CMD == 1 || CMD == 2 .names _n73 _n75 _n77 .def 1 0 0 0 # (CMD == 1 || CMD == 2) && REPLY_WAITING .names _n77 REPLY_WAITING _n78 .def 0 1 1 1 # REPLY_STALL || (CMD == 1 || CMD == 2) && REPLY_WAITING .names REPLY_STALL _n78 _n79 .def 1 0 0 0 .mv _n7b 9 idle read_shared read_owned write_invalid write_shared write_resp_invalid write_resp_shared invalidate response .names _n7b read_shared # CMD == 1 .names CMD _n7b _n7a .def 0 - =CMD 1 .mv _n7d 9 idle read_shared read_owned write_invalid write_shared write_resp_invalid write_resp_shared invalidate response .names _n7d read_owned # CMD == 2 .names CMD _n7d _n7c .def 0 - =CMD 1 # CMD == 1 || CMD == 2 .names _n7a _n7c _n7e .def 1 0 0 0 # (CMD == 1 || CMD == 2) && REPLY_OWNED .names _n7e REPLY_OWNED _n7f .def 0 1 1 1 # REPLY_STALL || (CMD == 1 || CMD == 2) && REPLY_WAITING || (CMD == 1 || CMD == 2) && REPLY_OWNED .names _n79 _n7f _n80 .def 1 0 0 0 .names _n80 abort$raw_n72 - =_n80 # assign cmd = (master && busy ) ? nond_cmd : 0 .mv cmd$raw_n81 9 idle read_shared read_owned write_invalid write_shared write_resp_invalid write_resp_shared invalidate response # master && busy .names master busy _n82 .def 0 1 1 1 .mv _n83 9 idle read_shared read_owned write_invalid write_shared write_resp_invalid write_resp_shared invalidate response .names _n83 idle # (master && busy ) ? nond_cmd : 0 .mv _n84 9 idle read_shared read_owned write_invalid write_shared write_resp_invalid write_resp_shared invalidate response .names nond_cmd _n83 _n82 _n84 - - 0 =_n83 - - 1 =nond_cmd .names _n84 cmd$raw_n81 - =_n84 # assign reply_stall = (busy && (CMD == read_shared || CMD == read_owned || CMD == write_invalid || CMD == write_shared || CMD == write_resp_invalid || CMD == write_resp_shared )) ? 1 : nond_reply_stall .mv _n87 9 idle read_shared read_owned write_invalid write_shared write_resp_invalid write_resp_shared invalidate response .names _n87 read_shared # CMD == 1 .names CMD _n87 _n86 .def 0 - =CMD 1 .mv _n89 9 idle read_shared read_owned write_invalid write_shared write_resp_invalid write_resp_shared invalidate response .names _n89 read_owned # CMD == 2 .names CMD _n89 _n88 .def 0 - =CMD 1 # CMD == 1 || CMD == 2 .names _n86 _n88 _n8a .def 1 0 0 0 .mv _n8c 9 idle read_shared read_owned write_invalid write_shared write_resp_invalid write_resp_shared invalidate response .names _n8c write_invalid # CMD == 3 .names CMD _n8c _n8b .def 0 - =CMD 1 # CMD == 1 || CMD == 2 || CMD == 3 .names _n8a _n8b _n8d .def 1 0 0 0 .mv _n8f 9 idle read_shared read_owned write_invalid write_shared write_resp_invalid write_resp_shared invalidate response .names _n8f write_shared # CMD == 4 .names CMD _n8f _n8e .def 0 - =CMD 1 # CMD == 1 || CMD == 2 || CMD == 3 || CMD == 4 .names _n8d _n8e _n90 .def 1 0 0 0 .mv _n92 9 idle read_shared read_owned write_invalid write_shared write_resp_invalid write_resp_shared invalidate response .names _n92 write_resp_invalid # CMD == 5 .names CMD _n92 _n91 .def 0 - =CMD 1 # CMD == 1 || CMD == 2 || CMD == 3 || CMD == 4 || CMD == 5 .names _n90 _n91 _n93 .def 1 0 0 0 .mv _n95 9 idle read_shared read_owned write_invalid write_shared write_resp_invalid write_resp_shared invalidate response .names _n95 write_resp_shared # CMD == 6 .names CMD _n95 _n94 .def 0 - =CMD 1 # CMD == 1 || CMD == 2 || CMD == 3 || CMD == 4 || CMD == 5 || CMD == 6 .names _n93 _n94 _n96 .def 1 0 0 0 # busy && (CMD == 1 || CMD == 2 || CMD == 3 || CMD == 4 || CMD == 5 || CMD == 6) .names busy _n96 _n97 .def 0 1 1 1 .names _n98 1 # (busy && (CMD == 1 || CMD == 2 || CMD == 3 || CMD == 4 || CMD == 5 || CMD == 6)) ? 1 : nond_reply_stall .names _n98 nond_reply_stall _n97 _n99 0 - 1 0 1 - 1 1 - 0 0 0 - 1 0 1 .names _n99 reply_stall$raw_n85 - =_n99 # assign nond_reply_stall = $NDset ( 0,1 ) .names nond_reply_stall 0 1 # assign nond_cmd = $NDset ( 8,0 ) .names nond_cmd response idle # busy = 0 .names busy$raw_n9f 0 # non-blocking assignments for initial .names abort _na0 - =abort # busy = busy .names busy busy$abort_na1$true - =busy .mv _na3 9 idle read_shared read_owned write_invalid write_shared write_resp_invalid write_resp_shared invalidate response .names _na3 response # CMD == 8 .names CMD _na3 _na2 .def 0 - =CMD 1 # master && CMD == 8 .names master _na2 _na4 .def 0 1 1 1 .names _na4 _na5 - =_na4 # busy = 0 .names busy$_na4_na6$true 0 .names master _na7 0 1 1 0 .mv _na9 9 idle read_shared read_owned write_invalid write_shared write_resp_invalid write_resp_shared invalidate response .names _na9 read_owned # CMD == 2 .names CMD _na9 _na8 .def 0 - =CMD 1 # !master && CMD == 2 .names _na7 _na8 _naa .def 0 1 1 1 .mv _nac 9 idle read_shared read_owned write_invalid write_shared write_resp_invalid write_resp_shared invalidate response .names _nac read_shared # CMD == 1 .names CMD _nac _nab .def 0 - =CMD 1 # !master && CMD == 2 || CMD == 1 .names _naa _nab _nad .def 1 0 0 0 .names _nad _nae - =_nad # busy = 1 .names busy$_nad_naf$true 1 # if/else (!master && CMD == 2 || CMD == 1) .names busy$_nad_naf$true busy _nad busy$_nad$raw_nb2 0 - 1 0 1 - 1 1 - 0 0 0 - 1 0 1 # if/else (master && CMD == 8) .names busy$_na4_na6$true busy$_nad$raw_nb2 _na4 busy$_na4$raw_nb5 0 - 1 0 1 - 1 1 - 0 0 0 - 1 0 1 # if/else (abort ) .names busy$abort_na1$true busy$_na4$raw_nb5 abort busy$abort$raw_nba 0 - 1 0 1 - 1 1 - 0 0 0 - 1 0 1 # conflict arbitrators .names _na0 _na5 _nae _nbe .def 0 1 - - 1 0 1 - 1 0 0 1 1 .names _nbe busy$abort$raw_nba busy _nbf 1 0 - 0 1 1 - 1 0 - 0 0 0 - 1 1 .names reply_waiting$raw_n71 reply_waiting 0 0 1 1 .names abort$raw_n72 abort 0 0 1 1 .names reply_owned$raw_n70 reply_owned 0 0 1 1 .names reply_stall$raw_n85 reply_stall 0 0 1 1 .names cmd$raw_n81 cmd - =cmd$raw_n81 # non-blocking assignments # latches .r busy$raw_n9f busy 0 0 1 1 .latch _nbf busy # quasi-continuous assignment .end .model cache_device # I/O ports .outputs writable .outputs readable .outputs snoop .inputs master .outputs reply_owned .inputs abort .inputs CMD .outputs state .inputs waiting .mv snoop 3 invalid shared owned .mv nond_state 3 invalid shared owned .mv nond_snoop 3 invalid shared owned .mv CMD 9 idle read_shared read_owned write_invalid write_shared write_resp_invalid write_resp_shared invalidate response .mv state 3 invalid shared owned # assign readable = ((state == shared ) || (state == owned )) && !waiting .mv _nc2 3 invalid shared owned .names _nc2 shared # state == 1 .names state _nc2 _nc1 .def 0 - =state 1 .mv _nc4 3 invalid shared owned .names _nc4 owned # state == 2 .names state _nc4 _nc3 .def 0 - =state 1 # (state == 1) || (state == 2) .names _nc1 _nc3 _nc5 .def 1 0 0 0 .names waiting _nc6 0 1 1 0 # ((state == 1) || (state == 2)) && !waiting .names _nc5 _nc6 _nc7 .def 0 1 1 1 .names _nc7 readable$raw_nc0 - =_nc7 # assign writable = (state == owned ) && (!waiting ) .mv _nca 3 invalid shared owned .names _nca owned # state == 2 .names state _nca _nc9 .def 0 - =state 1 .names waiting _ncb 0 1 1 0 # (state == 2) && (!waiting ) .names _nc9 _ncb _ncc .def 0 1 1 1 .names _ncc writable$raw_nc8 - =_ncc # assign reply_owned = (!master ) && (state == owned ) .names master _nce 0 1 1 0 .mv _nd0 3 invalid shared owned .names _nd0 owned # state == 2 .names state _nd0 _ncf .def 0 - =state 1 # (!master ) && (state == 2) .names _nce _ncf _nd1 .def 0 1 1 1 .names _nd1 reply_owned$raw_ncd - =_nd1 # assign nond_snoop = $NDset ( 1,2 ) .names nond_snoop shared owned # assign nond_state = $NDset ( 1,0 ) .names nond_state shared invalid # state = 0 .mv state$raw_nd6 3 invalid shared owned .names state$raw_nd6 invalid # non-blocking assignments for initial # snoop = 0 .mv snoop$raw_nd7 3 invalid shared owned .names snoop$raw_nd7 invalid # non-blocking assignments for initial .names abort _nd8 - =abort # snoop = snoop .mv snoop$abort_nd9$true 3 invalid shared owned .names snoop snoop$abort_nd9$true - =snoop .names master _nda 0 1 1 0 .mv _ndc 3 invalid shared owned .names _ndc owned # state == 2 .names state _ndc _ndb .def 0 - =state 1 # !master && state == 2 .names _nda _ndb _ndd .def 0 1 1 1 .mv _ndf 9 idle read_shared read_owned write_invalid write_shared write_resp_invalid write_resp_shared invalidate response .names _ndf read_shared # CMD == 1 .names CMD _ndf _nde .def 0 - =CMD 1 # !master && state == 2 && CMD == 1 .names _ndd _nde _ne0 .def 0 1 1 1 .names _ne0 _ne1 - =_ne0 # snoop = nond_snoop .mv snoop$_ne0_ne2$true 3 invalid shared owned .names nond_snoop snoop$_ne0_ne2$true - =nond_snoop .mv _ne4 9 idle read_shared read_owned write_invalid write_shared write_resp_invalid write_resp_shared invalidate response .names _ne4 write_resp_invalid # CMD == 5 .names CMD _ne4 _ne3 .def 0 - =CMD 1 # master && CMD == 5 .names master _ne3 _ne5 .def 0 1 1 1 .names _ne5 _ne6 - =_ne5 # snoop = 0 .mv snoop$_ne5_ne7$true 3 invalid shared owned .names snoop$_ne5_ne7$true invalid .mv _ne9 9 idle read_shared read_owned write_invalid write_shared write_resp_invalid write_resp_shared invalidate response .names _ne9 write_resp_shared # CMD == 6 .names CMD _ne9 _ne8 .def 0 - =CMD 1 # master && CMD == 6 .names master _ne8 _nea .def 0 1 1 1 .names _nea _neb - =_nea # snoop = 0 .mv snoop$_nea_nec$true 3 invalid shared owned .names snoop$_nea_nec$true invalid # if/else (master && CMD == 6) .mv snoop$_nea$raw_nef 3 invalid shared owned .names snoop$_nea_nec$true snoop _nea snoop$_nea$raw_nef - - 0 =snoop - - 1 =snoop$_nea_nec$true # if/else (master && CMD == 5) .mv snoop$_ne5$raw_nf1 3 invalid shared owned .names snoop$_ne5_ne7$true snoop$_nea$raw_nef _ne5 snoop$_ne5$raw_nf1 - - 0 =snoop$_nea$raw_nef - - 1 =snoop$_ne5_ne7$true # if/else (!master && state == 2 && CMD == 1) .mv snoop$_ne0$raw_nf5 3 invalid shared owned .names snoop$_ne0_ne2$true snoop$_ne5$raw_nf1 _ne0 snoop$_ne0$raw_nf5 - - 0 =snoop$_ne5$raw_nf1 - - 1 =snoop$_ne0_ne2$true # if/else (abort ) .mv snoop$abort$raw_nf9 3 invalid shared owned .names snoop$abort_nd9$true snoop$_ne0$raw_nf5 abort snoop$abort$raw_nf9 - - 0 =snoop$_ne0$raw_nf5 - - 1 =snoop$abort_nd9$true .names abort _nfc - =abort # state = state .mv state$abort_nfd$true 3 invalid shared owned .names state state$abort_nfd$true - =state .names _nff 1 # master == 1 .names master _nff _n100 .def 0 0 1 1 1 0 1 .names _n100 _nfe 0 1 1 0 .names _nfe _n102 - =_nfe .mv _n105 9 idle read_shared read_owned write_invalid write_shared write_resp_invalid write_resp_shared invalidate response .names _n105 read_shared .names CMD _n105 _n104 .def 0 - =CMD 1 .names _n104 _n103 1 1 0 0 # state = 1 .mv state$_n103_n106$true 3 invalid shared owned .names state$_n103_n106$true shared .mv _n109 9 idle read_shared read_owned write_invalid write_shared write_resp_invalid write_resp_shared invalidate response .names _n109 read_owned .names CMD _n109 _n108 .def 0 - =CMD 1 .names _n108 _n107 1 1 0 0 # state = 2 .mv state$_n107_n10a$true 3 invalid shared owned .names state$_n107_n10a$true owned .mv _n10d 9 idle read_shared read_owned write_invalid write_shared write_resp_invalid write_resp_shared invalidate response .names _n10d write_invalid .names CMD _n10d _n10c .def 0 - =CMD 1 .names _n10c _n10b 1 1 0 0 # state = 0 .mv state$_n10b_n10e$true 3 invalid shared owned .names state$_n10b_n10e$true invalid .mv _n111 9 idle read_shared read_owned write_invalid write_shared write_resp_invalid write_resp_shared invalidate response .names _n111 write_resp_invalid .names CMD _n111 _n110 .def 0 - =CMD 1 .names _n110 _n10f 1 1 0 0 # state = 0 .mv state$_n10f_n112$true 3 invalid shared owned .names state$_n10f_n112$true invalid .mv _n115 9 idle read_shared read_owned write_invalid write_shared write_resp_invalid write_resp_shared invalidate response .names _n115 write_shared .names CMD _n115 _n114 .def 0 - =CMD 1 .names _n114 _n113 1 1 0 0 # state = 1 .mv state$_n113_n116$true 3 invalid shared owned .names state$_n113_n116$true shared .mv _n119 9 idle read_shared read_owned write_invalid write_shared write_resp_invalid write_resp_shared invalidate response .names _n119 write_resp_shared .names CMD _n119 _n118 .def 0 - =CMD 1 .names _n118 _n117 1 1 0 0 # state = 1 .mv state$_n117_n11a$true 3 invalid shared owned .names state$_n117_n11a$true shared # case (CMD ) .mv state$_n117$raw_n120 3 invalid shared owned .names state$_n117_n11a$true state _n117 state$_n117$raw_n120 - - 0 =state - - 1 =state$_n117_n11a$true .mv state$_n113$raw_n123 3 invalid shared owned .names state$_n113_n116$true state$_n117$raw_n120 _n113 state$_n113$raw_n123 - - 0 =state$_n117$raw_n120 - - 1 =state$_n113_n116$true .mv state$_n10f$raw_n12b 3 invalid shared owned .names state$_n10f_n112$true state$_n113$raw_n123 _n10f state$_n10f$raw_n12b - - 0 =state$_n113$raw_n123 - - 1 =state$_n10f_n112$true .mv state$_n10b$raw_n133 3 invalid shared owned .names state$_n10b_n10e$true state$_n10f$raw_n12b _n10b state$_n10b$raw_n133 - - 0 =state$_n10f$raw_n12b - - 1 =state$_n10b_n10e$true .mv state$_n107$raw_n13b 3 invalid shared owned .names state$_n107_n10a$true state$_n10b$raw_n133 _n107 state$_n107$raw_n13b - - 0 =state$_n10b$raw_n133 - - 1 =state$_n107_n10a$true .mv state$_n103$raw_n143 3 invalid shared owned .names state$_n103_n106$true state$_n107$raw_n13b _n103 state$_n103$raw_n143 - - 0 =state$_n107$raw_n13b - - 1 =state$_n103_n106$true .names master _n14a 0 1 1 0 .mv _n14c 3 invalid shared owned .names _n14c shared # state == 1 .names state _n14c _n14b .def 0 - =state 1 # !master && state == 1 .names _n14a _n14b _n14d .def 0 1 1 1 .mv _n14f 9 idle read_shared read_owned write_invalid write_shared write_resp_invalid write_resp_shared invalidate response .names _n14f read_owned # CMD == 2 .names CMD _n14f _n14e .def 0 - =CMD 1 .mv _n151 9 idle read_shared read_owned write_invalid write_shared write_resp_invalid write_resp_shared invalidate response .names _n151 invalidate # CMD == 7 .names CMD _n151 _n150 .def 0 - =CMD 1 # CMD == 2 || CMD == 7 .names _n14e _n150 _n152 .def 1 0 0 0 # !master && state == 1 && (CMD == 2 || CMD == 7) .names _n14d _n152 _n153 .def 0 1 1 1 .names _n153 _n154 - =_n153 # state = 0 .mv state$_n153_n155$true 3 invalid shared owned .names state$_n153_n155$true invalid .mv _n157 3 invalid shared owned .names _n157 shared # state == 1 .names state _n157 _n156 .def 0 - =state 1 .names _n156 _n158 - =_n156 # state = nond_state .mv state$_n156_n159$true 3 invalid shared owned .names nond_state state$_n156_n159$true - =nond_state # if/else (state == 1) .mv state$_n156$raw_n15f 3 invalid shared owned .names state$_n156_n159$true state _n156 state$_n156$raw_n15f - - 0 =state - - 1 =state$_n156_n159$true # if/else (!master && state == 1 && (CMD == 2 || CMD == 7)) .mv state$_n153$raw_n164 3 invalid shared owned .names state$_n153_n155$true state$_n156$raw_n15f _n153 state$_n153$raw_n164 - - 0 =state$_n156$raw_n15f - - 1 =state$_n153_n155$true # if/else (master == 1) .mv state$_nfe$raw_n16c 3 invalid shared owned .names state$_n103$raw_n143 state$_n153$raw_n164 _nfe state$_nfe$raw_n16c - - 0 =state$_n153$raw_n164 - - 1 =state$_n103$raw_n143 # if/else (abort ) .mv state$abort$raw_n174 3 invalid shared owned .names state$abort_nfd$true state$_nfe$raw_n16c abort state$abort$raw_n174 - - 0 =state$_nfe$raw_n16c - - 1 =state$abort_nfd$true # conflict arbitrators .names writable$raw_nc8 writable 0 0 1 1 .names readable$raw_nc0 readable 0 0 1 1 .names _nd8 _ne1 _ne6 _neb _n179 .def 0 1 - - - 1 0 1 - - 1 0 0 1 - 1 0 0 0 1 1 .mv _n17a 3 invalid shared owned .names _n179 snoop$abort$raw_nf9 snoop _n17a 1 - - =snoop$abort$raw_nf9 0 - - =snoop .names reply_owned$raw_ncd reply_owned 0 0 1 1 .names _nfc _n102 _n103 _n107 _n10b _n10f _n113 _n117 _n154 _n158 _n187 .def 0 1 - - - - - - - - - 1 0 1 1 - - - - - - - 1 0 1 0 1 - - - - - - 1 0 1 0 0 1 - - - - - 1 0 1 0 0 0 1 - - - - 1 0 1 0 0 0 0 1 - - - 1 0 1 0 0 0 0 0 1 - - 1 0 0 - - - - - - 1 - 1 0 0 - - - - - - 0 1 1 .mv _n188 3 invalid shared owned .names _n187 state$abort$raw_n174 state _n188 1 - - =state$abort$raw_n174 0 - - =state # non-blocking assignments # latches .r snoop$raw_nd7 snoop - =snoop$raw_nd7 .latch _n17a snoop .r state$raw_nd6 state - =state$raw_nd6 .latch _n188 state # quasi-continuous assignment .end .model bus_device # I/O ports .outputs reply_waiting .inputs REPLY_WAITING .inputs master .outputs abort .inputs REPLY_STALL .inputs CMD .outputs waiting .mv CMD 9 idle read_shared read_owned write_invalid write_shared write_resp_invalid write_resp_shared invalidate response # assign reply_waiting = !master && waiting .names master _n196 0 1 1 0 # !master && waiting .names _n196 waiting _n197 .def 0 1 1 1 .names _n197 reply_waiting$raw_n195 - =_n197 # assign abort = REPLY_STALL || ((CMD == read_shared || CMD == read_owned ) && REPLY_WAITING ) .mv _n19a 9 idle read_shared read_owned write_invalid write_shared write_resp_invalid write_resp_shared invalidate response .names _n19a read_shared # CMD == 1 .names CMD _n19a _n199 .def 0 - =CMD 1 .mv _n19c 9 idle read_shared read_owned write_invalid write_shared write_resp_invalid write_resp_shared invalidate response .names _n19c read_owned # CMD == 2 .names CMD _n19c _n19b .def 0 - =CMD 1 # CMD == 1 || CMD == 2 .names _n199 _n19b _n19d .def 1 0 0 0 # (CMD == 1 || CMD == 2) && REPLY_WAITING .names _n19d REPLY_WAITING _n19e .def 0 1 1 1 # REPLY_STALL || ((CMD == 1 || CMD == 2) && REPLY_WAITING ) .names REPLY_STALL _n19e _n19f .def 1 0 0 0 .names _n19f abort$raw_n198 - =_n19f # waiting = 0 .names waiting$raw_n1a0 0 # non-blocking assignments for initial .names abort _n1a1 - =abort # waiting = waiting .names waiting waiting$abort_n1a2$true - =waiting .mv _n1a4 9 idle read_shared read_owned write_invalid write_shared write_resp_invalid write_resp_shared invalidate response .names _n1a4 read_shared # CMD == 1 .names CMD _n1a4 _n1a3 .def 0 - =CMD 1 # master && CMD == 1 .names master _n1a3 _n1a5 .def 0 1 1 1 .names _n1a5 _n1a6 - =_n1a5 # waiting = 1 .names waiting$_n1a5_n1a7$true 1 .mv _n1a9 9 idle read_shared read_owned write_invalid write_shared write_resp_invalid write_resp_shared invalidate response .names _n1a9 read_owned # CMD == 2 .names CMD _n1a9 _n1a8 .def 0 - =CMD 1 # master && CMD == 2 .names master _n1a8 _n1aa .def 0 1 1 1 .names _n1aa _n1ab - =_n1aa # waiting = 1 .names waiting$_n1aa_n1ac$true 1 .names master _n1ad 0 1 1 0 .mv _n1af 9 idle read_shared read_owned write_invalid write_shared write_resp_invalid write_resp_shared invalidate response .names _n1af response # CMD == 8 .names CMD _n1af _n1ae .def 0 - =CMD 1 # !master && CMD == 8 .names _n1ad _n1ae _n1b0 .def 0 1 1 1 .names _n1b0 _n1b1 - =_n1b0 # waiting = 0 .names waiting$_n1b0_n1b2$true 0 .names master _n1b3 0 1 1 0 .mv _n1b5 9 idle read_shared read_owned write_invalid write_shared write_resp_invalid write_resp_shared invalidate response .names _n1b5 write_resp_invalid # CMD == 5 .names CMD _n1b5 _n1b4 .def 0 - =CMD 1 # !master && CMD == 5 .names _n1b3 _n1b4 _n1b6 .def 0 1 1 1 .names _n1b6 _n1b7 - =_n1b6 # waiting = 0 .names waiting$_n1b6_n1b8$true 0 .names master _n1b9 0 1 1 0 .mv _n1bb 9 idle read_shared read_owned write_invalid write_shared write_resp_invalid write_resp_shared invalidate response .names _n1bb write_resp_shared # CMD == 6 .names CMD _n1bb _n1ba .def 0 - =CMD 1 # !master && CMD == 6 .names _n1b9 _n1ba _n1bc .def 0 1 1 1 .names _n1bc _n1bd - =_n1bc # waiting = 0 .names waiting$_n1bc_n1be$true 0 # if/else (!master && CMD == 6) .names waiting$_n1bc_n1be$true waiting _n1bc waiting$_n1bc$raw_n1c1 0 - 1 0 1 - 1 1 - 0 0 0 - 1 0 1 # if/else (!master && CMD == 5) .names waiting$_n1b6_n1b8$true waiting$_n1bc$raw_n1c1 _n1b6 waiting$_n1b6$raw_n1c4 0 - 1 0 1 - 1 1 - 0 0 0 - 1 0 1 # if/else (!master && CMD == 8) .names waiting$_n1b0_n1b2$true waiting$_n1b6$raw_n1c4 _n1b0 waiting$_n1b0$raw_n1c9 0 - 1 0 1 - 1 1 - 0 0 0 - 1 0 1 # if/else (master && CMD == 2) .names waiting$_n1aa_n1ac$true waiting$_n1b0$raw_n1c9 _n1aa waiting$_n1aa$raw_n1ce 0 - 1 0 1 - 1 1 - 0 0 0 - 1 0 1 # if/else (master && CMD == 1) .names waiting$_n1a5_n1a7$true waiting$_n1aa$raw_n1ce _n1a5 waiting$_n1a5$raw_n1d3 0 - 1 0 1 - 1 1 - 0 0 0 - 1 0 1 # if/else (abort ) .names waiting$abort_n1a2$true waiting$_n1a5$raw_n1d3 abort waiting$abort$raw_n1d8 0 - 1 0 1 - 1 1 - 0 0 0 - 1 0 1 # conflict arbitrators .names reply_waiting$raw_n195 reply_waiting 0 0 1 1 .names abort$raw_n198 abort 0 0 1 1 .names _n1a1 _n1a6 _n1ab _n1b1 _n1b7 _n1bd _n1dc .def 0 1 - - - - - 1 0 1 - - - - 1 0 0 1 - - - 1 0 0 0 1 - - 1 0 0 0 0 1 - 1 0 0 0 0 0 1 1 .names _n1dc waiting$abort$raw_n1d8 waiting _n1dd 1 0 - 0 1 1 - 1 0 - 0 0 0 - 1 1 # non-blocking assignments # latches .r waiting$raw_n1a0 waiting 0 0 1 1 .latch _n1dd waiting # quasi-continuous assignment .end