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

📄 armiu_drstg.vhd

📁 arm vhdl rtl code,can synthesis
💻 VHD
📖 第 1 页 / 共 4 页
字号:
    t.micro.pctrl.rs.rsop_sdir := ash_sdir_snone;
    t.micro.pctrl.rs.rs_shieftcarryout := '0';
    t.micro.pctrl.ex.exop_aluop := (others => '0');
    t.micro.pctrl.ex.exop_data_src := apc_datasrc_aluout;
    t.micro.pctrl.ex.exop_buf_src := apc_exbufsrc_none;
    t.micro.pctrl.ex.exop_setcpsr := '0';
    t.micro.pctrl.ex.ex_cpsr.ex.n := '0';
    t.micro.pctrl.ex.ex_cpsr.ex.z := '0';
    t.micro.pctrl.ex.ex_cpsr.ex.c := '0';
    t.micro.pctrl.ex.ex_cpsr.ex.v := '0';
    t.micro.pctrl.ex.ex_cpsr.wr.i := '0';
    t.micro.pctrl.ex.ex_cpsr.wr.f := '0';
    t.micro.pctrl.ex.ex_cpsr.wr.t := '0';
    t.micro.pctrl.ex.ex_cpsr.wr.mode := (others => '0');
    t.micro.pctrl.dm.dummy := '0';
    t.micro.pctrl.me.meop_enable := '0';
    t.micro.pctrl.me.meop_param.size := lmd_word;
    t.micro.pctrl.me.meop_param.read := '0';
    t.micro.pctrl.me.meop_param.lock := '0';
    t.micro.pctrl.me.meop_param.writedata := '0';
    t.micro.pctrl.me.meop_param.addrin := '0';
    t.micro.pctrl.me.meop_param.signed := '0';
    t.micro.pctrl.me.mexc := '0';
    t.micro.pctrl.wr.wrop_rd := (others => '0');
    t.micro.pctrl.wr.wrop_rdvalid := '0';
    t.micro.pctrl.wr.wrop_setspsr := '0';
    t.micro.pctrl.wr.wrop_trap.traptype := apm_trap_reset;
    t.micro.pctrl.wr.wrop_trap.trap := '0';
    t.micro.pctrl.data1 := (others => '0');
    t.micro.pctrl.data2 := (others => '0');
    t.micro.valid := '0';
    t.micro.r1 := (others => '0');
    t.micro.r2 := (others => '0');
    t.micro.r1_valid := '0';
    t.micro.r2_valid := '0';
    t.am.DAPRAM_typ := ade_DAPRAM_simm;
    t.am.LDSTAM_typ := ade_LDSTAMxLSV4AM_imm;
    t.am.LSV4AM_typ := ade_LDSTAMxLSV4AM_imm;
    t.am.LDSTAMxLSV4AM_pos := ade_pre;
    t.am.DAPRAMxLDSTAM_sdir := ash_sdir_snone;
    t.am.LDSTAMxLSV4AM_uacc := '0';
    t.am.LDSTAMxLSV4AM_wb := '0';
    t.r1_src := acm_none;
    t.r2_src := acm_none;
    t.rd_src := acm_rdnone;
    t.rn := (others => '0');
    t.rm := (others => '0');
    t.rd := (others => '0');
    t.rs := (others => '0');
    t.rlink := (others => '0');
    t.rpc := (others => '0');
    t.nr := (others => '0');
    t.nr_i := 0;
    t.nr_c := '0';
    t.startoff := (others => '0');
    t.endoff := (others => '0');
    t.incval := (others => '0');
    t.m1 := (others => '0');
    t.m2 := (others => '0');
    t.md := (others => '0');
    t.m1_valid := '0';
    t.m2_valid := '0';
    t.rr1 := (others => '0');
    t.rr2 := (others => '0');
    t.rrd := (others => '0');
    t.rmode := (others => '0');

    -- $(/init-automatically-generated-for-synthesis:(t:armiu_drstg_tmp_type))
    
    v := r;
    t.commit := not i.flush_v;

    t.insn := i.fromDE_insn_r.insn.insn;
    t.am := i.fromDE_insn_r.insn.am;
    t.rn := t.insn(ADE_RN_U downto ADE_RN_D);
    t.rm := t.insn(ADE_RM_U downto ADE_RM_D);
    t.rs := t.insn(ADE_SREG_U downto ADE_SREG_D);
    t.rd := t.insn(ADE_RD_U downto ADE_RD_D);
    t.rlink := APM_REG_LINK;
    t.r1_src    := acm_none;
    t.r2_src    := acm_none;
    t.rmode := i.pstate.fromEX_cpsr_r.wr.mode;
    t.m1 := t.rd;
    t.m2 := t.rd;
    t.md := t.rd;
    t.nr_c := '1';
    
    -- cmd lm, sm:
    t.nr := als_getnextpos(t.insn, r.reglist);
    t.nr_i := lin_convint(t.nr);

    als_offsets (t.insn, t.startoff, t.endoff, t.incval );
    
    t.mem := '0';
    if apc_is_mem(i.pstate.fromRR_pctrl_r) or
       apc_is_mem(i.pstate.fromRS_pctrl_r) or
       apc_is_mem(i.pstate.fromEX_pctrl_r) or
       apc_is_mem(i.pstate.fromDM_pctrl_r) or
       apc_is_mem(i.pstate.fromME_pctrl_r) or
       apc_is_mem(i.pstate.fromWR_pctrl_r) then
      t.mem := '1';
    end if;

    t.ctrlo.nextinsn := '1';
    t.ctrlo.nextcnt := '1';
    t.ctrlo.hold := '0';
    
    t.ctrli.cnt := r.cnt;
    t.ctrli.insn := i.fromDE_insn_r.insn;
    t.ctrli.ctrlo := t.ctrlo;

    t.pctrl.insn := i.fromDE_insn_r.insn;
    t.pctrl.ex.exop_aluop := i.fromDE_insn_r.insn.insn(ADE_OP_U downto ADE_OP_D);
    t.pctrl_bypass := t.pctrl;
    
    case i.fromDE_insn_r.insn.decinsn is
      when type_arm_invalid => 
      when type_arm_nop =>
        
-------------------------------------------------------------------------------
        
      when type_arm_mrs | 
           type_arm_msr =>

        t.cmdsri.ctrli := t.ctrli;
        t.cmdsri.deid := i.fromDE_insn_r.insn.id;
        t.cmdsri.exid := i.pstate.fromEX_pctrl_r.insn.id;
        t.cmdsri.exvalid := i.pstate.fromEX_pctrl_r.valid;
        t.cmdsri.wrid := i.pstate.fromWR_pctrl_r.insn.id;
        t.cmdsri.wrvalid := i.pstate.fromWR_pctrl_r.valid;
        t.ctrlo := cmdsro.ctrlo;
        
        t.r1_src := acm_none;
        t.r2_src := cmdsro.r2_src;
        t.rd_src := cmdsro.rd_src;
        
         -- rsstg: 
        t.pctrl.rs.rsop_op1_src := apc_opsrc_none;
        t.pctrl.rs.rsop_op2_src := cmdsro.rsop_op2_src;
        t.pctrl.rs.rsop_styp := cmdsro.rsop_styp;
        t.pctrl.rs.rsop_sdir := cmdsro.rsop_sdir;

        -- exstg:
        t.pctrl.ex.exop_setcpsr := cmdsro.exop_setcpsr;
        
-------------------------------------------------------------------------------
        
      when type_arm_bx => 
      when type_arm_mul => 
      when type_arm_mla => 
      when type_arm_sumull => 
      when type_arm_sumlal =>
        
-------------------------------------------------------------------------------
        
      when type_arm_teq |  
           type_arm_cmn |  
           type_arm_tst |  
           type_arm_cmp |
           type_arm_and |
           type_arm_sub |
           type_arm_eor |
           type_arm_rsb |
           type_arm_add |
           type_arm_orr |
           type_arm_bic |
           type_arm_mov |
           type_arm_mvn | 
           type_arm_sbc |  
           type_arm_adc |  
           type_arm_rsc =>
        
        t.cmdali.ctrli := t.ctrli;
        
        t.ctrlo := cmdalo.ctrlo;
        
        -- rrstg
        t.r1_src := cmdalo.r1_src;      -- (micro.r1)
        t.r2_src := cmdalo.r2_src;      -- (micro.r2)
        t.rd_src := cmdalo.rd_src;      -- (pctrl.wr.wrop_rd)
  
        -- rsstg:
        t.pctrl.rs.rsop_op1_src := cmdalo.rsop_op1_src; -- EXSTG operand1 source 
        t.pctrl.rs.rsop_op2_src := cmdalo.rsop_op2_src; -- EXSTG operand2 source 
        t.pctrl.rs.rsop_buf2_src := cmdalo.rsop_buf2_src; -- RSSTG buffer1 source
        t.pctrl.rs.rsop_styp := ash_styp_none;
        t.pctrl.rs.rsop_sdir := t.am.DAPRAMxLDSTAM_sdir;
        case t.am.DAPRAM_typ is
          when ade_DAPRAM_immrot => t.pctrl.rs.rsop_styp := ash_styp_immrot;
          when ade_DAPRAM_simm   => t.pctrl.rs.rsop_styp := ash_styp_simm;
          when ade_DAPRAM_sreg   => t.pctrl.rs.rsop_styp := ash_styp_sreg;
          when others => null;
        end case;
        
        t.pctrl.ex.exop_setcpsr := t.insn(ADE_SETCPSR_C);
        
-------------------------------------------------------------------------------
        
      when type_arm_str1 | type_arm_str2 | type_arm_str3 |
           type_arm_strhb =>

        t.cmdsti.ctrli := t.ctrli;
        
        t.ctrlo := cmdsto.ctrlo;
        
        acm_initmempctrl(t.pctrl, t.r1_src, t.r2_src, t.rd_src, cmdsto.ctrlmemo );
        
        case i.fromDE_insn_r.insn.decinsn is
          when type_arm_str1 |
               type_arm_str2 |
               type_arm_str3  =>
            als_LDSTAM_init_size(t.insn, t.pctrl);
          when others =>
            als_LSV4AM_init_size(t.insn, t.pctrl);
        end case;

        als_LDSTAMxLSV4AM_init_addsub(t.insn, t.pctrl);
        
        t.pctrl.rs.rsop_styp := cmdsto.rsop_styp; -- RSSTG shieft op 
        t.pctrl.rs.rsop_sdir := cmdsto.rsop_sdir; -- RSSTG shieft dir 
      
-------------------------------------------------------------------------------
        
      when type_arm_ldr1 |
           type_arm_ldrhb =>
        
        t.cmdldi.ctrli := t.ctrli;
        
        t.ctrlo := cmdldo.ctrlo;
        
        acm_initmempctrl(t.pctrl, t.r1_src, t.r2_src, t.rd_src, cmdldo.ctrlmemo );
        
        case i.fromDE_insn_r.insn.decinsn is
          when type_arm_ldr1 =>
            als_LDSTAM_init_size(t.insn, t.pctrl);
          when others =>
            als_LSV4AM_init_size(t.insn, t.pctrl);
        end case;
        
        als_LDSTAMxLSV4AM_init_addsub(t.insn, t.pctrl);
        
        t.pctrl.rs.rsop_styp := cmdldo.rsop_styp; -- RSSTG shieft op 
        t.pctrl.rs.rsop_sdir := cmdldo.rsop_sdir; -- RSSTG shieft dir 
        
-------------------------------------------------------------------------------
        
      when type_arm_stm =>

        t.cmdsmi.ctrli := t.ctrli;
        
        t.cmdsmi.ctrlmulti.ival := t.incval;
        t.cmdsmi.ctrlmulti.soff := t.startoff;
        t.cmdsmi.ctrlmulti.eoff := t.endoff;
        t.cmdsmi.ctrlmulti.reglist := r.reglist;
        t.cmdsmi.ctrlmulti.mem := t.mem;
        t.cmdsmi.ctrlmulti.dabort := i.fromWR_dabort_v;
        
        t.ctrlo := cmdsmo.ctrlo;
        
        acm_initmempctrl(t.pctrl, t.r1_src, t.r2_src, t.rd_src, cmdsmo.ctrlmemo );
        
        t.pctrl.ex.exop_aluop := ADE_OP_ADD;
        
        t.m1 := t.nr;               -- acm_local
        t.nr_c := r.cnt(0);         -- every second cycle
      
-------------------------------------------------------------------------------
        
      when type_arm_ldm =>
        
        t.cmdlmi.ctrli := t.ctrli;
        
        t.cmdlmi.ctrlmulti.ival := t.incval;
        t.cmdlmi.ctrlmulti.soff := t.startoff;
        t.cmdlmi.ctrlmulti.eoff := t.endoff;
        t.cmdlmi.ctrlmulti.reglist := r.reglist;
        t.cmdlmi.ctrlmulti.mem := t.mem;
        t.cmdlmi.ctrlmulti.dabort := i.fromWR_dabort_v;
        
        t.ctrlo := cmdlmo.ctrlo;
        
        acm_initmempctrl(t.pctrl, t.r1_src, t.r2_src, t.rd_src, cmdlmo.ctrlmemo );
        
        t.pctrl.ex.exop_aluop := ADE_OP_ADD;
        
        t.md := t.nr;                   -- acm_rdlocal
        
-------------------------------------------------------------------------------
        
      when type_arm_b =>

        t.cmdbli.ctrli := t.ctrli;
        
        t.ctrlo := cmdblo.ctrlo;

        t.r1_src := cmdblo.r1_src;
        t.r2_src := cmdblo.r2_src;
        t.rd_src := cmdblo.rd_src;
        t.pctrl.data2 := cmdblo.data2;
        
        -- rsstg:
        t.pctrl.rs.rsop_op2_src := cmdblo.rsop_op2_src;
        -- exstg:
        t.pctrl.ex.exop_aluop := ADE_OP_ADD;
        
        t.m1 := APM_REG_PC;            -- acm_local
      
-------------------------------------------------------------------------------
        
      when type_arm_swp =>
        
        t.cmdswi.ctrli := t.ctrli;

        t.ctrlo := cmdswo.ctrlo;
        
        t.pctrl.ex.exop_aluop := ADE_OP_ORR;
        
        acm_initmempctrl(t.pctrl, t.r1_src, t.r2_src, t.rd_src, cmdswo.ctrlmemo );
        
-------------------------------------------------------------------------------
        
      when type_arm_stc =>
        t.cmdcsi.ctrli := t.ctrli;

        t.cmdcsi.fromCP_busy := i.fromCPDE_busy;
        t.cmdcsi.fromCP_last := i.fromCPDE_last;
        t.ctrlo := cmdcso.ctrlo;
        

⌨️ 快捷键说明

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