Hier ist, wie Ihr Simulator entscheidet über Bitwdith für Zwischenergebnisse.
Verilog Simulation
Dieser Ausdruck - assign y = xi*xi + xq*xq;
- ist ein Beispiel für einen Kontext bestimmt Ausdruck. Ein Verilog-Simulator nimmt das breiteste aller Netze oder Variablen im Ausdruck und verwendet diesen. Also, in Ihrem Code ist die breiteste y
mit 22 Bit Breite, so wird Verilog 22 Bits durchgängig verwenden.
VHDL Simulation
Das Verhalten eines VHDL-Simulator abhängig von der verwendeten Verpackung. Wenn Sie das numeric_std
Paket verwenden, wie empfohlen wird, dann müssen Sie die folgenden Regeln befolgen:
Die Breite der Summe soll das gleiches wie die breiteren der beiden Operanden sein. Die Breite des Produkts sollte die Summe der Breiten der Operanden sein.
Daher würde der Code, wenn sie direkt in VHDL übersetzt kompilieren:
library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.numeric_std.all;
entity power is
port (xi, xq : in signed(11-1 downto 0);
y : out signed(22-1 downto 0));
end entity power;
architecture A of power is
begin
y <= xi*xi + xq*xq;
end architecture A;
Sollte nicht alles unterschrieben werden?
die Namen Ihres Moduls Given (power
) und Eingänge (xi
und xq
) und Systeme Funk Gestaltung 25 Jahre verbracht haben, sollten sie signed
sein nicht? Sollte nicht Ihre Verilog sein:
module power(input signed [11-1:0] xi,xq,output signed [22-1:0] y);
assign y = xi*xi + xq*xq;
endmodule
Deshalb habe ich die signed
Typ von numeric_std
gewählt haben, nicht die unsigned
Typ.
Synthese
Nun, ich habe über Simulatoren waffled auf, aber man fragte nach Synthese. Und, um ehrlich zu sein, ich weiß nicht, was ein Synthesizer tun würde. Da es jedoch die Aufgabe eines Synthesizers ist, eine Logikschaltung zu entwerfen, die sich genau wie die Simulation verhält, würde man meinen, dass jeder Synthesizer, der etwas auf sich hält, die gleichen Bitbreiten wie der Simulator verwendet. Also, ich bin mir ziemlich sicher, dass das deine Antwort ist.
Bitte entfernen Sie das VHDL-Tag. – JHBonarius
Ich denke, es ist das gleiche Problem für jede HDL-Sprache – Mortada
Matthew Taylors Antwort zeigt, dass das Problem für beide HDLs nicht identisch ist. – user1155120