instructions.vhd
来自「Actel Fusion System Management Developme」· VHDL 代码 · 共 1,177 行 · 第 1/5 页
VHD
1,177 行
when 582 => INS <= doins( iJUMP,240);
----------------------------------------------------------------------------------
-- Call testing
when 223 => INS <= doins( iINC);
when 224 => INS <= doins( iCALL, 226);
when 225 => INS <= doins( iRETURN);
when 226 => INS <= doins( iINC);
when 227 => INS <= doins( iCALL,229);
when 228 => INS <= doins( iRETURN);
when 229 => INS <= doins( iINC);
when 230 => INS <= doins( iCALL,232);
when 231 => INS <= doins( iRETURN);
when 232 => INS <= doins( iINC);
when 233 => INS <= doins( iAPBWRT,iACC,1,0); -- cause internal ADDR to switch
when 234 => INS <= doins( iRETURN);
------------------------------------------------------------------------------------
-- All tests complete
when 240 => INS <= doins( iIOWRT, iDAT, 253);
when 241 => INS <= doins( iJUMP,241);
-- If called here error
when 242 => INS <= doins( iJUMP,254);
------------------------------------------------------------------------------------
-- If called here return
when 243 => INS <= doins( iRETURN);
-- If called here return on zero
when 244 => INS <= doins( iRETURN,iIF,ZERO);
when 245 => INS <= doins( iJUMP,254);
-- If called here return on NOT zero
when 246 => INS <= doins( iRETURN,iNOTIF,ZERO);
when 247 => INS <= doins( iJUMP,254);
-- If called here return on negative
when 248 => INS <= doins( iRETURN,iIF,NEGATIVE);
when 249 => INS <= doins( iJUMP,254);
-- If called here return on NOT negative
when 250 => INS <= doins( iRETURN,iNOTIF,NEGATIVE);
when 251 => INS <= doins( iJUMP,254);
-- Error Condition
when 254 => INS <= doins( iIOWRT, iDAT, 254); -- Error Condition
when 255 => INS <= doins( iJUMP,251);
when others => INS <= doins( iNOP);
end case;
---------------------------------------------------------------------------------------------
-- Fully Configured 16 bit Operation with 256 instructions
when 12 =>
case ADDRINT is
-- Jump to test start point
when 0 => INS <= doins( iJUMP,1);
-- Simple Test of Boolean Operations
when 1 => INS <= doins( iLOAD,16#4455#); -- Set Accumalator to 55hex
when 2 => INS <= doins( iAND,16#0F0F#); -- Do some maths and jump to error if one occurs
when 3 => INS <= doins( iCMP,16#0405#);
when 4 => INS <= doins( iJUMP,iNOTIF,ZERO,254);
when 5 => INS <= doins( iOR, 16#C0A2#);
when 6 => INS <= doins( iCMP,16#C4A7#);
when 7 => INS <= doins( iJUMP,iNOTIF,ZERO,254);
when 8 => INS <= doins( iINC );
when 9 => INS <= doins( iCMP,16#C4A8#);
when 10 => INS <= doins( iJUMP,iNOTIF,ZERO,254);
when 11 => INS <= doins( iXOR, 16#0F0F#);
when 12 => INS <= doins( iCMP,16#CBA7#);
when 13 => INS <= doins( iJUMP,iNOTIF,ZERO,254);
when 14 => INS <= doins( iADD, 16#1012#);
when 15 => INS <= doins( iCMP,16#DBB9#);
when 16 => INS <= doins( iJUMP,iNOTIF,ZERO,254);
when 17 => INS <= doins( iSHL0 );
when 18 => INS <= doins( iCMP,16#b772#);
when 19 => INS <= doins( iJUMP,iNOTIF,ZERO,254);
when 20 => INS <= doins( iSHL1 );
when 21 => INS <= doins( iCMP,16#6eE5#);
when 22 => INS <= doins( iJUMP,iNOTIF,ZERO,254);
when 23 => INS <= doins( iSHR0 );
when 24 => INS <= doins( iCMP,16#3772#);
when 25 => INS <= doins( iJUMP,iNOTIF,ZERO,254);
when 26 => INS <= doins( iSHR1 );
when 27 => INS <= doins( iCMP,16#9bB9#);
when 28 => INS <= doins( iJUMP,iNOTIF,ZERO,254);
-- APB Bus Cycles, immediate data
when 30 => INS <= doins( iLOAD,16#12#);
when 31 => INS <= doins( iAPBWRT, iDAT, 0,16#10#,16#2112#);
when 32 => INS <= doins( iAPBWRT, iDAT, 0,16#11#,16#3113#);
when 33 => INS <= doins( iAPBWRT, iDAT, 1,16#12#,16#4114#);
when 34 => INS <= doins( iAPBWRT, iDAT, 1,16#13#,16#5115#);
when 35 => INS <= doins( iAPBWRT, iDAT, 2,16#14#,16#6116#);
when 36 => INS <= doins( iAPBWRT, iDAT, 2,16#15#,16#7117#);
when 37 => INS <= doins( iAPBWRT, iDAT, 3,16#10#,16#8118#);
when 38 => INS <= doins( iAPBWRT, iDAT, 3,16#11#,16#9119#);
when 39 => INS <= doins( iAPBREAD, 0,16#10#);
when 40 => INS <= doins( iCMP,16#2112#);
when 41 => INS <= doins( iJUMP,iNOTIF,ZERO,254);
when 42 => INS <= doins( iAPBREAD, 0,16#11#);
when 43 => INS <= doins( iCMP,16#3113#);
when 44 => INS <= doins( iJUMP,iNOTIF,ZERO,254);
when 45 => INS <= doins( iAPBREAD, 1,16#12#);
when 46 => INS <= doins( iCMP,16#4114#);
when 47 => INS <= doins( iJUMP,iNOTIF,ZERO,254);
when 48 => INS <= doins( iAPBREAD, 1,16#13#);
when 49 => INS <= doins( iCMP,16#5115#);
when 50 => INS <= doins( iJUMP,iNOTIF,ZERO,254);
when 51 => INS <= doins( iAPBREAD, 2,16#14#);
when 52 => INS <= doins( iCMP,16#6116#);
when 53 => INS <= doins( iJUMP,iNOTIF,ZERO,254);
when 54 => INS <= doins( iAPBREAD, 2,16#15#);
when 55 => INS <= doins( iCMP,16#7117#);
when 56 => INS <= doins( iJUMP,iNOTIF,ZERO,254);
when 57 => INS <= doins( iAPBREAD, 3,16#10#);
when 58 => INS <= doins( iCMP,16#8118#);
when 59 => INS <= doins( iJUMP,iNOTIF,ZERO,254);
when 60 => INS <= doins( iAPBREAD, 3,16#11#);
when 61 => INS <= doins( iCMP,16#9119#);
when 62 => INS <= doins( iJUMP,iNOTIF,ZERO,254);
-- Accumalator writes
when 65 => INS <= doins( iLOAD,16#5023#);
when 66 => INS <= doins( iAPBWRT, iACC, 0,16#20#);
when 67 => INS <= doins( iINC);
when 68 => INS <= doins( iAPBWRT, iACC, 0,16#21#);
when 69 => INS <= doins( iINC);
when 70 => INS <= doins( iAPBWRT, iACC, 1,16#22#);
when 71 => INS <= doins( iAPBREAD, 0,16#20#);
when 72 => INS <= doins( iCMP,16#5023#);
when 73 => INS <= doins( iJUMP,iNOTIF,ZERO,254);
when 74 => INS <= doins( iAPBREAD, 0,16#21#);
when 75 => INS <= doins( iCMP,16#5024#);
when 76 => INS <= doins( iJUMP,iNOTIF,ZERO,254);
when 77 => INS <= doins( iAPBREAD, 1,16#22#);
when 78 => INS <= doins( iCMP,16#5025#);
when 79 => INS <= doins( iJUMP,iNOTIF,ZERO,254);
-- ACM writes
when 81 => INS <= doins( iAPBWRT, iDAT, 0,0,16#54#); -- initialise APB RAM
when 82 => INS <= doins( iAPBWRT, iDAT, 0,1,16#55#); -- initialise APB RAM
when 83 => INS <= doins( iAPBWRT, iDAT, 0,2,16#56#); -- initialise APB RAM
when 84 => INS <= doins( iLOAD,99); -- Now the ACM writes
when 85 => INS <= doins( iAPBWRT, iACM, 0,0); -- location 99 lookup
when 86 => INS <= doins( iINC);
when 87 => INS <= doins( iAPBWRT, iACM, 0,1); -- location 100 lookup
when 88 => INS <= doins( iINC);
when 89 => INS <= doins( iAPBWRT, iACM, 0,2); -- location 101 lookup
when 90 => INS <= doins( iAPBREAD, 0,0);
when 91 => INS <= doins( iAND,16#00FF#);
when 92 => INS <= doins( iCMP,156); -- 99=63/=9c=156
when 93 => INS <= doins( iJUMP,iNOTIF,ZERO,254);
when 94 => INS <= doins( iAPBREAD, 0,1);
when 95 => INS <= doins( iAND,16#00FF#);
when 96 => INS <= doins( iCMP,16#55#); -- 100 is not written
when 97 => INS <= doins( iJUMP,iNOTIF,ZERO,254);
-- Flag Conditions
when 99 => INS <= doins( iLOAD,16#FFFF#); -- set zero flag
when 100 => INS <= doins( iINC);
when 101 => INS <= doins( iJUMP,iNOTIF,ZERO,254);
when 102 => INS <= doins( iINC); -- not set
when 103 => INS <= doins( iJUMP,iIF,ZERO, 254);
when 104 => INS <= doins( iJUMP,iIF,NEGATIVE,254); -- number is positive
when 105 => INS <= doins( iADD, 16#FFF6#); -- will go negative
when 106 => INS <= doins( iJUMP,iNOTIF,NEGATIVE,254); -- number is positive
-- Call and Return
when 107 => INS <= doins( iLOAD,16#FFFF#); -- set zero flag
when 108 => INS <= doins( iINC);
when 109 => INS <= doins( iCALL,iIF,ZERO, 243); -- should call
when 110 => INS <= doins( iCALL, iNOTIF,ZERO, 242); -- should not call
when 111 => INS <= doins( iCALL, 244); -- check return, will return
when 112 => INS <= doins( iINC); -- Clear zero
when 113 => INS <= doins( iCALL,iNOTIF,ZERO,243); -- should call
when 114 => INS <= doins( iCALL,iIF,ZERO,242); -- should not call
when 115 => INS <= doins( iCALL,246); -- check return, will return
-- Repeat with Negative flag
when 116 => INS <= doins( iLOAD,16#FFFE#); -- set negative flag
when 117 => INS <= doins( iINC);
when 118 => INS <= doins( iJUMP,iNOTIF,NEGATIVE,254);
when 119 => INS <= doins( iCALL,iIF,NEGATIVE,243); -- should call
when 120 => INS <= doins( iCALL,iNOTIF,NEGATIVE,242); -- should not call
when 121 => INS <= doins( iCALL,248); -- check return, will return
when 122 => INS <= doins( iINC); -- not set
when 123 => INS <= doins( iJUMP,iIF,NEGATIVE,254);
when 124 => INS <= doins( iCALL,iNOTIF,NEGATIVE,243); -- should call
when 125 => INS <= doins( iCALL,iIF,NEGATIVE,242); -- should not call
when 126 => INS <= doins( iCALL,iNOTIF,ALWAYS,251); -- check return, will return
-- Check Stack calling
when 130 => INS <= doins( iLOAD,0); -- Clear accum
when 131 => INS <= doins( iCALL,232);
when 132 => INS <= doins( iCMP,1); -- Should have incremented by 1
when 133 => INS <= doins( iJUMP,iNOTIF,ZERO,254);
when 134 => INS <= doins( iCALL,229);
when 135 => INS <= doins( iCMP,3); -- Should have incremented by 2
when 136 => INS <= doins( iJUMP,iNOTIF,ZERO,254);
when 137 => INS <= doins( iCALL, 226);
when 138 => INS <= doins( iCMP,6); -- Should have incremented by 3
when 139 => INS <= doins( iJUMP,iNOTIF,ZERO,254);
when 140 => INS <= doins( iCALL, 223);
when 141 => INS <= doins( iCMP,10); -- Should have incremented by 4
when 142 => INS <= doins( iJUMP,iNOTIF,ZERO,254);
-- Loop Instruction
when 145 => INS <= doins( iLOAD,0); -- Clear accum
when 146 => INS <= doins( iLOADZ,iDAT, 5);
when 147 => INS <= doins( iINC);
when 148 => INS <= doins( iDECZ);
when 149 => INS <= doins( iJUMP,iNOTIF,ZZERO,147);
when 150 => INS <= doins( iCMP,05); -- Should have incremented by 5
when 151 => INS <= doins( iJUMP,iNOTIF,ZERO,254);
-- Memory Block read and write
when 155 => INS <= doins( iLOAD,16#1245#); -- Test Data
when 156 => INS <= doins( iRAMWRT,0,iACC); -- write and then readback to verify
when 157 => INS <= doins( iINC);
when 158 => INS <= doins( iRAMWRT,10,iACC);
when 159 => INS <= doins( iINC);
when 160 => INS <= doins( iRAMWRT,100,iACC);
when 161 => INS <= doins( iINC);
when 162 => INS <= doins( iRAMWRT,250,iACC);
when 163 => INS <= doins( iRAMREAD,0);
when 164 => INS <= doins( iCMP,16#1245#);
when 165 => INS <= doins( iJUMP,iNOTIF,ZERO,254);
when 166 => INS <= doins( iRAMREAD,10);
when 167 => INS <= doins( iCMP,16#1246#);
when 168 => INS <= doins( iJUMP,iNOTIF,ZERO,254);
when 169 => INS <= doins( iRAMREAD,100);
when 170 => INS <= doins( iCMP,16#12
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?