- ベストアンサー
こんにちは!verilogHDLについての質問をお願いします。
こんにちは!verilogHDLについての質問をお願いします。 私は現在、verilogHDLの勉強をしているのですが以下の記述が理解できません。 input[31:0] A; reg[3:0] B; assign B[0] = ^(A[7:0]); assign B[1] = ^(A[15:8]); assign B[2] = ^(A[23:16]); assign B[3] = ^(A[31:24]); "^"が排他的論理和ということは分るのですが右辺がどの様に評価され左辺になにが代入されるか見当がつきません。 ”A = 32'hFF00FF00”だった場合どの様になるのか具体的に解説して頂ければ幸いです。 宜しくお願いします。
- FatHound
- お礼率66% (6/9)
- その他(プログラミング・開発)
- 回答数1
- ありがとう数1
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
Verilog独特の記述スタイルである「リダクション演算」を行っています. ビット幅をもった信号内の全てのビットに対して演算子が作用して結果は1ビットとなります. ^(A[7:0]) は「 A[7] ^ A[6] ^ A[5] ^ A[4] ^ A[3] ^ A[2] ^ A[1] ^ A[0] 」と等価です. 可読性を考慮するならば積極的にリダクション演算を利用した方が記述が楽ちんですね. 結果として質問に記述されているサンプルは 32ビット幅のバスのデータについて, バイトレーン単位の偶数パリティ値をB[3:0]にそれぞれ取得しています. assing A = 32'hFF00_FF00 とした場合, B[3:0]には 4'b0000 が格納されます.
関連するQ&A
- ドモルガン 論理回路の等価回路
ドモルガンの定理 ¬(A+B)=¬A・¬B この論理式の左辺の論理回路と右辺の論理回路を それぞれ作成し、さらに、その2つの回路が等しければLEDが点灯し 等しくなければLEDが消灯する回路を作成したいのです。 左辺、右辺の論理回路は簡単に書けるんですが2つの回路が 等価であるかどうかを調べる回路はどう書けばいいのかわかりません。 どうかお願いします。
- ベストアンサー
- その他(学問・教育)
- (論理咳,論理和,排他的論理和)基本情報処理の問題
今基本情報処理の勉強をしているのですが、 論理咳,論理和,排他的論理和の問題で、いまいちわからない部分がありますので教えてください。 【問題】 ビット数が等しい任意のビット列aとbに対して、等式=bと同じことを表すものはどれか。 ここで、AND,OR,XORはそれぞれ,ビットごとの論理咳,論理和,排他的論理和を表す。 ア a AND b = 00…0 イ a OR b = 11…1 ウ a XOR b = 00…0 エ a XOR b = 11…1 解答 「ウ a XOR b = 00…0」 となっているのですが この質問に出ている 「00…0」 or 「11…1」は何を表しているのでしょうか? 「00…0」 = 全てのビットが0になる 「11…1」 = 全てのビットが1になる という意味を指しているのでしょうか?
- ベストアンサー
- その他(学問・教育)
- 不等式の証明について
コーシー・シュワルツの不等式の特別な場合についての問題です。 (3)の代入後の式整理についてご教示いただければと思います。 解答によると、(3)で(2)の結果の不等式を使い、d=a+b+c/3とおいて代入したときの右辺が a^2+b^2+c^2/3 になるようなのですが、導かれるまでの過程がわかりません。 そのまま代入して計算しますと a^2+b^2+c^2+(a+b+c/3)^2/4 =1/4(9a^2+9b^9c^2+a^+b^2+c^2+2(ab+bc+ca)/9) =1/4(10(a^2+b^2+c^2)+2(ab+bc+ca)/9) となって行き詰まってしまいます。 左辺は代入して整理しすぐ(a+b+c/3)^2と変形できたのですが右辺がわかりません。 ご教示よろしくお願いいたします。
- 締切済み
- 数学・算数
- ディジタル回路について
ディジタル回路の排他的論理和に ついて質問です。 A⊕B =A(―)B+AB(―) =(A+B)(A(―)+B(―)) このような計算になる理由を教えてください。なお、A(―)、B(―)はその文字の上にバーがあることを示しています。
- 締切済み
- 電気・電子工学
- verilog HDLについての質問
verilogで以下のようなコードだと、エラーが起こります。 何故起こるのか、対処法はどのようにすればよいか教えてください。 //-----ソースコード---------------------------- modele Test(CLK1,CLK2,PG1); input CLK1; input CLK2; output PG1; reg dmy; always @(posedge CLK) begin dmy = 1; end always @(posedge CS) begin dmy = 0; end assign PG1 = dmy; //-----エラー内容------------------------------- Only one always block may assign a given variable dmy //-----以上---------------------------------------- regは複数のalwaysで変化させることはできませんということでしょうが、なぜでしょうか。
- 締切済み
- その他(プログラミング・開発)
お礼
なるほど!とても便利な記述方法ですね。 親切、丁寧な解説をありがとうございました。 非常に助かりました!!