2017-11-03 4 views
2

なぜ-3'sb111が - ( - 1)?の代わりに9に合成されたのですか?あなたの式においてVerilogなぜsign_out [3:0] <= -3'sb111 * sign_in [3:0] 9 * sign_in [3:0]へのRHS合成?

module top(in, clk, rst, out); 

input [34:0] in; 
output [35-1:0] out; 
input clk, rst; 

reg signed [35-1:0] out; 

always @(posedge clk or negedge rst) 
begin 
    if (!rst) 
    out[3:0] <= 0; 
    else 
    out[3:0] <= -3'sb111*in[3:0]; // 4'b1001 
end 
always @(posedge clk or negedge rst) 
begin 
    if (!rst) 
    out[7:4] <= 0; 
    else 
    out[7:4] <= -3'b111*in[3:0]; 
end 
always @(posedge clk or negedge rst) 
begin 
    if (!rst) 
    out[11:8] <= 0; 
    else 
    out[11:8] <= -3'b011*in[3:0]; 
end 
always @(posedge clk or negedge rst) 
begin 
    if (!rst) 
    out[15:12] <= 0; 
    else 
    out[15:12] <= -3'sb011*in[3:0]; 
end 
always @(posedge clk or negedge rst) 
begin 
    if (!rst) 
    out[19:16] <= 0; 
    else 
    out[19:16] <= -3'sd1*in[3:1]; 
end 
always @(posedge clk or negedge rst) 
begin 
    if (!rst) 
    out[34:20] <= 0; 
    else 
    out[34:20] <= 0; 
end 

endmodule 
+0

これらの数値をコードに含めるには、-3'sb111、-3'sb011、-3'sd1のどれかを教えてください。 – vipin

+0

@vipin数字を説明してください-3'sb111 – hailinzeng

+0

-3'sb111は-1 *(符号付き2進数「111」)= -1 * -1 = 1を意味します。 – vipin

答えて

2

はRHSは=オペランド*符号なしのオペランドに署名した署名しました。

したがって、少なくとも1つの符号なし数が関係するため、LHSは符号なし乗算になります。

今、私たちは(LSBだけ私たちは9を取得する4ビットを取って)、= 1101001

-3'sb111 = -1 * 3'sb111 = 1111 * 111を書き込むことができます。我々が持っているあなたのコード内の式において

4ビットRHS =は、オペランド* 4ビットの符号なしのオペランドに署名しました。

したがって、符号付きの符号付きオペランドのサイズは4ビットになります。 そのため、-1を乗算するのに1111を使用しています。結果は4ビットよりはるかに大きいので、lsbの4ビットのみを取ります。同様

-3'sb110 * 4'b0001 = 1010

-3'sb101 * 4'b0001 = 1011

-3'sb011 * 4'b0001 = 1101

これが意味をなされることを願っています。

関連する問題