·

Engenharia Eletrônica ·

Sistemas Digitais

Send your question to AI and receive an answer instantly

Ask Question

Preview text

Sequência de projeto A seguir é fornecida uma sugestão para a sequência de desenvolvimento do projeto Elaboração com auxílio do simulador MARS do programa a ser avaliado Edição do arquivo de inicialização da memória ROM mif conforme o MARS Validação dos blocos VHDL do MIPS Projeto da parte de busca de instruções Inclusão progressiva e teste das instruções do processador Simulação do processador na execução do programa alvo Elaboração de forma concomitante ao projeto do material a ser entregue Especificação da avaliação Objetivo Elaboração de um programa MIPS especificado e o projeto e descrição VHDL do processador equivalente Data e horário limites para a entrega 120324 até as 23h59 O que será avaliado Elaboração e simulação do programa MIPS no MARS Validação dos blocos internos da microarquitetura memória de instruções memória de dados banco de registradores ULA Projeto do processador correspondente ao programa elaborado RTL microoperações FSM microarquitetura etc Descrição VHDL do processador Presença do estudante nas aulas presenciais de desenvolvimento do projeto Partes idênticas identificadas em diferentes trabalhos resultarão em descontos nas respectivas notas podendo inclusive resultar em nota zero Especificação da avaliação O conjunto de instruções a ser implementado pelo processador deverá ser compatível com as instruções de um processador MIPS de 32 bits padrão Blocos VHDL fornecidos para o projeto Memória ROM 1024x32 Memória RAM 1024x32 Banco de registradores Unidade Lógica e Aritmética A validação dos blocos edição e simulação dos respectivos testbenchs faz parte da avaliação Considerar que a capacidade da memória do processador implementado será menor que a capacidade do processador padrão Especificação da avaliação Acompanhamento do projeto As aulas presenciais serão dedicadas ao desenvolvimento do projeto e ao esclarecimento das dúvidas existentes A plataforma eaula deverá ser utilizada para a solicitação de esclarecimentos não abordados na aula presencial PROJETO MIPS 1 Elaboração do código em Assembly MIPS Objetivo Escrever um código Assembly MIPS para determinar o número de bits 1 em um dado e colocar o resultado em R20 data dado word 0xAAAAAAAA Exemplo de dado a ser processado text main Carregar o dado para o registrador t0 lw t0 dado Inicializar o contador de bits em 0 li t1 0 Loop para contar os bits 1 no dado countbits andi t2 t0 1 Faz a operação AND bit a bit com 1 add t1 t1 t2 Adiciona o resultado ao contador de bits srl t0 t0 1 Desloca o dado para a direita em 1 bit bnez t0 countbits Se ainda houver bits no dado continua o loop Armazenar o resultado no registrador R20 move t0 t1 sw t0 resultado Fim do programa jr ra Fluxo de processamento 1 Carregamento do dado inicial da memória para o registrador t0 2 Inicialização do contador de bits em 0 3 Laço para operação AND bit a bit com o valor 1 adicionando o resultado ao contador de bits 4 Deslocamento do dado para a direita em 1 bit em cada iteração até que todos os bits tenham sido contados 5 Armazenamento do resultado no registrador R20 2 Desenvolvimento do projeto em VHDL para o processador MIPS 21 Banco de registradores de propósito geral O código define um banco de registradores com 32 registradores de 32 bits cada Ele possui entradas para clock clk controle de escrita regWrite seleção do registrador de escrita writeReg dados de escrita writeData seleção de registrador para leitura readReg1 e readReg2 e saídas para os dados lidos dos registradores readData1 e readData2 library IEEE use IEEESTDLOGIC1164ALL use IEEESTDLOGICARITHALL use IEEESTDLOGICUNSIGNEDALL entity BancoRegistradores is Port clk in STDLOGIC regWrite in STDLOGIC writeReg in STDLOGICVECTOR4 downto 0 writeData in STDLOGICVECTOR31 downto 0 readReg1 in STDLOGICVECTOR4 downto 0 readReg2 in STDLOGICVECTOR4 downto 0 readData1 out STDLOGICVECTOR31 downto 0 readData2 out STDLOGICVECTOR31 downto 0 end BancoRegistradores architecture Behavioral of BancoRegistradores is type regarray is array 0 to 31 of STDLOGICVECTOR31 downto 0 signal registers regarray others others 0 begin processclk begin if risingedgeclk then if regWrite 1 then registersconvintegerwriteReg writeData end if end if end process readData1 registersconvintegerreadReg1 readData2 registersconvintegerreadReg2 end Behavioral 22 Unidade de Controle a unidade de controle recebe o campo opcode da instrução sendo executada e gera os sinais de controle correspondentes para os diferentes componentes do processador como o banco de registradores a ULA e a memória library IEEE use IEEESTDLOGIC1164ALL entity UnidadeControle is Port opcode in STDLOGICVECTOR5 downto 0 RegDst ALUSrc MemtoReg RegWrite MemRead MemWrite Branch Jump ALUOp out STDLOGICVECTOR2 downto 0 end UnidadeControle architecture Behavioral of UnidadeControle is begin processopcode begin case opcode is when 000000 RType registrador RegDst 11 Registrador de destino é o rd ALUSrc 00 A segunda fonte para a ALU vem do registrador Rs MemtoReg 0 Dados da memória não são usados RegWrite 1 Registra a escrita MemRead 0 Nenhuma leitura de memória MemWrite 0 Nenhuma escrita em memória Branch 0 Nenhuma operação de branch Jump 0 Nenhuma operação de jump ALUOp 10 Operação da ALU é definida pelo campo funct when 100011 LW load word RegDst 00 Registrador de destino é o rt ALUSrc 01 A segunda fonte para a ALU vem da extensão de sinal da constante MemtoReg 1 Dados da memória são usados RegWrite 1 Registra a escrita MemRead 1 Leitura de memória MemWrite 0 Nenhuma escrita em memória Branch 0 Nenhuma operação de branch Jump 0 Nenhuma operação de jump ALUOp 00 Operação da ALU é adição Adicione os casos para outras instruções conforme necessário when others Caso padrão RegDst 00 Registrador de destino é o rt ALUSrc 01 A segunda fonte para a ALU vem da extensão de sinal da constante MemtoReg 0 Dados da memória não são usados RegWrite 1 Registra a escrita MemRead 0 Nenhuma leitura de memória MemWrite 0 Nenhuma escrita em memória Branch 0 Nenhuma operação de branch Jump 0 Nenhuma operação de jump ALUOp 00 Operação da ALU é adição end case end process end Behavioral 23 Unidade Lógicoaritmética definese a ULA com entradas para a seleção da operação op os dois operandos operand1 e operand2 e uma saída para o resultado da operação result Além disso há uma saída adicional zero que indica se o resultado é zero ou não library IEEE use IEEESTDLOGIC1164ALL use IEEESTDLOGICARITHALL use IEEESTDLOGICUNSIGNEDALL entity ULA is Port op in STDLOGICVECTOR2 downto 0 Seleção da operação da ULA operand1 in STDLOGICVECTOR31 downto 0 Primeiro operando operand2 in STDLOGICVECTOR31 downto 0 Segundo operando result out STDLOGICVECTOR31 downto 0 Resultado da operação zero out STDLOGIC Saída indicando se o resultado é zero end ULA architecture Behavioral of ULA is begin processop operand1 operand2 begin case op is when 000 Operação de adição result operand1 operand2 when 001 Operação de subtração result operand1 operand2 when 010 Operação AND result operand1 and operand2 when 011 Operação OR result operand1 or operand2 when 100 Operação XOR result operand1 xor operand2 when others Outras operações result others 0 Resultado zerado por padrão end case if result others 0 then Verifica se o resultado é zero zero 1 else zero 0 end if end process end Behavioral 24 Lógica de Busca e Execução de instruções a lógica de busca e execução de instruções é implementada dentro de um processo sensível ao sinal de clock clk Ele verifica o opcode da instrução recebida e gera os sinais de controle correspondentes para os diferentes componentes do processador além de calcular o resultado da ULA aluOut quando necessário Inclui também instruções adicionais library IEEE use IEEESTDLOGIC1164ALL entity LogicaInstrucoes is Port clk in STDLOGIC opcode in STDLOGICVECTOR5 downto 0 funct in STDLOGICVECTOR5 downto 0 rs rt rd in STDLOGICVECTOR4 downto 0 immediate in STDLOGICVECTOR15 downto 0 address in STDLOGICVECTOR9 downto 0 aluOut out STDLOGICVECTOR31 downto 0 regWrite memRead memWrite branch jump out STDLOGIC regDst aluSrc memToReg out STDLOGIC end LogicaInstrucoes architecture Behavioral of LogicaInstrucoes is begin processclk begin if risingedgeclk then case opcode is when 000000 RType registrador regDst 1 aluSrc 0 memToReg 0 regWrite 1 memRead 0 memWrite 0 branch 0 jump 0 case funct is when 100000 ADD aluOut stdlogicvectorsignedrs signedrt when 100010 SUB aluOut stdlogicvectorsignedrs signedrt Adicione casos para outras instruções RType conforme necessário when others aluOut others 0 end case when 001111 LUI load upper immediate regDst 1 aluSrc 1 memToReg 1 regWrite 1 memRead 0 memWrite 0 branch 0 jump 0 aluOut others 0 immediate Immediate extended with 16 bits of zeros when 001000 ADDI add immediate regDst 1 aluSrc 1 memToReg 1 regWrite 1 memRead 0 memWrite 0 branch 0 jump 0 aluOut stdlogicvectorsignedrs signedimmediate Immediate is signextended when 100100 AND bitwise AND regDst 1 aluSrc 0 memToReg 1 regWrite 1 memRead 0 memWrite 0 branch 0 jump 0 aluOut rs and rt when 000100 BEQ branch if equal regDst 0 aluSrc 0 memToReg 0 regWrite 0 memRead 0 memWrite 0 branch 1 jump 0 aluOut rs rt The result will be zero if rs is equal to rt when 000011 J jump regDst 0 aluSrc 0 memToReg 0 regWrite 0 memRead 0 memWrite 0 branch 0 jump 1 aluOut others 0 address when others regDst 0 aluSrc 0 memToReg 0 regWrite 0 memRead 0 memWrite 0 branch 0 jump 0 aluOut others 0 end case end if end process end Behavioral 25 Testbench Declaramse sinais para todas as entradas e saídas do processador para a seguir instanciar o componente do processador MIPS Na sequência criase um processo para gerar um sinal de clock Adicionamse estímulos para as entradas do processador dentro do processo principal e verificações para as saídas do processador library IEEE use IEEESTDLOGIC1164ALL entity TestbenchProcessadorMIPS is end TestbenchProcessadorMIPS architecture Behavioral of TestbenchProcessadorMIPS is Declaração dos sinais de entrada signal clk stdlogic 0 Sinal de clock Declaração dos sinais de saída signal opcode stdlogicvector5 downto 0 others 0 Opcode da instrução signal funct stdlogicvector5 downto 0 others 0 Funct da instrução signal rs rt rd stdlogicvector4 downto 0 others 0 Registradores de origem e destino signal immediate stdlogicvector15 downto 0 others 0 Constante imediata signal address stdlogicvector9 downto 0 others 0 Endereço de destino para JUMP signal aluOut stdlogicvector31 downto 0 Saída da ULA signal regWrite memRead memWrite branch jump stdlogic Sinais de controle signal regDst aluSrc memToReg stdlogic Sinais de controle library IEEE use IEEESTDLOGIC1164ALL entity TestbenchProcessadorMIPS is end TestbenchProcessadorMIPS architecture Behavioral of TestbenchProcessadorMIPS is Declaração dos sinais de entrada signal clk stdlogic 0 Sinal de clock Declaração dos sinais de saída signal opcode stdlogicvector5 downto 0 others 0 Opcode da instrução signal funct stdlogicvector5 downto 0 others 0 Funct da instrução signal rs rt rd stdlogicvector4 downto 0 others 0 Registradores de origem e destino signal immediate stdlogicvector15 downto 0 others 0 Constante imediata signal address stdlogicvector9 downto 0 others 0 Endereço de destino para JUMP signal aluOut stdlogicvector31 downto 0 Saída da ULA signal regWrite memRead memWrite branch jump stdlogic Sinais de controle signal regDst aluSrc memToReg stdlogic Sinais de controle Componente do processador MIPS component ProcessadorMIPS port clk in stdlogic opcode in stdlogicvector5 downto 0 funct in stdlogicvector5 downto 0 rs rt rd in stdlogicvector4 downto 0 immediate in stdlogicvector15 downto 0 address in stdlogicvector9 downto 0 aluOut out stdlogicvector31 downto 0 regWrite memRead memWrite branch jump out stdlogic regDst aluSrc memToReg out stdlogic end component begin Instanciando o processador MIPS UUT ProcessadorMIPS port map clk clk opcode opcode funct funct rs rs rt rt rd rd immediate immediate address address aluOut aluOut regWrite regWrite memRead memRead memWrite memWrite branch branch jump jump regDst regDst aluSrc aluSrc memToReg memToReg Estímulo de clock process begin while now 1000 ns loop clk not clk wait for 5 ns Ciclo de clock de 10 ns 50 duty cycle end loop wait end process Adicione estímulos para as entradas do processador aqui Adicione verificações para as saídas do processador aqui end Behavioral