From a0d00315e885eff5fb171ad47de60106435a7a2b Mon Sep 17 00:00:00 2001 From: Manfred Date: Tue, 30 Nov 2010 23:34:36 +0100 Subject: [PATCH] extension: instanziert in tb und toplvlentity sowie in den vsim dofiles --- cpu/sim/testcore.do | 4 ++++ cpu/sim/testcore1.do | 6 ++++++ cpu/src/core_top.vhd | 21 +++++++++++++++++++++ cpu/src/execute_stage_b.vhd | 6 ++++++ cpu/src/extension.vhd | 2 +- cpu/src/extension_pkg.vhd | 26 +++++++++++++++++++++++--- cpu/src/pipeline_tb.vhd | 23 +++++++++++++++++++++++ cpu/src/writeback_stage_b.vhd | 23 ++++++++++++----------- 8 files changed, 96 insertions(+), 15 deletions(-) diff --git a/cpu/sim/testcore.do b/cpu/sim/testcore.do index e16bb85..4113490 100644 --- a/cpu/sim/testcore.do +++ b/cpu/sim/testcore.do @@ -32,6 +32,10 @@ vcom -work work ../src/alu_b.vhd vcom -work work ../src/gpm.vhd vcom -work work ../src/gpm_b.vhd +vcom -work work ../src/extension_pkg.vhd +vcom -work work ../src/extension.vhd +vcom -work work ../src/extension_b.vhd + vcom -work work ../src/execute_stage.vhd vcom -work work ../src/execute_stage_b.vhd diff --git a/cpu/sim/testcore1.do b/cpu/sim/testcore1.do index e32ebbc..c9d6b2b 100644 --- a/cpu/sim/testcore1.do +++ b/cpu/sim/testcore1.do @@ -32,6 +32,10 @@ vcom -work work ../src/alu_b.vhd vcom -work work ../src/gpm.vhd vcom -work work ../src/gpm_b.vhd +vcom -work work ../src/extension_pkg.vhd +vcom -work work ../src/extension.vhd +vcom -work work ../src/extension_b.vhd + vcom -work work ../src/execute_stage.vhd vcom -work work ../src/execute_stage_b.vhd @@ -107,4 +111,6 @@ add wave -group writebackstageregister -radix hexadecimal /pipeline_tb/writebac add wave -group writebackstageregister -radix hexadecimal /pipeline_tb/writeback_st/reg_addr add wave -group writebackstageregister -radix hexadecimal /pipeline_tb/writeback_st/regfile_val + + run 5000 ns diff --git a/cpu/src/core_top.vhd b/cpu/src/core_top.vhd index 58a2377..80a87b5 100644 --- a/cpu/src/core_top.vhd +++ b/cpu/src/core_top.vhd @@ -47,6 +47,12 @@ architecture behav of core_top is signal hword_pin : std_logic; signal byte_s_pin : std_logic; signal nop_pin : std_logic; + -- extension signals + signal ext_gpmp : extmod_rec; + signal pointer : pointer_count; + signal dec_in,p_en : std_logic; + signal data_out : gp_register_t; + signal pointer_val : gp_register_t; begin @@ -110,6 +116,21 @@ begin wr_en_pin, dmem_pin, dmem_wr_en_pin, hword_pin, byte_s_pin, reg_wr_data_pin, reg_we_pin, reg_w_addr_pin, jump_result_pin, alu_jump_bit_pin); + + gpmp_inst : extension + generic map ('0') + port map ( + sys_clk, + sys_reset, + ext_gpmp, + pointer, + dec_in, + p_en, + data_out, + pointer_val + + ); + --init : process(all) diff --git a/cpu/src/execute_stage_b.vhd b/cpu/src/execute_stage_b.vhd index 550c1e9..16e1334 100644 --- a/cpu/src/execute_stage_b.vhd +++ b/cpu/src/execute_stage_b.vhd @@ -5,6 +5,7 @@ use IEEE.numeric_std.all; use work.common_pkg.all; use work.alu_pkg.all; use work.gpm_pkg.all; +use work.extension_pkg.all; architecture behav of execute_stage is @@ -15,6 +16,7 @@ signal left_operand, right_operand : gp_register_t; signal alu_state, alu_nxt : alu_result_rec; signal psw : status_rec; + type exec_internal is record result : gp_register_t; res_addr : gp_addr_t; @@ -35,6 +37,10 @@ gpm_inst : gpm generic map(RESET_VALUE) port map(clk,reset,alu_nxt,psw); + + + + syn: process(clk, reset) begin diff --git a/cpu/src/extension.vhd b/cpu/src/extension.vhd index 9409409..a5e7a49 100644 --- a/cpu/src/extension.vhd +++ b/cpu/src/extension.vhd @@ -9,7 +9,7 @@ entity extension is generic ( -- active reset value - RESET_VALUE : std_logic; + RESET_VALUE : std_logic ); port( --System inputs diff --git a/cpu/src/extension_pkg.vhd b/cpu/src/extension_pkg.vhd index af6ae70..cf50baf 100644 --- a/cpu/src/extension_pkg.vhd +++ b/cpu/src/extension_pkg.vhd @@ -33,9 +33,29 @@ constant EXT_EXTMEM_ADDR: ext_addrid_t := x"FFFFFFB"; constant EXT_TIMER_ADDR: ext_addrid_t := x"FFFFFFC"; constant EXT_AC97_ADDR: ext_addrid_t := x"FFFFFFD"; constant EXT_UART_ADDR: ext_addrid_t := x"FFFFFFE"; -constant EXT_GPM_ADDR: ext_addrid_t := x"FFFFFFF"; - - +constant EXT_GPMP_ADDR: ext_addrid_t := x"FFFFFFF"; + + component extension is + --some modules won't need all inputs/outputs + generic ( + -- active reset value + RESET_VALUE : std_logic + ); + port( + --System inputs + clk : in std_logic; + reset : in std_logic; + -- Input + ext_reg : in extmod_rec; + pointer : in pointer_count; + dec_inc : in std_logic; + p_en : in std_logic; + -- Ouput + data_out : out gp_register_t; + pointer_val : out gp_register_t + + ); + end component extension; diff --git a/cpu/src/pipeline_tb.vhd b/cpu/src/pipeline_tb.vhd index d51196b..ff8fd60 100644 --- a/cpu/src/pipeline_tb.vhd +++ b/cpu/src/pipeline_tb.vhd @@ -4,6 +4,7 @@ use IEEE.numeric_std.all; use work.common_pkg.all; use work.core_pkg.all; +use work.extension_pkg.all; ------------------------------------------------------------------------------- -- ENTITY ------------------------------------------------------------------------------- @@ -48,6 +49,12 @@ architecture behavior of pipeline_tb is signal hword_pin : std_logic; signal byte_s_pin : std_logic; signal nop_pin : std_logic; + -- extension signals + signal ext_gpmp : extmod_rec; + signal pointer : pointer_count; + signal dec_in,p_en : std_logic; + signal data_out : gp_register_t; + signal pointer_val : gp_register_t; begin @@ -126,6 +133,22 @@ begin reg_wr_data_pin, reg_we_pin, reg_w_addr_pin, jump_result_pin, alu_jump_bit_pin); + gpmp_inst : extension + generic map ('0') + port map ( + sys_clk_pin, + sys_res_n_pin, + ext_gpmp, + pointer, + dec_in, + p_en, + data_out, + pointer_val + + ); + + + nop_pin <= (alu_jump_bit_pin xor brpr_pin); ------------------------------------------------------------------------------- diff --git a/cpu/src/writeback_stage_b.vhd b/cpu/src/writeback_stage_b.vhd index 9506813..91373df 100644 --- a/cpu/src/writeback_stage_b.vhd +++ b/cpu/src/writeback_stage_b.vhd @@ -13,7 +13,8 @@ architecture behav of writeback_stage is signal data_ram_read : word_t; signal wb_reg, wb_reg_nxt : writeback_rec; -signal ext_uart,ext_timer,ext_gpm : extmod_rec; + +signal ext_uart,ext_timer,ext_gpmp : extmod_rec; @@ -35,7 +36,7 @@ begin data_ram_read ); - + syn: process(clk, reset) begin @@ -157,16 +158,16 @@ begin when "11" => ext_timer.byte_en <= "1000"; when others => null; end case; - when EXT_GPM_ADDR => - ext_gpm.sel <='1'; - ext_gpm.wr_en <= wb_reg_nxt.dmem_write_en; - ext_gpm.data <= ram_data; - ext_gpm.addr <= wb_reg_nxt.address(wb_reg_nxt.address'high downto BYTEADDR); + when EXT_GPMP_ADDR => + ext_gpmp.sel <='1'; + ext_gpmp.wr_en <= wb_reg_nxt.dmem_write_en; + ext_gpmp.data <= ram_data; + ext_gpmp.addr <= wb_reg_nxt.address(wb_reg_nxt.address'high downto BYTEADDR); case wb_reg.address(1 downto 0) is - when "00" => ext_gpm.byte_en <= "0001"; - when "01" => ext_gpm.byte_en <= "0010"; - when "10" => ext_gpm.byte_en <= "0100"; - when "11" => ext_gpm.byte_en <= "1000"; + when "00" => ext_gpmp.byte_en <= "0001"; + when "01" => ext_gpmp.byte_en <= "0010"; + when "10" => ext_gpmp.byte_en <= "0100"; + when "11" => ext_gpmp.byte_en <= "1000"; when others => null; end case; -- hier kann man weiter extensions adden :) Konstanten sind im extension pkg definiert -- 2.25.1