⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 armiu_drstg.vhd

📁 arm vhdl rtl code,can synthesis
💻 VHD
📖 第 1 页 / 共 4 页
字号:
-- $(lic)
-- $(help_generic)
-- $(help_local)

library ieee;
use ieee.std_logic_1164.all;
use work.int.all;
use work.memdef.all;
use work.armdecode.all;
use work.armshiefter.all;
use work.armpmodel.all;
use work.armdebug.all;
use work.armpctrl.all;
use work.armcmd.all;
use work.armldst.all;
use work.armcmd_comp.all;
use work.arm_comp.all;

entity armiu_drstg is
  port ( 
    rst     : in  std_logic;
    clk     : in  std_logic;
    i       : in  armiu_drstg_typ_in;
    o       : out armiu_drstg_typ_out
    );
end armiu_drstg;

architecture rtl of armiu_drstg is

  type armiu_drstg_tmp_type is record
    o       : armiu_drstg_typ_out;
    cmdali  : armcmd_al_typ_in;
    cmdsri  : armcmd_sr_typ_in;
    cmdldi  : armcmd_ld_typ_in;
    cmdsti  : armcmd_st_typ_in;
    cmdlmi  : armcmd_lm_typ_in;
    cmdsmi  : armcmd_sm_typ_in;
    cmdswi  : armcmd_sw_typ_in;
    cmdcri  : armcmd_cr_typ_in;
    cmdcli  : armcmd_cl_typ_in;
    cmdcsi  : armcmd_cs_typ_in;
    cmdbli  : armcmd_bl_typ_in;
    
    ctrli : acm_ctrlin;
    ctrlo : acm_ctrlout;
    pctrl, pctrl_bypass : apc_pctrl;
    
    commit : std_logic;
    insn : std_logic_vector(31 downto 0);
    trap   : apm_trapctrl;
    nextmicro, mem : std_logic;
    micro : apc_micro;
    am : ade_amode;
    
    r1_src, r2_src : acm_regsrc; 
    rd_src : acm_rdsrc;

    rn, rm, rd, rs, rlink, rpc : std_logic_vector(APM_REG_U downto APM_REG_D);
    nr : std_logic_vector(APM_REG_U downto APM_REG_D);
    nr_i : integer;
    nr_c : std_logic;
    startoff, endoff, incval : std_logic_vector(31 downto 0);
    m1, m2, md: std_logic_vector(APM_REG_U downto APM_REG_D);
    m1_valid, m2_valid: std_logic;
    rr1, rr2, rrd: std_logic_vector(APM_RREAL_U downto APM_RREAL_D);
    rmode : std_logic_vector(4 downto 0);
    
  end record;
  type armiu_drstg_reg_type is record
    cnt : std_logic_vector(ACM_CNT_SZ-1 downto 0);
    reglist : std_logic_vector(APM_REGLIST_SZ-1 downto 0);
  end record;
  type armiu_drstg_dbg_type is record
     dummy : std_logic;
     -- pragma translate_off
     dbg : armiu_drstg_tmp_type;
     dbgpmode : adg_dbgpmode;
     dbgrmode : adg_dbgpmode;
     -- pragma translate_on
  end record;
  signal r, c       : armiu_drstg_reg_type;
  signal rdbg, cdbg : armiu_drstg_dbg_type;

  signal cmdali : armcmd_al_typ_in;
  signal cmdalo : armcmd_al_typ_out;
  signal cmdsri : armcmd_sr_typ_in;
  signal cmdsro : armcmd_sr_typ_out;
  signal cmdldi : armcmd_ld_typ_in;
  signal cmdldo : armcmd_ld_typ_out;
  signal cmdsti : armcmd_st_typ_in;
  signal cmdsto : armcmd_st_typ_out;
  signal cmdlmi : armcmd_lm_typ_in;
  signal cmdlmo : armcmd_lm_typ_out;
  signal cmdsmi : armcmd_sm_typ_in;
  signal cmdsmo : armcmd_sm_typ_out;
  signal cmdswi : armcmd_sw_typ_in;
  signal cmdswo : armcmd_sw_typ_out;
  signal cmdcri : armcmd_cr_typ_in;
  signal cmdcro : armcmd_cr_typ_out;
  signal cmdcli : armcmd_cl_typ_in;
  signal cmdcso : armcmd_cs_typ_out;
  signal cmdcsi : armcmd_cs_typ_in;
  signal cmdclo : armcmd_cl_typ_out;
  signal cmdbli : armcmd_bl_typ_in;
  signal cmdblo : armcmd_bl_typ_out;

begin  
    
  p0: process (clk, rst, r, i,
               cmdalo, cmdsro, cmdldo, cmdsto, cmdlmo, cmdsmo, cmdswo,
               cmdcro, cmdclo, cmdcso, cmdblo )
    variable v    : armiu_drstg_reg_type;
    variable t    : armiu_drstg_tmp_type;
    variable vdbg : armiu_drstg_dbg_type;
  begin 
    
    -- $(init(t:armiu_drstg_tmp_type))
    -- $(init-automatically-generated-for-synthesis:(t:armiu_drstg_tmp_type))
    t.o.nextinsn_v := '0';
    t.o.toRR_micro_v.pctrl.insn.pc_8 := (others => '0');
    t.o.toRR_micro_v.pctrl.insn.insn := (others => '0');
    t.o.toRR_micro_v.pctrl.insn.insntyp := ade_typmem;
    t.o.toRR_micro_v.pctrl.insn.decinsn := type_arm_invalid;
    t.o.toRR_micro_v.pctrl.insn.am.DAPRAM_typ := ade_DAPRAM_simm;
    t.o.toRR_micro_v.pctrl.insn.am.LDSTAM_typ := ade_LDSTAMxLSV4AM_imm;
    t.o.toRR_micro_v.pctrl.insn.am.LSV4AM_typ := ade_LDSTAMxLSV4AM_imm;
    t.o.toRR_micro_v.pctrl.insn.am.LDSTAMxLSV4AM_pos := ade_pre;
    t.o.toRR_micro_v.pctrl.insn.am.DAPRAMxLDSTAM_sdir := ash_sdir_snone;
    t.o.toRR_micro_v.pctrl.insn.am.LDSTAMxLSV4AM_uacc := '0';
    t.o.toRR_micro_v.pctrl.insn.am.LDSTAMxLSV4AM_wb := '0';
    t.o.toRR_micro_v.pctrl.insn.valid := '0';
    t.o.toRR_micro_v.pctrl.insn.id := (others => '0');
    t.o.toRR_micro_v.pctrl.valid := '0';
    t.o.toRR_micro_v.pctrl.rr.dummy := '0';
    t.o.toRR_micro_v.pctrl.rs.rsop_op1_src := apc_opsrc_through;
    t.o.toRR_micro_v.pctrl.rs.rsop_op2_src := apc_opsrc_through;
    t.o.toRR_micro_v.pctrl.rs.rsop_buf1_src := apc_bufsrc_none;
    t.o.toRR_micro_v.pctrl.rs.rsop_buf2_src := apc_bufsrc_none;
    t.o.toRR_micro_v.pctrl.rs.rsop_styp := ash_styp_none;
    t.o.toRR_micro_v.pctrl.rs.rsop_sdir := ash_sdir_snone;
    t.o.toRR_micro_v.pctrl.rs.rs_shieftcarryout := '0';
    t.o.toRR_micro_v.pctrl.ex.exop_aluop := (others => '0');
    t.o.toRR_micro_v.pctrl.ex.exop_data_src := apc_datasrc_aluout;
    t.o.toRR_micro_v.pctrl.ex.exop_buf_src := apc_exbufsrc_none;
    t.o.toRR_micro_v.pctrl.ex.exop_setcpsr := '0';
    t.o.toRR_micro_v.pctrl.ex.ex_cpsr.ex.n := '0';
    t.o.toRR_micro_v.pctrl.ex.ex_cpsr.ex.z := '0';
    t.o.toRR_micro_v.pctrl.ex.ex_cpsr.ex.c := '0';
    t.o.toRR_micro_v.pctrl.ex.ex_cpsr.ex.v := '0';
    t.o.toRR_micro_v.pctrl.ex.ex_cpsr.wr.i := '0';
    t.o.toRR_micro_v.pctrl.ex.ex_cpsr.wr.f := '0';
    t.o.toRR_micro_v.pctrl.ex.ex_cpsr.wr.t := '0';
    t.o.toRR_micro_v.pctrl.ex.ex_cpsr.wr.mode := (others => '0');
    t.o.toRR_micro_v.pctrl.dm.dummy := '0';
    t.o.toRR_micro_v.pctrl.me.meop_enable := '0';
    t.o.toRR_micro_v.pctrl.me.meop_param.size := lmd_word;
    t.o.toRR_micro_v.pctrl.me.meop_param.read := '0';
    t.o.toRR_micro_v.pctrl.me.meop_param.lock := '0';
    t.o.toRR_micro_v.pctrl.me.meop_param.writedata := '0';
    t.o.toRR_micro_v.pctrl.me.meop_param.addrin := '0';
    t.o.toRR_micro_v.pctrl.me.meop_param.signed := '0';
    t.o.toRR_micro_v.pctrl.me.mexc := '0';
    t.o.toRR_micro_v.pctrl.wr.wrop_rd := (others => '0');
    t.o.toRR_micro_v.pctrl.wr.wrop_rdvalid := '0';
    t.o.toRR_micro_v.pctrl.wr.wrop_setspsr := '0';
    t.o.toRR_micro_v.pctrl.wr.wrop_trap.traptype := apm_trap_reset;
    t.o.toRR_micro_v.pctrl.wr.wrop_trap.trap := '0';
    t.o.toRR_micro_v.pctrl.data1 := (others => '0');
    t.o.toRR_micro_v.pctrl.data2 := (others => '0');
    t.o.toRR_micro_v.valid := '0';
    t.o.toRR_micro_v.r1 := (others => '0');
    t.o.toRR_micro_v.r2 := (others => '0');
    t.o.toRR_micro_v.r1_valid := '0';
    t.o.toRR_micro_v.r2_valid := '0';
    t.o.id := (others => '0');
    t.cmdali.ctrli.cnt := (others => '0');
    t.cmdali.ctrli.insn.pc_8 := (others => '0');
    t.cmdali.ctrli.insn.insn := (others => '0');
    t.cmdali.ctrli.insn.insntyp := ade_typmem;
    t.cmdali.ctrli.insn.decinsn := type_arm_invalid;
    t.cmdali.ctrli.insn.am.DAPRAM_typ := ade_DAPRAM_simm;
    t.cmdali.ctrli.insn.am.LDSTAM_typ := ade_LDSTAMxLSV4AM_imm;
    t.cmdali.ctrli.insn.am.LSV4AM_typ := ade_LDSTAMxLSV4AM_imm;
    t.cmdali.ctrli.insn.am.LDSTAMxLSV4AM_pos := ade_pre;
    t.cmdali.ctrli.insn.am.DAPRAMxLDSTAM_sdir := ash_sdir_snone;
    t.cmdali.ctrli.insn.am.LDSTAMxLSV4AM_uacc := '0';
    t.cmdali.ctrli.insn.am.LDSTAMxLSV4AM_wb := '0';
    t.cmdali.ctrli.insn.valid := '0';
    t.cmdali.ctrli.insn.id := (others => '0');
    t.cmdali.ctrli.ctrlo.nextinsn := '0';
    t.cmdali.ctrli.ctrlo.nextcnt := '0';
    t.cmdali.ctrli.ctrlo.hold := '0';
    t.cmdsri.ctrli.cnt := (others => '0');
    t.cmdsri.ctrli.insn.pc_8 := (others => '0');
    t.cmdsri.ctrli.insn.insn := (others => '0');
    t.cmdsri.ctrli.insn.insntyp := ade_typmem;
    t.cmdsri.ctrli.insn.decinsn := type_arm_invalid;
    t.cmdsri.ctrli.insn.am.DAPRAM_typ := ade_DAPRAM_simm;
    t.cmdsri.ctrli.insn.am.LDSTAM_typ := ade_LDSTAMxLSV4AM_imm;
    t.cmdsri.ctrli.insn.am.LSV4AM_typ := ade_LDSTAMxLSV4AM_imm;
    t.cmdsri.ctrli.insn.am.LDSTAMxLSV4AM_pos := ade_pre;
    t.cmdsri.ctrli.insn.am.DAPRAMxLDSTAM_sdir := ash_sdir_snone;
    t.cmdsri.ctrli.insn.am.LDSTAMxLSV4AM_uacc := '0';
    t.cmdsri.ctrli.insn.am.LDSTAMxLSV4AM_wb := '0';
    t.cmdsri.ctrli.insn.valid := '0';
    t.cmdsri.ctrli.insn.id := (others => '0');
    t.cmdsri.ctrli.ctrlo.nextinsn := '0';
    t.cmdsri.ctrli.ctrlo.nextcnt := '0';
    t.cmdsri.ctrli.ctrlo.hold := '0';
    t.cmdsri.deid := (others => '0');
    t.cmdsri.exid := (others => '0');
    t.cmdsri.exvalid := '0';
    t.cmdsri.wrid := (others => '0');
    t.cmdsri.wrvalid := '0';
    t.cmdldi.ctrli.cnt := (others => '0');
    t.cmdldi.ctrli.insn.pc_8 := (others => '0');
    t.cmdldi.ctrli.insn.insn := (others => '0');
    t.cmdldi.ctrli.insn.insntyp := ade_typmem;
    t.cmdldi.ctrli.insn.decinsn := type_arm_invalid;
    t.cmdldi.ctrli.insn.am.DAPRAM_typ := ade_DAPRAM_simm;
    t.cmdldi.ctrli.insn.am.LDSTAM_typ := ade_LDSTAMxLSV4AM_imm;
    t.cmdldi.ctrli.insn.am.LSV4AM_typ := ade_LDSTAMxLSV4AM_imm;
    t.cmdldi.ctrli.insn.am.LDSTAMxLSV4AM_pos := ade_pre;
    t.cmdldi.ctrli.insn.am.DAPRAMxLDSTAM_sdir := ash_sdir_snone;
    t.cmdldi.ctrli.insn.am.LDSTAMxLSV4AM_uacc := '0';
    t.cmdldi.ctrli.insn.am.LDSTAMxLSV4AM_wb := '0';
    t.cmdldi.ctrli.insn.valid := '0';
    t.cmdldi.ctrli.insn.id := (others => '0');
    t.cmdldi.ctrli.ctrlo.nextinsn := '0';
    t.cmdldi.ctrli.ctrlo.nextcnt := '0';
    t.cmdldi.ctrli.ctrlo.hold := '0';
    t.cmdldi.ctrlmemo.data1 := (others => '0');
    t.cmdldi.ctrlmemo.data2 := (others => '0');
    t.cmdldi.ctrlmemo.r1_src := acm_none;
    t.cmdldi.ctrlmemo.r2_src := acm_none;
    t.cmdldi.ctrlmemo.rd_src := acm_rdnone;
    t.cmdldi.ctrlmemo.rsop_op1_src := apc_opsrc_through;
    t.cmdldi.ctrlmemo.rsop_op2_src := apc_opsrc_through;
    t.cmdldi.ctrlmemo.rsop_buf1_src := apc_bufsrc_none;
    t.cmdldi.ctrlmemo.rsop_buf2_src := apc_bufsrc_none;
    t.cmdldi.ctrlmemo.exop_data_src := apc_datasrc_aluout;
    t.cmdldi.ctrlmemo.exop_buf_src := apc_exbufsrc_none;
    t.cmdldi.ctrlmemo.meop_param.size := lmd_word;
    t.cmdldi.ctrlmemo.meop_param.read := '0';
    t.cmdldi.ctrlmemo.meop_param.lock := '0';
    t.cmdldi.ctrlmemo.meop_param.writedata := '0';
    t.cmdldi.ctrlmemo.meop_param.addrin := '0';
    t.cmdldi.ctrlmemo.meop_param.signed := '0';
    t.cmdldi.ctrlmemo.meop_enable := '0';
    t.cmdsti.ctrli.cnt := (others => '0');
    t.cmdsti.ctrli.insn.pc_8 := (others => '0');
    t.cmdsti.ctrli.insn.insn := (others => '0');
    t.cmdsti.ctrli.insn.insntyp := ade_typmem;
    t.cmdsti.ctrli.insn.decinsn := type_arm_invalid;
    t.cmdsti.ctrli.insn.am.DAPRAM_typ := ade_DAPRAM_simm;
    t.cmdsti.ctrli.insn.am.LDSTAM_typ := ade_LDSTAMxLSV4AM_imm;
    t.cmdsti.ctrli.insn.am.LSV4AM_typ := ade_LDSTAMxLSV4AM_imm;
    t.cmdsti.ctrli.insn.am.LDSTAMxLSV4AM_pos := ade_pre;
    t.cmdsti.ctrli.insn.am.DAPRAMxLDSTAM_sdir := ash_sdir_snone;
    t.cmdsti.ctrli.insn.am.LDSTAMxLSV4AM_uacc := '0';
    t.cmdsti.ctrli.insn.am.LDSTAMxLSV4AM_wb := '0';
    t.cmdsti.ctrli.insn.valid := '0';
    t.cmdsti.ctrli.insn.id := (others => '0');
    t.cmdsti.ctrli.ctrlo.nextinsn := '0';
    t.cmdsti.ctrli.ctrlo.nextcnt := '0';
    t.cmdsti.ctrli.ctrlo.hold := '0';
    t.cmdsti.ctrlmemo.data1 := (others => '0');
    t.cmdsti.ctrlmemo.data2 := (others => '0');
    t.cmdsti.ctrlmemo.r1_src := acm_none;
    t.cmdsti.ctrlmemo.r2_src := acm_none;
    t.cmdsti.ctrlmemo.rd_src := acm_rdnone;
    t.cmdsti.ctrlmemo.rsop_op1_src := apc_opsrc_through;
    t.cmdsti.ctrlmemo.rsop_op2_src := apc_opsrc_through;
    t.cmdsti.ctrlmemo.rsop_buf1_src := apc_bufsrc_none;
    t.cmdsti.ctrlmemo.rsop_buf2_src := apc_bufsrc_none;
    t.cmdsti.ctrlmemo.exop_data_src := apc_datasrc_aluout;
    t.cmdsti.ctrlmemo.exop_buf_src := apc_exbufsrc_none;
    t.cmdsti.ctrlmemo.meop_param.size := lmd_word;
    t.cmdsti.ctrlmemo.meop_param.read := '0';
    t.cmdsti.ctrlmemo.meop_param.lock := '0';
    t.cmdsti.ctrlmemo.meop_param.writedata := '0';
    t.cmdsti.ctrlmemo.meop_param.addrin := '0';
    t.cmdsti.ctrlmemo.meop_param.signed := '0';
    t.cmdsti.ctrlmemo.meop_enable := '0';
    t.cmdlmi.ctrli.cnt := (others => '0');
    t.cmdlmi.ctrli.insn.pc_8 := (others => '0');
    t.cmdlmi.ctrli.insn.insn := (others => '0');
    t.cmdlmi.ctrli.insn.insntyp := ade_typmem;
    t.cmdlmi.ctrli.insn.decinsn := type_arm_invalid;
    t.cmdlmi.ctrli.insn.am.DAPRAM_typ := ade_DAPRAM_simm;
    t.cmdlmi.ctrli.insn.am.LDSTAM_typ := ade_LDSTAMxLSV4AM_imm;
    t.cmdlmi.ctrli.insn.am.LSV4AM_typ := ade_LDSTAMxLSV4AM_imm;
    t.cmdlmi.ctrli.insn.am.LDSTAMxLSV4AM_pos := ade_pre;
    t.cmdlmi.ctrli.insn.am.DAPRAMxLDSTAM_sdir := ash_sdir_snone;
    t.cmdlmi.ctrli.insn.am.LDSTAMxLSV4AM_uacc := '0';
    t.cmdlmi.ctrli.insn.am.LDSTAMxLSV4AM_wb := '0';
    t.cmdlmi.ctrli.insn.valid := '0';
    t.cmdlmi.ctrli.insn.id := (others => '0');
    t.cmdlmi.ctrli.ctrlo.nextinsn := '0';
    t.cmdlmi.ctrli.ctrlo.nextcnt := '0';
    t.cmdlmi.ctrli.ctrlo.hold := '0';
    t.cmdlmi.ctrlmulti.ctrlmemo.data1 := (others => '0');
    t.cmdlmi.ctrlmulti.ctrlmemo.data2 := (others => '0');
    t.cmdlmi.ctrlmulti.ctrlmemo.r1_src := acm_none;
    t.cmdlmi.ctrlmulti.ctrlmemo.r2_src := acm_none;
    t.cmdlmi.ctrlmulti.ctrlmemo.rd_src := acm_rdnone;
    t.cmdlmi.ctrlmulti.ctrlmemo.rsop_op1_src := apc_opsrc_through;
    t.cmdlmi.ctrlmulti.ctrlmemo.rsop_op2_src := apc_opsrc_through;
    t.cmdlmi.ctrlmulti.ctrlmemo.rsop_buf1_src := apc_bufsrc_none;
    t.cmdlmi.ctrlmulti.ctrlmemo.rsop_buf2_src := apc_bufsrc_none;
    t.cmdlmi.ctrlmulti.ctrlmemo.exop_data_src := apc_datasrc_aluout;
    t.cmdlmi.ctrlmulti.ctrlmemo.exop_buf_src := apc_exbufsrc_none;
    t.cmdlmi.ctrlmulti.ctrlmemo.meop_param.size := lmd_word;
    t.cmdlmi.ctrlmulti.ctrlmemo.meop_param.read := '0';
    t.cmdlmi.ctrlmulti.ctrlmemo.meop_param.lock := '0';
    t.cmdlmi.ctrlmulti.ctrlmemo.meop_param.writedata := '0';
    t.cmdlmi.ctrlmulti.ctrlmemo.meop_param.addrin := '0';
    t.cmdlmi.ctrlmulti.ctrlmemo.meop_param.signed := '0';
    t.cmdlmi.ctrlmulti.ctrlmemo.meop_enable := '0';
    t.cmdlmi.ctrlmulti.ival := (others => '0');
    t.cmdlmi.ctrlmulti.soff := (others => '0');
    t.cmdlmi.ctrlmulti.eoff := (others => '0');
    t.cmdlmi.ctrlmulti.reglist := (others => '0');
    t.cmdlmi.ctrlmulti.mem := '0';
    t.cmdlmi.ctrlmulti.dabort := '0';
    t.cmdsmi.ctrli.cnt := (others => '0');
    t.cmdsmi.ctrli.insn.pc_8 := (others => '0');
    t.cmdsmi.ctrli.insn.insn := (others => '0');

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -