Klarkifou

VHDL TD 1

OUEX.vhd :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
LIBRARY ieee;
USE ieee.std_logic_1164.all;

ENTITY OUEX IS
	PORT( 	A : IN std_logic;
		B : IN std_logic;
		S1: OUT std_logic;
		S2: OUT std_logic;
		S3: OUT std_logic
	);
END OUEX;

ARCHITECTURE logique OF OUEX IS
BEGIN
	S1 <= (NOT(A) AND B) OR (A AND NOT(B));
	S2 <= A XOR B;
	S3 <= A WHEN B='0' ELSE NOT(A);
END logique;

concurrence.vhd :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
LIBRARY ieee;
USE ieee.std_logic_1164.all;

ENTITY concurrence IS
	PORT( 	A : IN std_logic;
		B : IN std_logic;
		C : IN std_logic;
		S : OUT std_logic
	);
END concurrence;

ARCHITECTURE comport OF concurrence IS
	SIGNAL D : std_logic;
BEGIN
	D <= A XOR B;
	S <= D AND C;
END comport;

mux4to1.vhd :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
LIBRARY ieee;
USE ieee.std_logic_1164.all;

ENTITY mux4to1 IS
	PORT( 	A : IN std_logic;
		B : IN std_logic;
		C : IN std_logic;
		D : IN std_logic;
		COMM : IN std_logic_vector(1 DOWNTO 0);
		S1: OUT std_logic;
		S2: OUT std_logic;
		S3: OUT std_logic
	);
END mux4to1;

ARCHITECTURE logique OF mux4to1 IS
BEGIN
	-- S0 <= (A AND NOT(COMM(1)) AND NOT(COM(0))) OR ...

	S1 <=   A WHEN COMM="00" ELSE B WHEN COMM="01"
		ELSE C WHEN COMM="10" ELSE D WHEN COMM="11"
		ELSE '0';
	
	WITH COMM SELECT
		S2 <= 	A WHEN "00", B WHEN "01",
			C WHEN "10", D WHEN "11",
			'0' WHEN others;
	
	PROCESS(A,B,C,D,COMM) IS
	BEGIN
		CASE COMM IS
			WHEN "00" => S3 <= A;
			WHEN "01" => S3 <= B;
			WHEN "10" => S3 <= C;
			WHEN "11" => S3 <= D;
			WHEN others => S3 <= '0';
		END CASE;
	END PROCESS;
END logique;

PdsHamm.vhd (ATTENTION partie logique fausse) :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
LIBRARY ieee;
USE ieee.std_logic_1164.all;

ENTITY PdsHamm IS
	PORT( 	E : IN  std_logic_vector(3 DOWNTO 0);
		H : OUT std_logic_vector(2 DOWNTO 0)
	);
END PdsHamm;

ARCHITECTURE logique OF PdsHamm IS --FAUX
BEGIN
	H(0) <= E(0) XOR E(1) XOR E(2) XOR E(3);
	H(1) <= ((E(0) XOR E(1)) AND (E(2) OR E(3))) OR
		((E(0) XOR E(2)) AND E(3)) OR
		(E(1) AND E(2) AND (E(0) OR E(3)));
	H(2) <= E(0) AND E(1) AND E(2) AND E(3);
END logique;

ARCHITECTURE comport OF PdsHamm IS
BEGIN
	PROCESS(E) IS
	BEGIN
		CASE E IS
			WHEN "0000" => H <= "000";
			WHEN "0001" => H <= "001";
			WHEN "0010" => H <= "001";
			WHEN "0011" => H <= "010";
			WHEN "0100" => H <= "001";
			WHEN "0101" => H <= "010";
			WHEN "0110" => H <= "010";
			WHEN "0111" => H <= "011";
			WHEN "1000" => H <= "001";
			WHEN "1001" => H <= "010";
			WHEN "1010" => H <= "010";
			WHEN "1011" => H <= "011";
			WHEN "1100" => H <= "010";
			WHEN "1101" => H <= "011";
			WHEN "1110" => H <= "011";
			WHEN "1111" => H <= "100";
			WHEN others => H <= "000";
		END CASE;
	END PROCESS;
END comport;

DstHamm.vhd :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
library ieee;
use ieee.std_logic_1164.ALL;

entity DstHamm is
	port( 	A : in  std_logic_vector(3 downto 0);
		B : in  std_logic_vector(3 downto 0);
		S : out std_logic_vector(2 downto 0)
	);
end DstHamm;

architecture behav of DstHamm is
	component PdsHamm is
		port( 	E : in  std_logic_vector(3 downto 0);
			H : out std_logic_vector(2 downto 0)
		);
	end component;

begin
	circ : PdsHamm
		port map(
			E(3) => A(3) XOR B(3),
			E(2) => A(2) XOR B(2),
			E(1) => A(1) XOR B(1),
			E(0) => A(0) XOR B(0),
			H => S
		);
end architecture;

comparateur.vhd :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
library ieee;
use ieee.std_logic_1164.ALL;

entity comparateur is
	port( 	A : in  std_logic_vector(3 downto 0);
		B : in  std_logic_vector(3 downto 0);
		Ssup : out std_logic;
		Segal : out std_logic;
		Sinf : out std_logic
	);
end comparateur;

architecture behav of comparateur is
begin
	process(A,B) is
	begin
		Ssup <= '0';
		Segal <= '0';
		Sinf <= '0';
		
		if A>B then
			Ssup  <= '1';
		elsif A<B then
			Sinf  <= '1';
		else
			Segal <= '1';
		end if;
	end process;
end architecture;