假設我有一個小的矢量:Verilog中是否存在自動矢量寬度強制?
wire [15:0] a;
,我將其分配到一個較大的載體:
reg [31:0] b;
always @(posedge clk) begin
b <= a;
end
會是什麼結果呢? b
會在其高位字中分配零,還是高位部分保持不變?還有別的嗎?
我試過尋找其他來源的答案,但是我發現所有的例子在左邊的匹配寬度都是賦值的右邊的操作數。
假設我有一個小的矢量:Verilog中是否存在自動矢量寬度強制?
wire [15:0] a;
,我將其分配到一個較大的載體:
reg [31:0] b;
always @(posedge clk) begin
b <= a;
end
會是什麼結果呢? b
會在其高位字中分配零,還是高位部分保持不變?還有別的嗎?
我試過尋找其他來源的答案,但是我發現所有的例子在左邊的匹配寬度都是賦值的右邊的操作數。
Verilog在這種情況下的行爲已被很好地定義。隨着你的榜樣,因爲默認值是簽名,你會得到這種行爲:
如果a
左手位(15位)是1'b0
或1'b1
然後a
將擴展到32個位寬通過零填充。即b
的位31至16將是1'b0
。
如果a
左手位(位15)是1'bx
或1'bz
然後a
將通過複製該值被擴展到32個位寬。即b
的位31至16將是1'bx
,如果位15是1'bz
或1'bz
,如果位15是1'bx
。
如果a
是簽署,也就是說,如果a
被聲明如下:
wire signed [15:0] a;
然後
時左手位是1'bx
或1'bz
將是行爲就像它是無符號一樣 - 該值只是複製。
當左手位是1'b0
或1'b1
該左手位是符號擴展,即再次證明左手位的值只是複製。此行爲不是取決於b
是有符號還是無符號,只有取決於a
是有符號還是無符號。
結果將在高位中指定零。合成也是可能的。
module larger(input [7:0]a, output [15:0] b);
assign b = a;
endmodule
檢查你的自我這個代碼。
如果任何reg有符號或無符號,它是否會在硬件中產生差異? –
不,我不這麼認爲。 –