質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Verilog

Verilogは、デジタル回路設計用の論理シミュレータ。また、ハードウェアの電子回路設計の際に用いるハードウェア記述言語を指すこともあります。両者を見分けるために、言語を「Verilog-HDL」と呼ぶ場合もあります。

VHDL

VHDLは、デジタル回路設計用のハードウェア記述言語の一つ。明確な回路を加味せず、動作のみを書くだけでハードウェアの動作を定義することが可能。ソフトウェアのプログラミングと同じような設計ができます。

Q&A

解決済

1回答

687閲覧

Verilogでの機能ライブラリを使用した命令ができません。

Yoshioka19082

総合スコア4

Verilog

Verilogは、デジタル回路設計用の論理シミュレータ。また、ハードウェアの電子回路設計の際に用いるハードウェア記述言語を指すこともあります。両者を見分けるために、言語を「Verilog-HDL」と呼ぶ場合もあります。

VHDL

VHDLは、デジタル回路設計用のハードウェア記述言語の一つ。明確な回路を加味せず、動作のみを書くだけでハードウェアの動作を定義することが可能。ソフトウェアのプログラミングと同じような設計ができます。

0グッド

0クリップ

投稿2022/12/19 08:53

今ALUの内部に新しい命令を追加して、その命令の内部の処理は機能ライブラリを使用して別のファイルで行いたいと思います。入力されたkey,plaintextをそれぞれ足してその結果をoutに返したいです。ops, opcodes.vhは動作確認済みです。Compile Errorをしたら以下のように出ます。

Error (10170): Verilog HDL syntax error at cal.v(19) near text: "+"; expecting ";".

cal.v

1`default_nettype none 2module cal( 3wire [31 : 0] key_32, 4wire [31 : 0] plaintext_32 5); 6alu cal_1( 7 .in1(key_32), 8 .in2(plaintext_32) 9); 10always @* 11begin : cal_en 12 key_32 + plaintext_32 + key_32; 13end 14endmodule

alu.v

1`include "alu_ops.vh" 2`include "rv32_opcodes.vh" 3`include "cal.v" 4 5`default_nettype none 6 7module alu( 8 input wire [`ALU_OP_WIDTH-1:0] op, //4 bit extend 5 bit 9 input wire [`XPR_LEN-1:0] in1, 10 input wire [`XPR_LEN-1:0] in2, 11 output reg [`XPR_LEN-1:0] out 12 ); 13 always @(*) begin 14 case (op) 15 `ALU_OP_ADD : out = in1 + in2; 16 `ALU_OP_XOR : out = in1 ^ in2; 17 `ALU_OP_OR : out = in1 | in2; 18 `ALU_OP_AND : out = in1 & in2; 19 //cal add 20 `ALU_OP_cal : out = cal(in1,in2); 21 22 default : out = 0; 23 endcase // case op 24 end 25endmodule // alu 26`default_nettype wire

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ozwk

2022/12/20 04:32 編集

key_32 + plaintext_32 + key_32; この行は何をしようとしていますか?
guest

回答1

0

ベストアンサー

入力されたkey,plaintextをそれぞれ足してその結果をoutに返したいです。

であれば、こうです。

verilog

1module cal( 2input wire [31 : 0] key_32, 3input wire [31 : 0] plaintext_32, 4output wire [31:0] out 5); 6 7assign out = key_32 + plaintext_32; 8 9endmodule

投稿2022/12/20 04:34

ozwk

総合スコア13521

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Yoshioka19082

2022/12/20 05:03

cal.vを上のようにしてコンパイルしたら、エラーが出ます。"Error (10228): Verilog HDL error at cal.v(3): module "cal" cannot be declared more than once "
ozwk

2022/12/20 05:17

alu.vの`include cal.vを消してみてください
ozwk

2022/12/20 05:37

ちなみに `ALU_OP_cal : out = cal(in1,in2); も間違っています。 一度文法を再学習してください。
Yoshioka19082

2022/12/20 05:53

alu.vの中身に以下のコードを追加しました。calを呼び出すときは代わりに何をコードに入れればいいですか? " wire [31 : 0] key_32; wire [31 : 0] plaintext_32; wire [31 : 0] cal_out; cal cal_1( .in1(key_32), .in2(plaintext_32), .out(cal_out) ); "
ozwk

2022/12/20 06:11 編集

下手にプログラミングの経験があると間違えるのですが、 verilogは回路を記述するための言語であって手順を書く言語ではありません。(※) したがって、「呼び出す」という捉え方からしてあまり正しくありません。 モジュール(のインスタンス)を実体化して配線をします。 今回であればcal_1でモジュールを実体化しているので、あとはkey_32だとか各信号を適切に接続するだけです。 ※ 回路シミュレーションのための手順は書くことはできる
Yoshioka19082

2022/12/20 08:34

そのkey_32などの接続の部分のコードを教えてほしいです。
ozwk

2022/12/20 08:37

out = cal_out とか assign key_32 =in1 とか
ozwk

2022/12/20 09:09

申し訳ないですが一から十まで教えるのは大変なので verilog サブモジュール などと検索して出てきた例を参考にがんばってください
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問