私はVerilogを学習しようとしていますが、forループを使用すると何が問題なのか分かりません。forループを使用してverilogで出力するxxxを取得する
実装しようとしているモジュールの例では、入力の最初のビットを設定しますが、出力の残りのビットは入力と出力の両方に基づいて設定されますが、 testbench-
`timescale 1ns/1ns
module example_module_tb;
reg[15:0] A;
reg[15:0] B;
wire [15:0] C;
example_module e(A,B,C);
initial begin
A = 16'd23;
B = 16'd32;
end
initial begin
$dumpfile("example_module_tb.vcd");
$dumpvars;
end
initial #400 $finish;
endmodule
Iはveriwellでこれを実行し、GTK波を使用すると、Iは出力線Cは16'bxxxxxxxxxxxxxxx0であることを得るため、および出力 -
の前ビットmodule example_module(A,B,C);
input [15:0] A;
input [15:0] B;
output [15:0] C;
reg[15:0] C;
integer i;
[email protected](A or B)begin
C[0] = A[0]&B[0];
for(i = 0;i<15;i=i+1)begin
C[i+1] = A[i+1]|(B[i+1]&C[i]) ;
end
end
endmodule
基本的に最初のビットはセットされていますが、他のビットはセットされていませんか?
誰かがこれを修正する方法を教えてください。
ありがとうございます!
EDIT:実際に使用している3つのファイルがありますが、CLA_logic_tb.vのxxxが表示されています。
GP_generator.v
module GP_generator(A,B,G,P);
input [15:0] A;
input [15:0] B;
output [15:0] G;
output [15:0] P;
reg [15:0] G;
reg [15:0] P;
integer i;
[email protected](A or B)
begin
for(i = 0; i<16; i= i +1)begin
G[i] = A[i]&B[i];
P[i] = A[i]^B[i];
end
end
endmodule
Cの最初のビットが設定されている
`timescale 1ns/1ns
module CLA_logic_tb;
reg[15:0] A;
reg[15:0] B;
wire [15:0] C;
CLA_logic c(A,B,C);
initial begin
A = 16'd23;
B = 16'd32;
end
initial begin
$dumpfile("CLA_logic_tb.vcd");
$dumpvars;
end
initial #400 $finish;
endmodule
CLA_logic.v
module CLA_logic(A,B,C);
input [15:0] A;
input [15:0] B;
output [15:0] C;
reg[15:0] C;
wire [15:0] G;
wire[15:0] P;
GP_generator g1(A,B,G,P);
integer i;
[email protected](A or B)begin
C[0] = A[0]&B[0];
for(i = 0;i<15;i=i+1)begin
C[i+1] = G[i]|(P[i]&C[i]) ;
end
end
endmodule
CLA_logic_tb.vが、残りギブXXX
VeriWell 2.8.7と他のすべてのシミュレータでhttps://www.edaplayground.comで罰金を科せます。 – Greg
ねえ!そうだね、そうだよ!しかし、私がそれを拡張しようとすると(私の編集された質問を参照してください)、私はまだ出力のためにxxxxを取得します。理由を知っていますか? –