Skip to content

Unidade Central de Processamento

CPU_TOP_LEVEL.vhd ⧉

Topologia

alt text

Fluxo do Pipeline

Fluxo de sinais

Topologia do Top Level

Área por módulo

alt text

Interface

vhdl
entity CPU_TOP_LEVEL is

    port (
        clock           : in  std_logic := '0';
        clear           : in  std_logic := '0';
        enable          : in  std_logic := '1';
        memory_read     : out std_logic;
        memory_write    : out std_logic;
        data_program    : in  WORK.CPU.t_PROGRAM := WORK.RV32I.NULL_INSTRUCTION;
        data_memory_in  : in  WORK.CPU.t_DATA    := (others => '0');
        data_memory_out : out WORK.CPU.t_DATA;
        address_program : out WORK.CPU.t_DATA;
        address_memory  : out WORK.CPU.t_DATA
    );

end entity;
  • clock: Sinal de clock.
  • clear: Limpa os dados da entidade.
  • enable: Habilita a entidade.
  • data_program: Dados da instrução da memória de programa.
  • data_memory_in: Dados de leitura da memória de dados.
  • memory_read: Habilita leitura da memória de dados.
  • memory_write: Habilita escrita na memória de dados.
  • data_memory_out: Dados de escrita na memória de dados.
  • address_program: Endereçamento da memória de programa.
  • address_memory: Endereçamento da memória de dados.

Usagem

Especificação RV32I RTL

Implementação a partir de componentes genéricos e lógica a nível de registradores e portas lógicas. Não amigável para FPGA, menor performance e consome mais recursos de síntese.

vhdl
CPU : entity WORK.CPU_TOP_LEVEL(RV32I)
    port map (
        clock           => clock,
        clear           => '0',
        enable          => '1',
        memory_read     => enable_memory_read,
        memory_write    => enable_memory_write,
        data_program    => data_program,
        data_memory_in  => data_memory_in,
        data_memory_out => data_memory_out,
        address_program => address_program,
        address_memory  => address_memory
    );

Especificação RV32I Sinóptica

WORK IN PROGRES

Implementação a partir de componentes genéricos e lógica descritiva. Amigável para FPGA.

vhdl
CPU : entity WORK.CPU_TOP_LEVEL(RV32I_SYN)
    port map (
        clock           => clock,
        clear           => '0',
        enable          => '1',
        memory_read     => enable_memory_read,
        memory_write    => enable_memory_write,
        data_program    => data_program,
        data_memory_in  => data_memory_in,
        data_memory_out => data_memory_out,
        address_program => address_program,
        address_memory  => address_memory
    );

Especificação RV32IM RTL

WORK IN PROGRES

To do.

Especificação RV32IM Sinóptica

WORK IN PROGRES

To do.

Diagrama RTL

Diagrama de RTL da CPU

Casos de teste

test_CPU_TOP_LEVEL.py ⧉

Caso de instruções ADD tb_cpu_top_level_add

testcase_ADD.S ⧉

Forma de onda do caso de instruções ADD da CPU

Caso de instruções ADDI tb_cpu_top_level_addi

testcase_ADDI.S ⧉

Forma de onda do caso de instruções ADDI da CPU

Caso de instruções AND tb_cpu_top_level_and

testcase_AND.S ⧉

Forma de onda do caso de instruções AND da CPU

Caso de instruções ANDI tb_cpu_top_level_andi

testcase_ANDI.S ⧉

Forma de onda do caso de instruções ANDI da CPU

Caso de instruções AUIPC tb_cpu_top_level_auipc

testcase_AUIPC.S ⧉

Forma de onda do caso de instruções AUIPC da CPU

Caso de instruções BEQ tb_cpu_top_level_beq

testcase_BEQ.S ⧉

Forma de onda do caso de instruções BEQ da CPU

Caso de instruções BGE tb_cpu_top_level_bge

testcase_BGE.S ⧉

Forma de onda do caso de instruções BGE da CPU

Caso de instruções BGEU tb_cpu_top_level_bgeu

testcase_BGEU.S ⧉

Forma de onda do caso de instruções BGEU da CPU

Caso de instruções BLT tb_cpu_top_level_blt

testcase_BLT.S ⧉

Forma de onda do caso de instruções BLT da CPU

Caso de instruções BLTU tb_cpu_top_level_bltu

testcase_BLTU.S ⧉

Forma de onda do caso de instruções BLTU da CPU

Caso de instruções BNE tb_cpu_top_level_bne

testcase_BNE.S ⧉

Forma de onda do caso de instruções BNE da CPU

Caso de instruções JAL tb_cpu_top_level_jal

testcase_JAL.S ⧉

Forma de onda do caso de instruções JAL da CPU

Caso de instruções JALR tb_cpu_top_level_jalr

testcase_JALR.S ⧉

Forma de onda do caso de instruções JALR da CPU

Caso de instruções LB tb_cpu_top_level_lb

testcase_LB.S ⧉

Forma de onda do caso de instruções LB da CPU

Caso de instruções LBU tb_cpu_top_level_lbu

testcase_LBU.S ⧉

Forma de onda do caso de instruções LBU da CPU

Caso de instruções LH tb_cpu_top_level_lh

testcase_LH.S ⧉

Forma de onda do caso de instruções LH da CPU

Caso de instruções LHU tb_cpu_top_level_lhu

testcase_LHU.S ⧉

Forma de onda do caso de instruções LHU da CPU

Caso de instruções LUI tb_cpu_top_level_lui

testcase_LUI.S ⧉

Forma de onda do caso de instruções LUI da CPU

Caso de instruções LW tb_cpu_top_level_lw

testcase_LW.S ⧉

Forma de onda do caso de instruções LW da CPU

Caso de instruções OR tb_cpu_top_level_or

testcase_OR.S ⧉

Forma de onda do caso de instruções OR da CPU

Caso de instruções ORI tb_cpu_top_level_ori

testcase_ORI.S ⧉

Forma de onda do caso de instruções ORI da CPU

Caso de instruções SB tb_cpu_top_level_sb

testcase_SB.S ⧉

Forma de onda do caso de instruções SB da CPU

Caso de instruções SH tb_cpu_top_level_sh

testcase_SH.S ⧉

Forma de onda do caso de instruções SH da CPU

Caso de instruções SLL tb_cpu_top_level_sll

testcase_SLL.S ⧉

Forma de onda do caso de instruções SLL da CPU

Caso de instruções SLLI tb_cpu_top_level_slli

testcase_SLLI.S ⧉

Forma de onda do caso de instruções SLLI da CPU

Caso de instruções SLT tb_cpu_top_level_slt

testcase_SLT.S ⧉

Forma de onda do caso de instruções SLT da CPU

Caso de instruções SLTI tb_cpu_top_level_slti

testcase_SLTI.S ⧉

Forma de onda do caso de instruções SLTI da CPU

Caso de instruções SLTIU tb_cpu_top_level_sltiu

testcase_SLTIU.S ⧉

Forma de onda do caso de instruções SLTIU da CPU

Caso de instruções SLTU tb_cpu_top_level_sltu

testcase_SLTU.S ⧉

Forma de onda do caso de instruções SLTU da CPU

Caso de instruções SRA tb_cpu_top_level_sra

testcase_SRA.S ⧉

Forma de onda do caso de instruções SRA da CPU

Caso de instruções SRAI tb_cpu_top_level_srai

testcase_SRAI.S ⧉

Forma de onda do caso de instruções SRAI da CPU

Caso de instruções SRL tb_cpu_top_level_srl

testcase_SRL.S ⧉

Forma de onda do caso de instruções SRL da CPU

Caso de instruções SRLI tb_cpu_top_level_srli

testcase_SRLI.S ⧉

Forma de onda do caso de instruções SRLI da CPU

Caso de instruções SUB tb_cpu_top_level_sub

testcase_SUB.S ⧉

Forma de onda do caso de instruções SUB da CPU

Caso de instruções SW tb_cpu_top_level_sw

testcase_SW.S ⧉

Forma de onda do caso de instruções SW da CPU

Caso de instruções XOR tb_cpu_top_level_xor

testcase_XOR.S ⧉

Forma de onda do caso de instruções XOR da CPU

Caso de instruções XORI tb_cpu_top_level_xori

testcase_XORI.S ⧉

Forma de onda do caso de instruções XORI da CPU

Publicado sob a Licença MIT.