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は動作しません。実際にはシフトはうまくいくが、rcaの和またはサブを「U」に加えることはうまくいかない。それはなぜ起こるのですか?私は説明が必要です。または、自分のコードをより良く変更できますか?私は4bit * 4bit - > 8bitの結果乗数を作る必要がありますVerilogブースアルゴリズムの加算と減算
どのシフトが動作しますか?あなたのコードに** **シフトはありません。そこに 'non-blocking'アサインメントを使ってはいけません**。 – Serge
@ Serge実際、ASRとCSRはシフトを意味します。 ASRは算術シフト、CSRは循環シフト –
ASRです。 CSRは単なるワイヤーであり、単純な変数です。どんな名前をつけても、それが変わることはありません。だから、それはどういう意味ですか? – Serge