Tarefa 1. Projectar um circuito para fazer contas aritméticas: R1 = Op1 + Op2; R2 = Op1 - Op2; R3 = Op1 * Op2; R4 = Op1 / Op2; Onde: Op1 tem tamanho de 4 bits (use interruptores 3 downto 0 da placa) Op2 tem tamanho de 4 bits (use interruptores 7 downto 4 da placa) R1 deve aparecer nos displays quando carregar no botão0 da placa R2 deve aparecer nos displays quando carregar no botão1 da placa R3 deve aparecer nos displays quando carregar no botão2 da placa R4 deve aparecer nos displays quando carregar no botão3 da placa LED(7 downto 0) deve mostrar os resultados em código binário SDR 2009 1 VHDL suporta 1) adição (+), subtracção (-) e multiplicação (*). VHDL não suporta a divisão (/). Para implementar a divisão Op1(4 bits)/Op2(4 bits) pode utilizar tabelas ou instruções condicionais do tipo if e case ou subtracção múltipla 8 bits 4 + 4 = 8 bits 4 + 4 = 8 bits Exemplos: sum <= ("0000"&(Op1(3 downto 0)))+("0000"&(Op2(3 downto 0))); difference <= ("0000"&(Op1(3 downto 0)))-("0000"&(Op2(3 downto 0))) when ("0000"&(Op1(3 downto 0)))>=("0000"&(Op2(3 downto 0))) else ("0000"&(Op2(3 downto 0)))-("0000"&(Op1(3 downto 0))); sign <= std_logic_vector(to_unsigned(character'pos(' '), 8)) when ("0000"&(Op1(3 downto 0)))>=("0000"&(Op2(3 downto 0))) else std_logic_vector(to_unsigned(character'pos('-'), 8)); sumMSB <= "0011" & ROM(conv_integer(sum))(7 downto 4); sumLSB <= "0011" & ROM(conv_integer(sum))(3 downto 0); DifLSB <= "0011" & ROM(conv_integer(difference))(3 downto 0); dígito mais significativo SDR 2009 2 dígito menos significativo