Hallo, ich habe ein Problem und zwar möchhte ich eine Addition
durchführen, in der ein Summand unsigned und der andere signed ist.
Auf dieser Seite hab ich unter Rechnen in VHDL folgendes gefunden
>signal x: unsigned(7 downto 0); -- Zahlenbereich: 0 bis 2**8-1>signal y: signed(7 downto 0); -- Zahlenbereich: -2**7 bis 2**7-1>...>x <= x + 1;>y <= x + y;
Wenn ich dies Implementiere kommt immer der Fehler "Found 0 definitions
for operator "+"...
Wenn ich beide Summanden und die Summe signed ODER unsigned mache,
funktioniert es.
Ich wurde aber gerne rechnen: signed = unsigned + signed, wie oben ja zu
sehen ist und funktionieren sollte.
Was mache ich falsch? Hier mal mein Codebeispiel
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
--use IEEE.STD_LOGIC_ARITH.ALL;
--use IEEE.STD_LOGIC_UNSIGNED.ALL;
use ieee.numeric_std.all;
---- Uncomment the following library declaration if instantiating
---- any Xilinx primitives in this code.
--library UNISIM;
--use UNISIM.VComponents.all;
entity top is
port (
CLK : in std_logic
);
end top;
architecture Behavioral of top is
signal x : unsigned(7 downto 0) := (others => '0');
signal y : signed(7 downto 0) := (others => '0');
begin
process
begin
wait until rising_edge(CLK);
y <= x + y;
end process;
end Behavioral;
Wie gesagt mache ich x signed oder y unsigned funktioniert es, ansonsten
der Fehler.
Danke für hilfe
ok danke ich glaub ich habs, auch mit überlauf, werd es so machen
z <= to_integer(unsigned(b"00" & Input_1)) + signed(Input_2(7) &
Input_2(7) & Input_2);
Input 1 und 2 sind zwei 8 Bit vectoren und z ist unsigned 10 Bit, für
Vorzeichen und Überlauf, müsst so passen, jeden falls laut Simulation.
Anfänger schrieb:
> z <= to_integer(unsigned(b"00" & Input_1)) + signed(Input_2(7) &> Input_2(7) & Input_2);
Für so etwas
unsigned(b"00" & Input_1)
gibt es resize
resize (Input_1, Input_1'length + 2)
resize (Input_2, Input_2'length + 2)
am Besten
signal z : signed (input_1'length + 1 downto 0);
z <= signed (resize (unsigned (Input_1, z'length))) + resize (signed
(Input_2, z'length));
Tom
Jürgen S. schrieb:
> Thomas, geht das auch bei unsigned?
Was soll auch bei unsigned gehen? Resize kann man sowohl auf signed und
unsigned anwenden. Das steht aber im Beispiel.
Tom
Hallo leute
bin neuling in VHDL muss zwei schaltungen entwerfen in VHDL die
einerstelle und zehnstelle der dezimaldarstellung als vier bwz
zweistellige binärwort.dafür muss ich die mathematische operation
benutzen mod und to_integer(unsigned(s)) hab keine ahnung wie ich das
machen kann.kann mir jemand helfen,ich bis jetzt dieses code geschrieben
es geht um 7-segment schaltung:
Ich habe die Aufgabe nicht verstanden, aber das hier ist unnötig
kompliziert:
1
port(
2
cardsum:instd_logic_vector(4downto0)
3
broke:outstd_logic);
4
5
endBroke;
6
7
architectureverhaltenofBrokeis
8
begin
9
10
withcardsumselect
11
broke<='1'when"10110",
12
'1'when"10111",
13
'1'when"11000",
14
'1'when"11001",
15
'1'when"11010",
16
'1'when"11011",
17
'1'when"11100",
18
'1'when"11101",
19
'1'when"11110",
20
'1'when"11111",
21
'0'whenothers;
22
23
endverhalten;
Das ginge so viel kürzer:
1
port(
2
cardsum:instd_logic_vector(4downto0)
3
broke:outstd_logic);
4
endBroke;
5
6
architectureverhaltenofBrokeis
7
begin
8
broke<='1'whenunsigned(cardsum)>22else'0';
9
endverhalten;
Und spätestens dann darf man sich fragen, ob überhaupt ein eigenes Modul
dafür nötig ist...
Aber wie gesagt:
ich habe das Problem nicht verstanden, evtl. willst du damit ja noch
irgendwas anstellen. Zeichne doch mal ein Bild, das deine Aufgabe
darstellt.
Eine eigene Frage?
Dieser Thread ist über 16 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.