2
私はVerilogで再帰を適用することになっていました。私が設計したコードはエラーを表示しません。タスク(splitt00)が再帰的に呼び出される私のコードを見てください。 Verilogは再帰をサポートしていますか?どのように再帰的ロジックを実装できますか?再帰はどのようにVerilogで動作しますか?
task split00;
input [0:n-1] a;
input [0:n-1] b;
input [0:n-1] num0;
output [0:2*n-1] s;
reg [0:n-1] a0,b0,u0,v0,w0,s0,s1,a1,b1,a2,b2,u1,w1,v1;
reg [0:n-1] num00;
begin
num00=num0;
if(num00==2)
begin
u0=(a/10)*(b/10);
w0=(a%10)*(b%10);
if (((a%10-a/10)*(b%10-b/10))<0)
begin
v0=((a%10-a/10)*(b%10-b/10))*-1;
s=u0*100+(u0+w0+v0)*10+w0;
end
else
begin
v0=((a%10-a/10)*(b%10-b/10));
s=u0*100+(u0+w0-v0)*10+w0;
end
end
else
begin
a0=a/(10**(num00/2));
b0=a%(10**(num00/2));
a1=b/(10**(num00/2));
b1=b%(10**(num00/2));
split00(a0,a1,num00/2,u1);
split00(b0,b1,num00/2,w1);
if((a1-a0)<0 && (b1-b0)>0)
begin
a2=a0-a1;
b2=b1-b0;
split00(a2,b2,num00/2,v1);
s=u1*(10**num0)+(u1+v1+w1)*(10**(num0/2))+w1;
end
else if((a1-a0)>0 && (b1-b0)<0)
begin
a2=a1-a0;
b2=b0-b1;
split00(a2,b2,num00/2,v1);
s=u1*(10**num0)+(u1+v1+w1)*(10**(num0/2))+w1;
end
else if((a1-a0)<0 && (b1-b0)<0)
begin
a2=a0-a1;
b2=b0-b1;
split00(a2,b2,num00/2,v1);
s=u1*(10**num0)+(u1-v1+w1)*(10**(num0/2))+w1;
end
else
begin
a2=a1-a0;
b2=b1-b0;
split00(a2,b2,num00/2,v1);
s=u1*(10**num0)+(u1-v1+w1)*(10**(num0/2))+w1;
end
end
end
endtask
質問の元のタイトルはあなたの投稿の本文とは別の質問です。 generateを使用してこのロジックを合成する必要がある場合は、それが別の質問です。 –
ありがとうございました。 –