아래 코드를 작성했습니다.Verilog 'for'-loop 반환 값
내 문제는 : 인덱스 1
에서
그것은 몇 가지 값으로 for 루프에 들어갑니다. 그것은 'if'문에 들어가며 모든 'if'의 마지막 명령을 'P = ....'와 같이 볼 수 있습니다. 인덱스 2에서는
(다음 단계)
그것은 '가'문에 입사하지만, P의 값을 1 단계에서 아니라, 초기 값이다.
다음 단계에서 'P'의 마지막 값을 어떻게 사용할 수 있습니까? 당신이 합성 Shift 키를 생성하고 곱셈 값이 9 클록 사이클 계산됩니다 승수 아키텍처를 추가하려고처럼 (인덱스 + 1)
module multiplier(prod, a, b, wireP, wireA, wireS);
output [15:0] prod;
output [16:0] wireA;
output [16:0] wireS;
output [16:0] wireP;
reg [15:0] prod;
input [7:0] a;
input [7:0] b;
reg [16:0] P;
reg [16:0] S;
reg [16:0] A;
wire [16:0] tempshift;
reg [16:0] tempoutshift;
arithmeticShift shiftP(tempshift,P);
wire [16:0] tempPS;
reg [16:0] tempoutPS;
carryForPbooth sumPS(coutPS,tempPS,P,S,0);
wire [16:0]tempPA;
reg [16:0]tempoutPA;
carryForPbooth sumPA(coutPA,tempPA,P,A,0);
reg [16:0] regP;
reg [16:0] regA;
reg [16:0] regS;
integer index;
always @(*) begin
A[16:9] = a[7:0];
A[8:0] = 9'b000000000;
S[16:9] = ~a[7:0]+1'b1;
S[8:0] = 9'b000000000;
P[16:9] = 8'b00000000;
P[8:1] = b[7:0];
P[0] = 1'b0;
#1 tempoutPS = tempPS;
#1 tempoutPA = tempPA;
#1 tempoutshift = tempshift;
for(index = 1; index < 9; index = index + 1) begin
if((P[1:0] == 2'b00) | (P[1:0] == 2'b11)) begin
#1 tempoutshift = tempshift;
#1 P = tempoutshift;
end
if(P[1:0] == 2'b01) begin
#1 tempoutPA = tempPA;
#1 P = tempoutPA;
#1 tempoutshift = tempshift;
#1 P = tempoutshift;
end
if(P[1:0] == 2'b10) begin
#1 tempoutPS = tempPS;
#1 P = tempoutPS;
#1 tempoutshift = tempshift;
#1 P = tempoutshift;
end
end
#1 prod=P[16:1];
end
assign wireP = P;
assign wireS = S;
assign wireA = A;
endmodule
사용자는 '입력을 [7 : 0],'와 '레지 [16 : 0]는,'전용 케이스에 의해 구별 변수를 갖는 것은 종종있다 나쁜 생각. 일부 시뮬레이터는 대소 문자를 구분하지 않습니다. – Morgan
이것은 Testbench 구성 요소 또는 RTL입니까? '# 1'은 합성 할 수 없습니다. – Morgan
이것이 교대조가되고 9 클록주기에 곱셈이 추가됩니까? – Morgan