文法

hyousi.jpg(2670 byte) L.jpg(2692 byte) kihonwaku.jpg(2765 byte) singou.jpg(2527 byte) jyousuu.jpg(2586 byte) enzannsitokigou_m.jpg(3408 byte) jyoukenbun.jpg(2754 byte) tetsuduki.jpg(2732 byte) inyou.jpg(2526 byte)

        目次

 演算子と記号
 算術演算子
 非記憶型論理
 記憶型論理
 乗算
 除算
 剰余
 論理演算子
 比較演算子
 桁移動
 記号

 

演算子と記号

論理を作ることは条件付けだけでもできますが、常用 する論理を標準のライブラリ(蓄積庫)に置いて言語の 定義する演算子に割り当てておくと論理譜を作ること が容易になります。 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 ; としてくださ い。

modoru.jpg(1480 byte)  

算術演算子

算術演算は四則演算に剰余を加えて5種類あります。 加算と減算は入力桁に応じた桁数の論理を構成します 、乗算、除算、剰余は4桁と8桁の論理が用意されてい ます。

modoru.jpg(1480 byte)  

非記憶型論理
【加算】
例譜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
   


modoru.jpg(1480 byte)  

記憶型論理

演算子で記憶型の論理に展開されるものは次のものが あります。 乗算 での説明は記憶型の演算子に共通します。

modoru.jpg(1480 byte)  

乗算
【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 で割り当てた信号を本演算に使うと確定信号を 付けるようににコンパイラの警告が入るので、右のよ うに一旦、内部の信号で受けてください。


modoru.jpg(1480 byte)  

除算
【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

modoru.jpg(1480 byte)  

剰余
【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


modoru.jpg(1480 byte)  

論理演算子

論理積、論理和、排他的論理和、論理否定の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 ;
は同じです。
modoru.jpg(1480 byte)  

比較演算子

演算子 の表に上げた6種類があります。 比較演算は1桁の演算です。
下に > の例で示しますが後の5種類も同じです。

【>】
例譜1LSIM.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
modoru.jpg(1480 byte)  

桁移動

演算子 の表に上げた 2 種類があります。 桁移動は 8 桁の対象値を 4 桁の移動値で対象値のず らし位置を決めて、ずらした対象値の8桁を出力しま す。
移動値は 0 から 7 の値を指定します、有効桁は 3 桁ですが信号の桁数は 4 桁で割り当ててください。

【>> と <<】
例譜1LSIM.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
modoru.jpg(1480 byte)  

記号
  • = 代入記号
    出力信号か内部信号に式を結びつけるときに使います。
  • ( ) 括弧 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

modoru.jpg(1480 byte)