OpenCores
URL https://opencores.org/ocsvn/core_arm/core_arm/trunk

Subversion Repositories core_arm

[/] [core_arm/] [trunk/] [vhdl/] [arm/] [libs/] [armctrl.vhd] - Blame information for rev 4

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 tarookumic
library ieee;
2
use ieee.std_logic_1164.all;
3
use work.armpmodel.all;
4
use work.armdecode.all;
5
 
6
-- PREFIX: act_xxx
7
package armctrl is
8
 
9
-- Check insn condition
10
function act_checkcond(
11
  cpsr  : in  apm_cpsr;
12
  cond  : in std_logic_vector(3 downto 0)
13
) return std_logic;
14
 
15
 
16
end armctrl;
17
 
18
package body armctrl is
19
 
20
function act_checkcond(
21
  cpsr  : in  apm_cpsr;
22
  cond  : in std_logic_vector(3 downto 0)
23
) return std_logic is
24
variable tmp    : std_logic;
25
begin
26
  tmp := '0';
27
  case cond is
28
    when ADE_COND_EQ => tmp := cpsr.ex.z;
29
    when ADE_COND_NE => tmp := not cpsr.ex.z;
30
    when ADE_COND_CS => tmp := cpsr.ex.c;
31
    when ADE_COND_CC => tmp := not cpsr.ex.c;
32
    when ADE_COND_MI => tmp := cpsr.ex.n;
33
    when ADE_COND_PL => tmp := not cpsr.ex.n;
34
    when ADE_COND_VS => tmp := cpsr.ex.v;
35
    when ADE_COND_VC => tmp := not cpsr.ex.v;
36
    when ADE_COND_HI => tmp := cpsr.ex.c and (not cpsr.ex.z);
37
    when ADE_COND_LS => tmp := (not cpsr.ex.c) and cpsr.ex.z;
38
    when ADE_COND_GE => tmp := not (cpsr.ex.n xor cpsr.ex.v);
39
    when ADE_COND_LT => tmp := (cpsr.ex.n xor cpsr.ex.v);
40
    when ADE_COND_GT => tmp := (not cpsr.ex.z) and not (cpsr.ex.n xor cpsr.ex.v);
41
    when ADE_COND_LE => tmp := cpsr.ex.z or (cpsr.ex.n xor cpsr.ex.v);
42
    when ADE_COND_AL => tmp := '1';
43
    when ADE_COND_NV => tmp := '0';
44
    when others      => null;
45
  end case;
46
  return tmp;
47
end;
48
 
49
end armctrl;

powered by: WebSVN 2.1.0

© copyright 1999-2025 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.