LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY Alu4 IS GENERIC(CONSTANT N: IN
ID: 644986 • Letter: L
Question
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY Alu4 IS
GENERIC(CONSTANT N: INTEGER:=4; --4 BITS ALU
CONSTANT Z: STD_LOGIC_VECTOR(3 DOWNTO 1):="000" --3 ZEROs
);
PORT(a,b: IN STD_LOGIC_VECTOR(N-1 DOWNTO 0);
control: IN STD_LOGIC_VECTOR(1 DOWNTO 0);
overflow: OUT STD_LOGIC;
zero: OUT STD_LOGIC;
carryOut: OUT STD_LOGIC;
result: OUT STD_LOGIC_VECTOR(N-1 DOWNTO 0)
);
END Alu4;
ARCHITECTURE imp OF Alu4 IS
COMPONENT Alu1
PORT(a,b: IN STD_LOGIC;
carryIn: IN STD_LOGIC;
control: IN STD_LOGIC;
result: OUT STD_LOGIC;
carryOut: OUT STD_LOGIC;
);
END COMPONENT;
SIGNAL carry_sig: STD_LOGIC_VECTOR(N DOWNTO 0); --carry_sig(N) = MSB carryOut
SIGNAL result_sig: STD_LOGIC_VECTOR(N-1 DOWNTO 0);
BEGIN
--Dont understand where to begin and how to name my parameters.
-- suppose to use generate ...port map
END imp;
if you need the 1bit alu, here it is
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY Alu1 IS
PORT(a,b: IN STD_LOGIC;
CarryIn: IN STD_LOGIC;
control: IN STD_LOGIC_VECTOR(1 DOWNTO 0);
result: OUT STD_LOGIC;
carryOut: OUT STD_LOGIC
);
END Alu1;
ARCHITECTURE imp OF Alu1 IS
COMPONENT Adder1
PORT(a,b: IN STD_LOGIC;
cIn: IN STD_LOGIC;
sum: OUT STD_LOGIC;
cOut: OUT STD_LOGIC);
END COMPONENT;
SIGNAL a_sig, b_sig: STD_LOGIC;
SIGNAL sum_sig, carryOut_sig: STD_LOGIC;
SIGNAL result_sig: STD_LOGIC;
BEGIN
a_sig <= a;
b_sig <= NOT b WHEN control = "11" ELSE --SUBTRACT (1'S COMPLEMENT)
b;
co: Adder1 PORT MAP(a_sig, b_sig, carryIn, sum_sig, carryOut_sig);
--ADD and SUBTRACT operations do the same thing(ADD).
WITH control SELECT
result_sig <=
a AND b WHEN "00", --AND
a OR b WHEN "01", --OR
sum_sig WHEN "10", --ADD
sum_sig WHEN "11"; --SUBTRACT
result<= result_sig;
--carryOut= "0" when AND or OR operations
carryOut <= '0' WHEN control = "00" OR control="01" ELSE
carryOut_sig;
END imp;
Explanation / Answer
i think you are looking for formatting the above...
hope this wil helps you..
<p><img alt="" src="//d2vlcm61l7u1fs.cloudfront.net/media%2F6db%2F6db78bb1-9c98-431a-b2f2-6b28234c3fec%2FphpXVSNIH.png" />You need to demonstrate logical operations (AND and OR) and arithmetic operations (Add, Subtract). This 4-bit ALU uses the toggle switches as the inputs (4-bit a, 4-bit b, and 2-bit control lines).</p>
<p> </p>
<p>LIBRARY IEEE;
<br /> USE IEEE.STD_LOGIC_1164.ALL;</p>
<p>ENTITY Alu4 IS
<br /> GENERIC(CONSTANT N: INTEGER:=4; --4 BITS ALU
<br /> CONSTANT Z: STD_LOGIC_VECTOR(3 DOWNTO 1):="000" --3 ZEROs
<br /> );
<br /> PORT(a,b: IN STD_LOGIC_VECTOR(N-1 DOWNTO 0);
<br /> control: IN STD_LOGIC_VECTOR(1 DOWNTO 0);
<br /> overflow: OUT STD_LOGIC;
<br /> zero: OUT STD_LOGIC;
<br /> carryOut: OUT STD_LOGIC;
<br /> result: OUT STD_LOGIC_VECTOR(N-1 DOWNTO 0)
<br /> );
<br /> END Alu4;
<br />
<br /> ARCHITECTURE imp OF Alu4 IS
<br /> COMPONENT Alu1
<br /> PORT(a,b: IN STD_LOGIC;
<br /> carryIn: IN STD_LOGIC;
<br /> control: IN STD_LOGIC;
<br /> result: OUT STD_LOGIC;
<br /> carryOut: OUT STD_LOGIC;
<br /> );
<br /> END COMPONENT;
<br /> SIGNAL carry_sig: STD_LOGIC_VECTOR(N DOWNTO 0); --carry_sig(N) = MSB carryOut
<br /> SIGNAL result_sig: STD_LOGIC_VECTOR(N-1 DOWNTO 0);
<br /> BEGIN
<br />
<br /> --Dont understand where to begin and how to name my parameters.
<br /> -- suppose to use generate ...port map
<br /> END imp;</p>
<p>if you need the 1bit alu, here it is</p>
<p>LIBRARY IEEE;
<br /> USE IEEE.STD_LOGIC_1164.ALL;</p>
<p>ENTITY Alu1 IS
<br /> PORT(a,b: IN STD_LOGIC;
<br /> CarryIn: IN STD_LOGIC;
<br /> control: IN STD_LOGIC_VECTOR(1 DOWNTO 0);
<br /> result: OUT STD_LOGIC;
<br /> carryOut: OUT STD_LOGIC
<br /> );
<br /> END Alu1;
<br />
<br /> ARCHITECTURE imp OF Alu1 IS
<br /> COMPONENT Adder1
<br /> PORT(a,b: IN STD_LOGIC;
<br /> cIn: IN STD_LOGIC;
<br /> sum: OUT STD_LOGIC;
<br /> cOut: OUT STD_LOGIC);
<br /> END COMPONENT;
<br /> SIGNAL a_sig, b_sig: STD_LOGIC;
<br /> SIGNAL sum_sig, carryOut_sig: STD_LOGIC;
<br /> SIGNAL result_sig: STD_LOGIC;
<br />
<br /> BEGIN
<br /> a_sig <= a;
<br /> b_sig <= NOT b WHEN control = "11" ELSE --SUBTRACT (1'S COMPLEMENT)
<br /> b;
<br /> co: Adder1 PORT MAP(a_sig, b_sig, carryIn, sum_sig, carryOut_sig);</p>
<p>
<br /> --ADD and SUBTRACT operations do the same thing(ADD).
<br /> WITH control SELECT
<br /> result_sig <=
<br /> a AND b WHEN "00", --AND
<br /> a OR b WHEN "01", --OR
<br /> sum_sig WHEN "10", --ADD
<br /> sum_sig WHEN "11"; --SUBTRACT
<br />
<br /> result<= result_sig;
<br /> --carryOut= "0" when AND or OR operations
<br /> carryOut <= '0' WHEN control = "00" OR control="01" ELSE
<br /> carryOut_sig;
<br />
<br /> END imp;</p>
Related Questions
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.