目次
 ●演算子と記号
 ◎算術演算子
 ○非記憶型論理
 ○記憶型論理
 ◇乗算
 ◇除算
 ◇剰余
 ◎論理演算子
 ◎比較演算子
 ◎桁移動
 ◎記号
|
 
演算子と記号
論理を作ることは条件付けだけでもできますが、常用
する論理を標準のライブラリ(蓄積庫)に置いて言語の
定義する演算子に割り当てておくと論理譜を作ること
が容易になります。
L言語では下表の演算子が使えるようになっています
。
コンパイラ LDC が std.lib を必要とするのはこのた
めです。
演算子は乗算、除算、剰余を除いて非記憶の論理です
。
演算子
2項演算子 |
意味 |
優先順位 |
算術演算 |
* |
乗算 |
1 |
/ |
除算 |
2 |
% |
剰余 |
3 |
+ |
加算 |
15 |
- |
減算 |
16 |
論理演算 |
& |
論理積 |
4 |
| |
論理和 |
5 |
^ |
排他的論理和 |
6 |
比較演算 |
< |
小 |
9 |
> |
大 |
10 |
<= |
小か同じ |
11 |
>= |
大か同じ |
12 |
== |
同じ |
13 |
!= |
異なる |
14 |
桁移動 |
<< |
上移動 |
7 |
>> |
下移動 |
8 |
単項演算子 |
意味 |
論理 |
! |
論理否定 |
算術 |
- |
符号反転 |
記号
括弧 1 |
( |
始め |
) |
終わり |
括弧 2 |
[ |
始め |
] |
終わり |
区切り |
. |
小数点 |
, |
区切り点 |
; |
文末 |
代入記号 |
= |
代入 |
注釈 |
{ |
始め |
} |
終わり |
単項演算子の - は現在対応する論理を用意し
ていません。
q = -a ; とする場合は q = !a + 1 ; としてくださ
い。
 
算術演算子
算術演算は四則演算に剰余を加えて5種類あります。
加算と減算は入力桁に応じた桁数の論理を構成します
、乗算、除算、剰余は4桁と8桁の論理が用意されてい
ます。
 
非記憶型論理
【加算】
| 例譜 | LSIM.LBL | |
|
logicname sample
entity main
input a[5],b[5];
output q[5];
q = a + b ;
ende
entity sim
output a[5],b[5];
output q[5];
bitr tc[8];
part main(a,b,q)
tc=tc+1;
a.4=0;
b.4=0;
a.0:3=tc.0:3;
b.0:3=tc.4:7;
ende
|
q4
q3〜0[q.3-0]
b.3-0
a.3-0
PDF
|
|
【減算】
| 例譜 | LSIM.LBL | |
|
logicname sample
entity main
input a[5],b[5];
output q[5];
q = a - b ;
ende
entity sim
output a[5],b[5];
output q[5];
bitr tc[8];
part main(a,b,q)
tc=tc+1;
a.4=0;
b.4=0;
a.0:3=tc.0:3;
b.0:3=tc.4:7;
ende
|
q4
q3〜0[q.3-0]
b.3-0
a.3-0
PDF
|
|
【4×4=8桁 乗算】
| 例譜 | LSIM.LBL | |
|
logicname sample
entity main
input A[4],B[4];
output Q[8];
Q = A * B ;
ende
entity sim
output A[4],B[4];
output Q[8];
bitr tc[9];
part main(A,B,Q)
tc=tc+1;
A=tc.0:3;
B=tc.4:7;
ende
endlogic
|
Q.7-0
B.3-0
A.3-0
PDF
|
|
 
記憶型論理
演算子で記憶型の論理に展開されるものは次のものが
あります。
乗算
での説明は記憶型の演算子に共通します。
 
乗算
【8×8=16桁 乗算】
例譜 | LSIM.LBL |
logicname sample
entity main
input cp;
input A[8],B[8];
output Q[16];
output TP_eop;
bitn q[16];
bitn a[8],b[8];
a=A;
b=B;
if (cp)
q = a * b ;
endif
Q=q;
TP_eop=q.16;
ende
entity sim
output cp;
output A[8],B[8];
output Q[16];
output TP_eop;
bitr tc[20];
part main(cp,A,B,Q,TP_eop)
if (tc==0) tc=0xEA7B0; else tc=tc+1; endif
if (tc.0:3==0) cp=0; else cp=1; endif
A=tc.4:11;
B=tc.12:19;
ende
endlogic
|
Q15〜0[Q.15-0]
B.7-0
A.7-0
cp0
TP_eop0
PDF
|
-
8桁の乗算の演算子に割り当てられた論理は記憶型で
10クロックで演算を終了します。
-
左の cp のような演算開始のきっかけが必要になりま
す。
-
A と B が確定した後に1クロックだけ cp を 0 にす
れば 10 クロック後に結果を得られます。
-
演算の終了は q.16 が 0 から 1 になったときで結果
は cp が 0 になるまで保持されます。
-
input で割り当てた信号を本演算に使うと確定信号を
付けるようににコンパイラの警告が入るので、右のよ
うに一旦、内部の信号で受けてください。
 
除算
【4÷4=4桁 除算】
例譜 | LSIM.LBL |
logicname sample
entity main
input cp;
input A[4],B[4];
output Q[4];
output TP_eop;
bitn q[4];
bitn a[4],b[4];
a=A;
b=B;
if (cp)
q = a / b ;
endif
Q=q;
TP_eop=q.4;
ende
entity sim
output cp;
output A[4],B[4];
output Q[4];
output TP_eop;
bitr tc[20];
part main(cp,A,B,Q,TP_eop)
tc=tc+1;
if (tc.0:3==0) cp=0; else cp=1; endif
A=tc.4:7;
B=tc.8:11;
ende
endlogic
|
TP_eop0
Q.3-0
B.3-0
A.3-0
cp0
PDF
|
【8÷8=8桁 除算】
例譜 | LSIM.LBL |
logicname sample
entity main
input cp;
input A[8],B[8];
output Q[8];
output TP_eop;
bitn q[8];
bitn a[8],b[8];
a=A;
b=B;
if (cp)
q = a / b ;
endif
Q=q;
TP_eop=q.8;
ende
entity sim
output cp;
output A[8],B[8];
output Q[8];
output TP_eop;
bitr tc[20];
part main(cp,A,B,Q,TP_eop)
tc=tc+1;
if (tc.0:3==0) cp=0; else cp=1; endif
if (tc==0) tc=0x03F00; else tc=tc+1; endif
A=tc.4:11;
B=tc.12:19;
ende
endlogic
|
TP_eop0
Q.7-0
B.7-0
A.7-0
cp0
PDF
|
 
剰余
【4%4=4桁 剰余】
例譜 | LSIM.LBL |
logicname sample
entity main
input cp;
inputc A[4],B[4];
output Q[4];
output TP_eop;
bitn a[4],b[4],q[4];
a=A;
b=B;
if (cp)
q = a % b ;
endif
Q=q;
TP_eop=q.4;
ende
entity sim
output cp;
output A[4],B[4];
output Q[4];
output TP_eop;
bitr tc[20];
part main(cp,A,B,Q,TP_eop)
tc=tc+1;
if (tc.0:3==0) cp=0; else cp=1; endif
A=tc.4:7;
B=tc.8:11;
ende
endlogic
|
TP_eop0
Q.3-0
B.3-0
A.3-0
cp0
PDF
|
【8÷8=8桁 剰余】
例譜 | LSIM.LBL |
logicname sample
entity main
input cp;
inputc A[8],B[8];
output Q[8];
output TP_eop;
bitn a[8],b[8],q[8];
a=A;
b=B;
if (cp)
q = a % b ;
endif
Q=q;
TP_eop=q.8;
ende
entity sim
output cp;
output A[8],B[8];
output Q[8];
output TP_eop;
bitr tc[20];
part main(cp,A,B,Q,TP_eop)
tc=tc+1;
if (tc.0:3==0) cp=0; else cp=1; endif
if (tc==0) tc=0x03F00; else tc=tc+1; endif
A=tc.4:11;
B=tc.12:19;
ende
endlogic
|
TP_eop0
Q.7-0
B.7-0
A.7-0
cp0
PDF
|
記憶型の演算子の費やすクロック数は下表のとおりです。
演算子 |
桁数 |
クロック数 |
×
|
4 |
非記憶 |
8 |
10 |
÷
|
4 |
8 |
8 |
12 |
%
|
4 |
8 |
8 |
12 |
 
論理演算子
論理積、論理和、排他的論理和、論理否定の4種類が
あります。
これらを使ってブールの式だけで論理を組み立てる
こともできます。
コンパイラは最適化と論理圧縮を施すので論理的に
は同じでも書かれた式と違う式を展開することもあ
ります。
論理演算は1桁の演算で多桁の信号でも演算は桁ごと
に行っています。
input a[4];
input b[4];
output q[4];
のとき
q = a & b ;
と
q.0 = a.0 & b.0 ;
q.1 = a.1 & b.1 ;
q.2 = a.2 & b.2 ;
q.3 = a.3 & b.3 ;
は同じです。
 
比較演算子
演算子
の表に上げた6種類があります。
比較演算は1桁の演算です。
下に
>
の例で示しますが後の5種類も同じです。
【>】
例譜1 | LSIM.LBL | 例譜2 |
logicname sample
entity main
input a[4],b[4];
output q;
q = a > b;
ende
entity sim
output a[4],b[4];
output q;
bitr tc[8];
part main(a,b,q)
tc=tc+1;
a=tc.0:3;
b=tc.4:7;
ende
endlogic
|
q0
b.3-0
a.3-0
PDF
|
logicname sample
entity main
input a[4],b[4];
output q;
if (a > b)
q = 1;
endif
ende
entity sim
output a[4],b[4];
output q;
bitr tc[8];
part main(a,b,q)
tc=tc+1;
a=tc.0:3;
b=tc.4:7;
ende
endlogic
|
 
桁移動
演算子
の表に上げた 2 種類があります。
桁移動は 8 桁の対象値を 4 桁の移動値で対象値のず
らし位置を決めて、ずらした対象値の8桁を出力しま
す。
移動値は 0 から 7 の値を指定します、有効桁は 3
桁ですが信号の桁数は 4 桁で割り当ててください。
【>> と <<】
例譜1 | LSIM.LBL | 例譜2 |
logicname sample
entity main
input Y[8],A[4];
output Q[8];
Q = Y >> A ;
ende
entity sim
output Y[8],A[4];
output Q[8];
bitr tc[4];
part main(Y,A,Q)
tc=tc+1;
Y=1;
A.0:2=tc.0:2;
ende
endlogic
|
Q7
Q6
Q5
Q4
Q3
Q2
Q1
Q0
A.3-0
Y.7-0
>> PDF
<< PDF
|
logicname sample
entity main
input Y[8],A[4];
output Q[8];
Q = Y << A ;
ende
entity sim
output Y[8],A[4];
output Q[8];
bitr tc[4];
part main(Y,A,Q)
tc=tc+1;
Y=0x80;
A.0:2=tc.0:2;
ende
endlogic
|
 
記号
- = 代入記号
出力信号か内部信号に式を結びつけるときに使います。
- ( ) 括弧 1
信号列か式を囲むときに使います。
囲まれた式は優先して展開されます。
- [ ] 括弧 2
桁数が 2 以上ある信号の桁数の指定に使います。
- { } 注釈
注釈を囲みます。何重にでも囲むことができますので
、注釈を含んだ複数行を注釈にすることも可能です。
- 区切り
- .  小数点
信号名と桁指定を区切るために使います。
- ,  区切り点
信号と信号を区切ります。
- ;  文末
信号割り当てと式の終わりを示すのに使います。
【記号】
例譜 | LSIM.LBL |
logicname sample
entity main
input a[4];
output y;
y = !(a.0 & a.1) | (a.2 & !a.3);
ende
entity sim
output a[4];
output y;
bitr tc[4];
tc=tc+1;
part main(a,y)
a = tc.0:3;
ende
endlogic
|
y0
a3
a2
a1
a0
PDF
|
|