module calculator(state,U,V,X,X_1,multiplicant,multiplier,count);
input [1:0] state;
input [3:0] multiplicant,multiplier;
output reg [3:0] U,V,X;
output reg X_1;
output reg[2:0] count;
wire [7:0] ASR;
wire [4:0] CSR;
wire [3:0] sum, sub;
always @ (state or count)
begin
U<=4'b0;
V<=4'b0;
X<=multiplier;
X_1<=1'b0;
count<=3'b0;
if(state==2'b01)
begin
case({X[0],X_1})
2'b00:
begin
{U,V}<=ASR;
{X,X_1}<=CSR;
end
2'b11:
begin
{U,V}<=ASR;
{X,X_1}<=CSR;
end
2'b01:
begin
U<=sum;
{U,V}<=ASR;
{X,X_1}<=CSR;
end
2'b10:
begin
U<=sub;
{U,V}<=ASR;
{X,X_1}<=CSR;
end
endcase
count <= count +1;
end
end
rca U0_rca4(.a(multiplicant),.b(U),.ci(1'b0),.s(sum));
rca U1_rca4(.a(U),.b(~multiplicant),.ci(1'b1),.s(sub));
ASR8 U2_ASR8({U,V},1'b1,ASR);
CSR5 U3_CSR5({X,X_1},1'b1,CSR);
endmodule
이것은 내 코드이며 2'b01의 경우와 2'b10의 경우는 작동하지 않습니다. 사실, 시프 팅은 잘 작동하지만 'U'에 rca의 합이나 하위를 추가해도 작동하지 않습니다. 왜 그렇게됩니까? 설명이 필요해. 또는 코드를 더 잘 수정할 수 있습니까? 4 비트 * 4 비트 -> 8 비트 결과 배율을 만들어야합니다.Verilog 부스 알고리즘 더하기 및 빼기
어떤 변화가 작동합니까? 코드에 ** ** ** 교대가 없습니다. ** 거기에 '비 차단'과제를 사용하지 마세요 **. – Serge
@ Serge 실제로 ASR과 CSR은 이동을 의미합니다. ASR은 산술 Shift이고 CSR은 순환 쉬프트 –
ASR입니다. CSR은 단지 단순한 변수 일뿐입니다. 당신이 그 이름을 붙이더라도 그것들을 변화 시키거나 다른 어떤 것도 만들지 않습니다. 그럼, 그것이 작동한다는 것은 무엇을 의미합니까? – Serge