|
logicname sample
{ -------------------------------------- }
{ 実効譜 }
{ -------------------------------------- }
entity div8
input reset; {初期化}
input a[8]; {被除数}
input b[8]; {除数}
output q[8]; {商}
output p[8]; {余り}
bitr rah[8]; {a 移動上8桁}
bitr ral[8]; {a 移動下8桁}
bitr rq[8]; {商 記憶}
bitr pseq[4]; {計算手順}
if (reset) {←初期化}
rah=0;
ral=a;
rq=0;
pseq=0;
else {↓計算}
if (pseq<=8) {↓計算手順が8未満なら計算}
pseq=pseq+1; {←計算手順を進めます。}
rah.0=ral.7; {←aを上位に桁移動}
ral.1:7=ral.0:6;
if (rah>=b) {←a 移動上8桁とbが同じかaが大きい場合は}
rah=(rah-b)>>1; {bを減算して桁移動します。}
else {←a 移動上8桁よりbが大きい場合は桁移動だけします。}
rah.1:7=rah.0:6;
endif
if (rah>=b) {←a 移動上8桁とbが同じかaが大きい場合は}
rq.0=1; {←商の最下位の桁を1にします。}
endif
rq.1:7=rq.0:6;{←商を上位に桁移動}
else {↓計算手順が8以上なら停止}
pseq=pseq;
rah=rah;
ral=ral;
rq=rq;
endif
endif
q=rq; {商の代入}
p.0:6=rah.1:7; {余りの代入}
p.7=0;
ende
{ -------------------------------------- }
{ 機能実行譜 }
{ -------------------------------------- }
entity sim
output reset;
output a[8],b[8];
output q[8];
output p[8];
bitr tc[4];
bitr tca[8];
bitr tcb[8];
part div8(reset,a,b,q,p)
tc=tc+1;
if (tc==15) tca=tca+1; else tca=tca; endif
if ((tc==15)&(tca==255))
tcb=tcb+1;
else
if ((tc==15)&(tcb==0))
tcb=5;
else
tcb=tcb;
endif
endif
reset=(tc==15);
a=tca;
b=tcb;
ende
endlogic
|