# vl2mv proptmp0.v # version: 0.2 # date: 16:14:00 10/02/00 (GMT) .model main # I/O ports .outputs ack1 .outputs ack2 .outputs ack3 .outputs ENDST2 .outputs ack4 .outputs ENDST1 .outputs ack5 # assign TTreq1 = $NDset ( 0,1 ) .names TTreq1 0 1 # req1 = TTreq1 .names TTreq1 req1$raw_n2 - =TTreq1 # non-blocking assignments for initial # req1 = TTreq1 .names TTreq1 req1$raw_n3 - =TTreq1 # assign TTreq2 = $NDset ( 0,1 ) .names TTreq2 0 1 # req2 = TTreq2 .names TTreq2 req2$raw_n6 - =TTreq2 # non-blocking assignments for initial # req2 = TTreq2 .names TTreq2 req2$raw_n7 - =TTreq2 # assign TTreq3 = $NDset ( 0,1 ) .names TTreq3 0 1 # req3 = TTreq3 .names TTreq3 req3$raw_na - =TTreq3 # non-blocking assignments for initial # req3 = TTreq3 .names TTreq3 req3$raw_nb - =TTreq3 # assign TTreq4 = $NDset ( 0,1 ) .names TTreq4 0 1 # req4 = TTreq4 .names TTreq4 req4$raw_ne - =TTreq4 # non-blocking assignments for initial # req4 = TTreq4 .names TTreq4 req4$raw_nf - =TTreq4 # assign TTreq5 = $NDset ( 0,1 ) .names TTreq5 0 1 # req5 = TTreq5 .names TTreq5 req5$raw_n12 - =TTreq5 # non-blocking assignments for initial # req5 = TTreq5 .names TTreq5 req5$raw_n13 - =TTreq5 .subckt arbiter _n14 req1=req1 req2=req2 req3=req3 req4=req4 req5=req5 ack1=ack1 ack2=ack2 ack3=ack3 ack4=ack4 ack5=ack5 # assign req = (req1 ) .names req1 req$raw_n15 - =req1 # assign ack = (ack1 ) .names ack1 ack$raw_n16 - =ack1 .subckt propobs1mod _n17 req=req ack=ack ENDST=ENDST1 .subckt propobs2mod _n18 req=req ack=ack ENDST=ENDST2 # conflict arbitrators .names req$raw_n15 req 0 0 1 1 .names _n19 .def 0 1 .names _n19 req1$raw_n3 _n1a .def 0 1 0 0 1 1 1 .names _n1b .def 0 1 .names _n1b req2$raw_n7 _n1c .def 0 1 0 0 1 1 1 .names _n1d .def 0 1 .names _n1d req3$raw_nb _n1e .def 0 1 0 0 1 1 1 .names ack$raw_n16 ack 0 0 1 1 .names _n1f .def 0 1 .names _n1f req4$raw_nf _n20 .def 0 1 0 0 1 1 1 .names _n21 .def 0 1 .names _n21 req5$raw_n13 _n22 .def 0 1 0 0 1 1 1 # non-blocking assignments # latches .r req1$raw_n2 req1 0 0 1 1 .latch _n1a req1 .r req2$raw_n6 req2 0 0 1 1 .latch _n1c req2 .r req3$raw_na req3 0 0 1 1 .latch _n1e req3 .r req4$raw_ne req4 0 0 1 1 .latch _n20 req4 .r req5$raw_n12 req5 0 0 1 1 .latch _n22 req5 # quasi-continuous assignment .end .model arbiter # I/O ports .outputs ack1 .outputs ack2 .outputs ack3 .outputs ack4 .outputs ack5 .inputs req1 .inputs req2 .inputs req3 .inputs req4 .inputs req5 # assign o5 = 0 .names o5$raw_n23 0 .names o0 _n24 0 1 1 0 .names _n25 1 .subckt arbiter_element arel1 request=req1 token_in=t5 token_out=t1 override_in=o1 override_out=o0 grant_in=_n24 grant_out=g1 init_token=_n25 ack_out=ack1 .names _n26 0 .subckt arbiter_element arel2 request=req2 token_in=t1 token_out=t2 override_in=o2 override_out=o1 grant_in=g1 grant_out=g2 init_token=_n26 ack_out=ack2 .names _n27 0 .subckt arbiter_element arel3 request=req3 token_in=t2 token_out=t3 override_in=o3 override_out=o2 grant_in=g2 grant_out=g3 init_token=_n27 ack_out=ack3 .names _n28 0 .subckt arbiter_element arel4 request=req4 token_in=t3 token_out=t4 override_in=o4 override_out=o3 grant_in=g3 grant_out=g4 init_token=_n28 ack_out=ack4 .names _n29 0 .subckt arbiter_element arel5 request=req5 token_in=t4 token_out=t5 override_in=o5 override_out=o4 grant_in=g4 grant_out=g5 init_token=_n29 ack_out=ack5 # conflict arbitrators .names o5$raw_n23 o5 0 0 1 1 # non-blocking assignments # latches # quasi-continuous assignment .end .model propobs1mod .inputs req ack .outputs ENDST .mv ODCST,DCST 8 .reset ODCST 1 .latch DCST ODCST .table ODCST req ack -> DCST 0 - - 1 1 0 - 2 1 1 0 3 1 1 1 2 2 0 - 2 2 1 0 3 2 1 1 2 3 0 - 2 3 1 0 4 3 1 1 2 4 0 - 2 4 1 0 5 4 1 1 2 5 0 - 2 5 1 0 6 5 1 1 2 6 0 - 2 6 1 0 7 6 1 1 2 7 - - 7 .table DCST -> ENDST .default 0 2 1 3 1 4 1 5 1 6 1 .end .model propobs2mod .inputs req ack .outputs ENDST .mv ODCST,DCST 4 .reset ODCST 1 .latch DCST ODCST .table ODCST req ack -> DCST 0 - - 1 1 0 0 2 1 0 1 3 1 1 - 2 2 0 0 2 2 0 1 3 2 1 - 2 3 - - 3 .table DCST -> ENDST .default 0 2 1 .end .model arbiter_element # I/O ports .outputs token_out .inputs override_in .outputs ack_out .outputs override_out .inputs grant_in .inputs request .inputs init_token .inputs token_in .outputs grant_out # token = init_token .names init_token token$raw_n2a - =init_token # non-blocking assignments for initial # persistent = 0 .names persistent$raw_n2b 0 # non-blocking assignments for initial # token = token_in .names token_in token$raw_n2c - =token_in # persistent = request && (persistent || token ) # persistent || token .names persistent token _n2e .def 1 0 0 0 # request && (persistent || token ) .names request _n2e _n2f .def 0 1 1 1 .names _n2f persistent$raw_n2d - =_n2f # assign override_out = override_in || (persistent && token ) # persistent && token .names persistent token _n31 .def 0 1 1 1 # override_in || (persistent && token ) .names override_in _n31 _n32 .def 1 0 0 0 .names _n32 override_out$raw_n30 - =_n32 # assign grant_out = (!request ) && grant_in .names request _n34 0 1 1 0 # (!request ) && grant_in .names _n34 grant_in _n35 .def 0 1 1 1 .names _n35 grant_out$raw_n33 - =_n35 # assign ack_out = request && ((persistent && token ) || grant_in ) # persistent && token .names persistent token _n37 .def 0 1 1 1 # (persistent && token ) || grant_in .names _n37 grant_in _n38 .def 1 0 0 0 # request && ((persistent && token ) || grant_in ) .names request _n38 _n39 .def 0 1 1 1 .names _n39 ack_out$raw_n36 - =_n39 # assign token_out = token .names token token_out$raw_n3a - =token # conflict arbitrators .names token_out$raw_n3a token_out 0 0 1 1 .names _n3b .def 0 1 .names _n3b persistent$raw_n2d _n3c .def 0 1 0 0 1 1 1 .names ack_out$raw_n36 ack_out 0 0 1 1 .names override_out$raw_n30 override_out 0 0 1 1 .names _n3d .def 0 1 .names _n3d token$raw_n2c _n3e .def 0 1 0 0 1 1 1 .names grant_out$raw_n33 grant_out 0 0 1 1 # non-blocking assignments # latches .r persistent$raw_n2b persistent 0 0 1 1 .latch _n3c persistent .r token$raw_n2a token 0 0 1 1 .latch _n3e token # quasi-continuous assignment .end