• ベストアンサー

PPMについて

 加算器についての勉強をしているのですが、「FA」は「FullAdder」の略ということは分かるのですが、「PPM」がいったい何の略として使われているのか分かりません。  ちなみに「PPM」の論理式としてa+b-cin=2cout-outと記載されていました。自分で調べたのですが分からなくて困っています。

質問者が選んだベストアンサー

  • ベストアンサー
  • ADEMU
  • ベストアンサー率31% (726/2280)
回答No.1

The cell implementing the see quations is called PPM(PlusPlusMinus). とあるので PLUS PLUS MINUSの略みたいです。

関連するQ&A

  • verilog初心者です 符号拡張について教えください

    また似たような質問で申しわけないです。(T T;) 入力16ビット、出力を32ビット(←乗算器にもつなぐ入力の為)全加算器verilog記述についての質問です ****************************************************************//fulladder_16.v `timescale 1ns/10ps module fulladder_16(a,b,q); input [15:0] a,b; output [32:0] q; wire [15:0] cin; //module fulladd.v instance fulladd add0(.a(a[0]),.b(b[0]),.cin(1'b0),.q(q[0]),.cout(cin[0])); fulladd add1(.a(a[1]),.b(b[1]),.cin(cin[0]),.q(q[1]),.cout(cin[1])); fulladd add2(.a(a[2]),.b(b[2]),.cin(cin[1]),.q(q[2]),.cout(cin[2])); : : fulladd add14(.a(a[14]),.b(b[14]),.cin(cin[13]),.q(q[14]),.cout(cin[14])); fulladd add15(.a(a[15]),.b(b[15]),.cin(cin[14]),.q(q[15]),.cout(cin[15])); /*fulladd add0(.a(a[0]),.b(b[0]),.cin(1'b0),.q(q[0]),.cout(cin[0])); fulladd add1[15:1](.a(a[15:1]),.b(b[15:1]),.cin(cin[14:0]),.q(q[15:1]),.cout(cin[15:1]));*/ assing q = {{17{q[15]}},q}; endmodule /*ここでqの17~33bit目までを、上の記述のqの最上位ビットで拡張したくてこのように記述したのですが、この記述ではうまくいきません。 q =(算出された16ビットの最上位ビット × 17)と(算出された16ビット)  で33ビットにしたいわけです。どのように記述したらいいでしょうか?教えてください!!m(_ _)m ちなみにインスタンスしたのはしたの全加算器です //fulladder `timescale 1ns/10ps module fulladd(a,b,cin,q,cout); input a,b,cin; output q,cout; assign q = a^b^cin; assign cout = (a & b)|(b & cin)|(cin & a); endmodule

  • verilog 符号付加減算(最上位符号拡張)について教えてください

    何度も申し訳ないです。 質問させてください 2の補数形式の加減算 q = a + b において、a[15:0] b[15:0]であるとすると q はオーバーフローを考えてq= [16:0] となります。 そしてaとbの最上位ビットが符号となるためa[15]とb[15]の組合せを場合わけして  q[16]の最上位bitに出力する必要があるのではないかと考えています。 なので、以下のように記述したのですが…うまくいっていません。 ********************************************* module fulladder_16(a,b,q); input [15:0] a,b; output [16:0] q; wire [15:0] cin,out_q; reg s; //フルアダーモジュールをインスタンス fulladd add0(.a(a[0]),.b(b[0]),.cin(1'b0),.q(out_q[0]),.cout(cin[0])); fulladd add1[15:1](.a(a[15:1]),.b(b[15:1]),.cin(cin[14:0]),.q(out_q[15:1]),.cout(cin[15:1])); //aとbの最上位ビットの組合せを分けて、sに代入 always@(a[15] or b[15] or cin[15]) begin if(a[15] == 1) if(b[15] == 1) s = 1; else if(b[15] == 0) if(cin[15] == 1) s = 0; else s = 1; else if(a[15] == 0) if(b[15] == 1) if(cin[15] == 1) s = 0; else s = 1; else if(b[15] == 0) s = 0; end //最後に出力 q をbit拡張 assign q = {s,out_q}; endmodule //fulladder module fulladd(a,b,cin,q,cout); input a,b,cin; output q,cout; assign q = a^b^cin; assign cout = (a & b)|(b & cin)|(cin & a); endmodule ************************************************ これでシミュレーションを行ったところ     a = 0000000000000000 b = 0000000000000000 q = xxxxxxxxxxxxxxxxx0000000000000000 a = 0001000100010001 b = 0011010100100100 q = xxxxxxxxxxxxxxxxx0100011000110101 a = 0010001000100010 b = 0101111010000001 q = xxxxxxxxxxxxxxxxx1000000010100011 a = 0011001100110011 b = 1101011000001001 q = xxxxxxxxxxxxxxxxx0000100100111100 a = 0100010001000100 b = 0101011001100011 q = xxxxxxxxxxxxxxxxx1001101010100111 a = 0101010101010101 b = 0111101100001101 q = xxxxxxxxxxxxxxxxx1101000001100010 a = 0110011001100110 b = 1001100110001101 q = xxxxxxxxxxxxxxxxx1111111111110011 a = 0111011101110111 b = 1000010001100101 q = xxxxxxxxxxxxxxxxx1111101111011100 a = 1000100010001000 b = 0101001000010010 q = 111111111111111111101101010011010 a = 1001100110011001 b = 1110001100000001 q = 111111111111111110111110010011010  a = 1010101010101010 b = 1100110100001101 q = 111111111111111110111011110110111 となりうまく最上位ビットが出力してくれませんでした。 どなたか教えてください…(TT)

  • VC++でプログラムの勉強をしています。

    プログラムは最近はじめたばかりです。While文とif文を使ってクイズを作ってみたところ、一個目のsinで入力を求めているところから無限ループになってしまいました。色々調べてcin.cler()とsin.ignore()を入れたりもしてみましたが上手くいきませんでした。どこを間違えているのでしょうか? //クイズ #include <iostream> using namespace std; int main()//cin.clear();cin.ignore();???? { int a; int b; while(1) { cout<<"ネコ型のロボットが出てくるアニメといえば?"<<endl; cout<<"A)ドラえもん B)ドラエもん C)ほりえもん D)サザエさん"<<endl; cin>>a; if(a=='A') { cout<<"ファイナルアンサー?"<<endl; cout<<"Y)Yes N)NO"<<endl; cin>>b; if(b=='Y'){break;} if(b=='N'){cout<<"ゆっくり考えてね!!"<<endl;} if(b!='Y'||'N'){cout<<"正しく入力してね!"<<endl;} } if(a=='B'||'C'||'D') { cout<<"ファイナルアンサー?"<<endl; cout<<"Y)Yes N)NO"<<endl; cin>>b; if(b=='Y'){cout<<"残念!!"<<endl;} if(b=='N'){cout<<"ゆっくり考えてね!!"<<endl;} } if(a!='A'||'B'||'C'||'D'){cout<<"正しく入力してね!"<<endl;} } cout<<"正解!!"<<endl; }

  • javaプログラミング

    以下のプログラムがコンバイルできません なぜでしょうか? #include<iostream> #include<cmath> using namespace std; int main() { double a, b; cout << "実数 a の値を入力してください " << endl; cin >> a; cout << "実数 b の値を入力してください " << endl; cin >> b; cout << a << " の " << b << " 乗は " << pow(a, b) << "です" << endl; return 0; }

    • ベストアンサー
    • Java
  • C++で二次方程式のプログラム

    大分前に二次方程式のプログラムを作るって問題が出ていました。 しかし、セットで作ったプログラムのフローチャートを書くんですがフローチャートが分かりません。 条件は 虚数解 a=0 実数解 の場合分けをして、解を出すってプログラムなんですが、多分、それ自体は合っていると思います。 しかし、そのフローチャートを書きなさいって問題があったんですが、それが未だに分からないんですが、これをフローチャートに書くとすると、どう書けばいいですか? #include <iostream> #include <cmath> using namespace std; int main() { double a,b,c,d,x0,x1; cout << "aを入力してください\n"; cin >> a; cout << "bを入力してください\n"; cin >> b; cout << "cを入力してください\n"; cin >> c; d=b*b-4*a*c; x0 = (-b + sqrt(d)) / (2 * a); x1 = (-b - sqrt(d)) / (2 * a); if(a==0) { cout << "解は1つで" << -c/b << "です\n"; } else if(d>0) { cout << "解は二つの実数解で,解は" << x0 << "," << x1 << "です\n"; } else { cout << "解は二つの虚数解で,解は" << (-b) / (2 * a) << "+i" << sqrt(-d) / (2 * a) << " , " << (-b) / (2 * a) << "-i" << sqrt(-d) / (2 * a) << "です\n"; } return 0; }

  • 論理演算について質問

    何度もすみません。 また質問します。これで最後にしたい、、 質問1:&&や||等の論理演算子は、その両側にある2つの“boolean型の式(関係式等)”に対して論理演算を行う。 評価は、両側の式に対して並列に行うのではなく、1つづつ行って行く。 因みに、||は「論理式」を論理演算するこどができる。例えば、 int a=1,b=0,c=0のとき a==1 && b==3 || a==1 && b==0 の論理式があったとします。 この論理式の||は、即に演算されたa==1 && b==3とa==1 && b==0の論理式を演算の対象としている。 質問2:「評価」と「論理演算」って意味は同じですか?違いますか?違うならその違いは? 質問3:a==1 && b==0 || (a==1 && b==0)の論理式は、先に(a==1 && b==0)の論理式を論理演算すると思ってました。でも、以前そのような仮説をもって質問したら、回答者の方に実際違うと指摘されました。何故ですか?だって()の中の論理式なんだから、優先的に演算されるはず。

    • ベストアンサー
    • Java
  • C++の二次方程式のプログラム

    #include <iostream> #include <cmath> using namespace std; int main() { double a,b,c; cin >> a >> b >> c; if(a==0) { cout << (-c/b) << '\n'; } else if((b*b-4*a*c)<0) { cout << (-b/2/a) << 'i' << sqrt(4*a*c-b*b)/2/a << '\n'; } else { cout << (-b/2/a) << sqrt(4*a*c+b*b)/2/a << '\n'; } return 0; } 最後のelseの下のcoutが本当に分からないんで教えてくださいお願いします。一応この条件(a=0の時、aが0以上の時、aが0以下の時)で出題されてるんですが…

  • 配列のプログラムですが

    #include <iostream> using namespace std; int main() { int a[100],b=-9999; int i=0,j; do { cout << "整数値を入力してください\n"; cin >> a[i]; b += a[i]; i++; }while( a[i-1] != 9999); cout << b << '\n'; for(j=0;j<i-1;j=j+1) cout << a[j] * 3 << '\n'; return 0; } このプログラムってどんな計算をしてるんですか?誰か分かる人いますか 整数値を入れてくださいって出るだけなんですが

  • 配列を使った入力

    配列を使った入力 下記プログラムで sample9.4.cpp: function 内の `int main()': sample9.4.cpp:18: no match for `std::istream& << int&' operator というエラーがでてしまいます。 たぶん test[b][a] = c; という部分が悪いと思うのですが、 なぜ悪いのか分かりません。 配列の使い方が間違っているのでしょうか。 どなたか教えて頂けると嬉しいです。 ーー #include <iostream> using namespace std; int main() { int a,b,c,sub,num; cout << "Please input the number of subjects\n"; cin >> sub; cout << "Please input the number of people\n"; cin >> num; int test[b][a]; for(int b=0; b<sub; b++){ for(int a=0; a<num; a++){ cout << "Please input the point of the " << a+1 << "th people of the " << b+1 << "th subject\n"; cin << c; test[b][a] = c; } } for(b=0; b<sub; b++){ for(int a=0; a<num; a++){ cout << "The point of the " << a+1 << "th people of the " << b+1 << "th subject is " << test[a][b] << '\n'; } } return 0; }

  • C++の二次方程式のプログラム

    二次方程式の解を求めるプログラムで虚数解の場合、a=0の場合、実数解の場合で求めるようにしているんですが、 #include <iostream> #include <cmath> using namespace std; int main() { double a,b,c; cin >> a >> b >> c; if(a==0) { cout << (-c/b) << '\n'; } else if((b*b-4*a*c)<0) { cout << (-b/2/a) << 'i' << sqrt(4*a*c-b*b)/2/a << '\n'; } else { 次にcout が来るのは分かってるんですが、数学でこういう書き方しなし、ここから先の書き方が分からないんですが、どうやって書けばいいですか? 多分return 0; } のぞいてあと2行か1行だと思うんですが