T
Tarek -
Guest
Jeg har skrevet en 4-bit ALU med CCR i VHDL, men når jeg prøver at få den sammenfattende rapport i Xilinx ISE 9.2i, jeg får denne fejl:
linje 39: Signal C ikke kan syntetiseres, dårlig synkrone beskrivelse.
Linje 39 er: "-proces (s, CLK) er"
Kode:
library IEEE;
brug IEEE.STD_LOGIC_1164.ALL;
brug IEEE.STD_LOGIC_ARITH.ALL;
brug IEEE.STD_LOGIC_UNSIGNED.ALL;enhed ALU4bit er
Port (x: i std_logic_vector (3 downto 0);
y: i std_logic_vector (3 downto 0);
s: i std_logic_vector (3 downto 0);
CLK: i STD_LOGIC;
V, N, Z, C: out STD_LOGIC;
f: out std_logic_vector (3 downto 0));
- SEV_SEG: out std_logic_vector (7 downto 1));
ende ALU4bit;architecture Behavioral af ALU4bit erbegyndPROCESS (s, CLK) IS
VARIABLE temp, at: std_logic_vector (4 downto 0); - ekstra bit er for Retten i aritmetiske operationer
VARIABLE A: std_logic_vector (3 downto 0): = x;
VARIABLE B: std_logic_vector (3 downto 0): = y;
VARIABLE k, sub: STD_LOGIC: = '0 ';
BEGIN- Initialisere variabler og udgange
C <= '0 ';
V <= '0 ';
N <= '0 ';
Z <= '0 ';
sub: = '0 ';
bære (4 downto 0): = "XXXXX";HVIS (CLK = '1 'AND CLK'event) THENCASE S- Aritmetiske operationer: s (3) = 0Når "0000" =>
temp: = ('0 '& A) - overførsel x til temp
Når "0.001" =>
temp: = ('0 '& A) 1 - tilvækst x senest 1.
Når "0.010" =>
temp: = ('0 '& A) B - tilføj y til x
Når "0.011" =>
temp: = ('0 '& A) B 1 - tilføj y og Cin til x
Når "0.100" =>
B: = IKKE B;
temp: = ('0 '& A) B - subtrahere y fra x (en besætningsmedlemmer subtraktion)
sub: = '1 ';
Når "0.101" =>
B: = IKKE B;
temp: = ('0 '& A) B 1 - trække y fra x og tilvækst (to besætningsmedlemmer subtraktion)
sub: = '1 ';
Når "0.110" =>
temp: = ('0 '& A) - 1 - dekrementeringen x
sub: = '1 ';
Når "0.111" =>
temp: = ('0 '& B) - overførsel y til temp- Logiske operationer: s (3) = 1Når "1000" =>
temp: = IKKE ('0 '& B) - flydende y
NÅR "1001" =>
temp: = ('0 '& (A NAND B)) - logisk nog af x og y
Når "1010" =>
temp: = ('0 '& (A eller B)) - logisk eller af x og y
Når "1011" =>
temp: = ('0 '& (A XNOR B)) - logisk xnor af x og y
Når "1100" =>
temp: = ('0 '& (A XOR B)) - logisk xor af x og y
Når "1101" =>
temp: = ('0 '& (A eller B)) - logisk eller af x og y
Når "1110" =>
temp: = ('0 '& (A og B)) - logisk og af x og y
Når andre =>
temp: = IKKE ('0 '& A) - invertsukker x
END CASE;- Output overdragelseHvis S (3) = '0 'THEN - kun overveje CCR i aritmetiske mode- Bestemme negativ smule, N
IF temp (3) = '1 'THEN
N <= '1 ';
END IF;- Afgøre overflow smule, V
bære (0): = '0 ';
for k i 1 til 4 loop
bære (k): = (A (k-1) og B (k-1)) ELLER (bære (k-1) og (a (k-1) XOR B (k-1)));
END LOOP;IF (bære (4) XOR bære (3)) = '1 'THEN
V <= '1 ';
END IF;- Afgøre nul bit, Z
IF temp (3 downto 0) = "0000" THEN
Z <= '1 ';
END IF;- Afgøre bære smule, C
IF ((sub = '1 'AND y> x) eller (sub = '0' AND temp (4) = '1 ')) THEN
C <= '1 ';
END IF;END IF;- Afgøre output, ff <= temp (3 downto 0);ELSE - Når CLK er lav, giver skrald output
f <= "xxxx";
C <= 'X';
V <= 'X';
N <= 'X';
Z <= 'X';
END IF;END PROCESS;
END Behavioral;
linje 39: Signal C ikke kan syntetiseres, dårlig synkrone beskrivelse.
Linje 39 er: "-proces (s, CLK) er"
Kode:
library IEEE;
brug IEEE.STD_LOGIC_1164.ALL;
brug IEEE.STD_LOGIC_ARITH.ALL;
brug IEEE.STD_LOGIC_UNSIGNED.ALL;enhed ALU4bit er
Port (x: i std_logic_vector (3 downto 0);
y: i std_logic_vector (3 downto 0);
s: i std_logic_vector (3 downto 0);
CLK: i STD_LOGIC;
V, N, Z, C: out STD_LOGIC;
f: out std_logic_vector (3 downto 0));
- SEV_SEG: out std_logic_vector (7 downto 1));
ende ALU4bit;architecture Behavioral af ALU4bit erbegyndPROCESS (s, CLK) IS
VARIABLE temp, at: std_logic_vector (4 downto 0); - ekstra bit er for Retten i aritmetiske operationer
VARIABLE A: std_logic_vector (3 downto 0): = x;
VARIABLE B: std_logic_vector (3 downto 0): = y;
VARIABLE k, sub: STD_LOGIC: = '0 ';
BEGIN- Initialisere variabler og udgange
C <= '0 ';
V <= '0 ';
N <= '0 ';
Z <= '0 ';
sub: = '0 ';
bære (4 downto 0): = "XXXXX";HVIS (CLK = '1 'AND CLK'event) THENCASE S- Aritmetiske operationer: s (3) = 0Når "0000" =>
temp: = ('0 '& A) - overførsel x til temp
Når "0.001" =>
temp: = ('0 '& A) 1 - tilvækst x senest 1.
Når "0.010" =>
temp: = ('0 '& A) B - tilføj y til x
Når "0.011" =>
temp: = ('0 '& A) B 1 - tilføj y og Cin til x
Når "0.100" =>
B: = IKKE B;
temp: = ('0 '& A) B - subtrahere y fra x (en besætningsmedlemmer subtraktion)
sub: = '1 ';
Når "0.101" =>
B: = IKKE B;
temp: = ('0 '& A) B 1 - trække y fra x og tilvækst (to besætningsmedlemmer subtraktion)
sub: = '1 ';
Når "0.110" =>
temp: = ('0 '& A) - 1 - dekrementeringen x
sub: = '1 ';
Når "0.111" =>
temp: = ('0 '& B) - overførsel y til temp- Logiske operationer: s (3) = 1Når "1000" =>
temp: = IKKE ('0 '& B) - flydende y
NÅR "1001" =>
temp: = ('0 '& (A NAND B)) - logisk nog af x og y
Når "1010" =>
temp: = ('0 '& (A eller B)) - logisk eller af x og y
Når "1011" =>
temp: = ('0 '& (A XNOR B)) - logisk xnor af x og y
Når "1100" =>
temp: = ('0 '& (A XOR B)) - logisk xor af x og y
Når "1101" =>
temp: = ('0 '& (A eller B)) - logisk eller af x og y
Når "1110" =>
temp: = ('0 '& (A og B)) - logisk og af x og y
Når andre =>
temp: = IKKE ('0 '& A) - invertsukker x
END CASE;- Output overdragelseHvis S (3) = '0 'THEN - kun overveje CCR i aritmetiske mode- Bestemme negativ smule, N
IF temp (3) = '1 'THEN
N <= '1 ';
END IF;- Afgøre overflow smule, V
bære (0): = '0 ';
for k i 1 til 4 loop
bære (k): = (A (k-1) og B (k-1)) ELLER (bære (k-1) og (a (k-1) XOR B (k-1)));
END LOOP;IF (bære (4) XOR bære (3)) = '1 'THEN
V <= '1 ';
END IF;- Afgøre nul bit, Z
IF temp (3 downto 0) = "0000" THEN
Z <= '1 ';
END IF;- Afgøre bære smule, C
IF ((sub = '1 'AND y> x) eller (sub = '0' AND temp (4) = '1 ')) THEN
C <= '1 ';
END IF;END IF;- Afgøre output, ff <= temp (3 downto 0);ELSE - Når CLK er lav, giver skrald output
f <= "xxxx";
C <= 'X';
V <= 'X';
N <= 'X';
Z <= 'X';
END IF;END PROCESS;
END Behavioral;