Gast
#1383496
Hi, habe mal als Test versucht einen 4 * 4 Multiplizierer in ein XC9572 zu bekommen. Geht anscheinend nicht, zu komplex. Hier mein Code:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
Kann man was machen?
|
Anzeige
|
Multiplizierer im CPLD XC9572
Gast
#1383496
Hi, habe mal als Test versucht einen 4 * 4 Multiplizierer in ein XC9572 zu bekommen. Geht anscheinend nicht, zu komplex. Hier mein Code:
Kann man was machen? > Kann man was machen?
Bei mir gehts:
Mit deiner Beschreibung kommt das selbe raus wie mit meiner:
Was machst du falsch? BTW: Produkt ohne c ;-)
Gast
#1383533
JA. die 4x4 nimmt entweder 24 oder 11 MC in XC95xxXL CPLD wiese gehts bei dir nicht??? --------------------------- library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity mult4 is Port ( a : in STD_LOGIC_VECTOR (3 downto 0); b : in STD_LOGIC_VECTOR (3 downto 0); p : out STD_LOGIC_VECTOR (7 downto 0)); end mult4; architecture Behavioral of mult4 is signal p1 : STD_LOGIC_VECTOR (7 downto 0); signal p2 : STD_LOGIC_VECTOR (7 downto 0); signal p4 : STD_LOGIC_VECTOR (7 downto 0); signal p8 : STD_LOGIC_VECTOR (7 downto 0); begin p1 <= ("0000" & B) when a(0)='1' else X"00"; p2 <= ("000" & B & "0") when a(1)='1' else X"00"; p4 <= ("00" & B & "00") when a(2)='1' else X"00"; p8 <= (B & "0000") when a(3)='1' else X"00"; --P <= A * B; -- 24 MC P <= p1 + p2 + p4 + p8; -- 11 macrocell, ANTTI BRAIN methode end Behavioral; -- http://groups.google.com/group/antti-brain?hl=en
Gast
#1383540
uuuups, ich habe a b als integers 0..15 genommen naja geht in 72 rein so oder so... Antti
Gast
#1383552
binwohl selbst voll idiot
bitte alles loschen meine dummheiten, muss zwar urlaub machen
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity mult4 is
Port ( a : in STD_LOGIC_VECTOR (3 downto 0);
b : in STD_LOGIC_VECTOR (3 downto 0);
p : out STD_LOGIC_VECTOR (7 downto 0));
end mult4;
architecture Behavioral of mult4 is
signal p1 : STD_LOGIC_VECTOR (7 downto 0);
signal p2 : STD_LOGIC_VECTOR (7 downto 0);
signal p4 : STD_LOGIC_VECTOR (7 downto 0);
signal p8 : STD_LOGIC_VECTOR (7 downto 0);
begin
-- p1 <= ("0000" & B) when a(0)='1' else X"00";
-- p2 <= ("000" & B & "0") when a(1)='1' else X"00";
-- p4 <= ("00" & B & "00") when a(2)='1' else X"00";
-- p8 <= ("0" & B & "000") when a(3)='1' else X"00";
p1 <= (B(3) & B(3) & B(3) & B(3) & B) when a(0)='1' else X"00";
p2 <= (B(3) & B(3) & B(3) & B & "0") when a(1)='1' else X"00";
p4 <= (B(3) & B(3) & B & "00") when a(2)='1' else X"00";
p8 <= (B(3) & B & "000") when a(3)='1' else X"00";
--P <= A * B; -- 24 MC
P <= p1 + p2 + p4 + p8; -- 11 macrocell, ANTTI BRAIN methode
end Behavioral;
Gast
#1386061
Hallo Antti danke für deinen VHDL-Code. Ich weiss leider auch nicht, warum es bei mir nicht mit einem 4*4 Multiplizierer klappt. Ich benutze ISE Web Pack V6.3 um mit dem Buch vom Rainer Jost kompatibel zu sein. (Daran sieht man, das ich nit CPLD und VHDL ein absoluter Anfänger bin) Bekomme leider die Fehlermeldung, das mein 4*4 Multiplizierer zu komplex für ein XC9572 währe. Habe mir dann mal deinen zuletzt geposteten VHDL-Code durchgesehen: Anscheinend ist die Optimierung von dem Tool das du verwendest suboptimal. Es werden 24 Macrozellen gebraucht, und bei deinem nur 11. Super! So wie du es geschrieben hast ist es meiner Meinung nach für die Multiplikation einer Zahl mit Vorzeichen (B) mit einer Zahl ohne Vorzeichen (A). Bei den Multiplikationen gibt's 4 Möglichkeiten: 1. unsigned * unsigned 2. unsigned * signed 3. signed * unsigned 4. signed * signed Sollte man irgendwo schreiben!!! VHDL kennt ja die Datentypen signed und unsigned. Antwort schreibenBitte melde dich an, um einen Beitrag zu schreiben. |
Anzeige
|