logicname sample { -------------------------------------- } { 手続き譜 } { -------------------------------------- } procedure spd input a; output q; bitr rq[2]; switch(rq) case 0: if (a) rq = 1; endif case 1: if (a) rq = rq; else rq = 2; endif case 2: rq = 0; endswitch q = rq.1; endp { -------------------------------------- } { 実効譜 } { -------------------------------------- } entity receive input res; input rs; output q[8]; output sop; output eop; output pe; bitr ts[4]; bitr rc[4]; bitn rp; bitr sc[4]; bitr d[8]; bitr pc; bitr parity; bitn ieop; { - - - - - - - - - - - - - - - - - - - } { 受信検知 } { - - - - - - - - - - - - - - - - - - - } if (res) ts = 0; else if (rs) if (ts.2) ts=ts; else ts=ts+1; endif else if (ts.2) ts=ts; endif endif endif { - - - - - - - - - - - - - - - - - - - } { 受信クロック } { - - - - - - - - - - - - - - - - - - - } if (ts.2) rc = rc + 1; endif { - - - - - - - - - - - - - - - - - - - } { データ取得起点 } { - - - - - - - - - - - - - - - - - - - } rp = spd(rc.2); { - - - - - - - - - - - - - - - - - - - } { 取得計数 } { - - - - - - - - - - - - - - - - - - - } if (ts.2) if (rp) if (sc==10) sc = sc; else sc = sc + 1; endif else sc = sc; endif endif if (sc==10) ieop = 1; endif { - - - - - - - - - - - - - - - - - - - } { データ取得 } { - - - - - - - - - - - - - - - - - - - } if (ts.2) if (sc>=8) d = d; else if (rp) d.7 = rs; d.0:6 = d.1:7; else d = d; endif endif else d = 0; endif { - - - - - - - - - - - - - - - - - - - } { 値1の桁を計数 } { - - - - - - - - - - - - - - - - - - - } if (ts.2) if (sc>=8) pc = pc; else if (rp) if (rs) pc = pc + 1; else pc = pc; endif else pc = pc; endif endif else pc = 0; endif { - - - - - - - - - - - - - - - - - - - } { パリティ取得 } { - - - - - - - - - - - - - - - - - - - } if (ts.2) if (sc==8) parity = rs; else parity = parity; endif endif { - - - - - - - - - - - - - - - - - - - } { パリティエラー } { - - - - - - - - - - - - - - - - - - - } if (ieop) if (parity==pc) pe = 0; else pe = 1; endif endif { - - - - - - - - - - - - - - - - - - - } q = d; sop = ts.2; eop = ieop; ende { -------------------------------------- } { 機能実行譜 } { -------------------------------------- } entity sim output res; output rs; output q[8]; output sop,eop; output pe; bitr tc[8]; bitr b0c[4]; bitr b1c[4]; bitr td[8]; bitn parity; part receive(res,rs,q,sop,eop,pe) tc=tc+1; if ((tc<5)|(tc>120)) res=1; endif if (tc>5) if (b0c==7) b0c=0; else b0c=b0c+1; endif endif if (tc>5) if (b0c==7) b1c=b1c+1; else b1c=b1c; endif endif td=0x55; {←テストデータ} parity=1; {←テストパリティ: この場合はパリティエラーになります。} switch(b1c) case 1: rs=1; case 2: rs=td.0; case 3: rs=td.1; case 4: rs=td.2; case 5: rs=td.3; case 6: rs=td.4; case 7: rs=td.5; case 8: rs=td.6; case 9: rs=td.7; case 10: rs=parity; case 11: rs=1; endswitch ende endlogic |