Я использую ModelSim для имитации умножения киосков. У меня есть этот код, но это правда, когда b = 5
, и когда я даю другие номера для b
, результат выглядит следующим образом: = 65563.
Я пробовал как подписанный, так и неподписанный, но результат ложный. Я просто смущен, где проблема.Модифицированный алгоритм умножения кабины
module multiply(p,a,b,clock);
output [15:0] p;
input [7:0] a,b;
input clock;
reg [15:0] p,ans;
integer i;
integer operate;
initial
begin
p=16'b0;
ans=16'b0;
end
always @(negedge clock)
begin
p=16'b0;
for(i=1;i<=7;i=i+2)
begin
if(i==1)
operate=b[0]-b[1]-b[1];
else
operate=b[i-1]-b[i-2]-b[i]-b[i];
case(operate)
1:
begin
ans=a;
ans=ans<<(i-1);
p=p+ans;
end
2:
begin
ans=a<<1;
ans=ans<<(i-1);
p=p+ans;
end
-1:
begin
ans=~a+1;
ans=ans<<(i-1);
p=p+ans;
end
-2:
begin
ans=a<<1;
ans=~ans+1;
ans=ans<<(i-1);
p=p+ans;
end
endcase
end
end
endmodule
блоков кода отформатирован – Delimitry