?? instructions.vhd
字號:
-- Memory Block read and write
when 17 => INS <= doins( iLOAD,16#12345678#);
when 18 => INS <= doins( iRAMWRT,0,iACC); -- write and then readback to verify
when 19 => INS <= doins( iINC);
when 20 => INS <= doins( iRAMWRT,10,iACC);
when 21 => INS <= doins( iRAMREAD,0);
when 22 => INS <= doins( iCMP,16#12345678#);
when 23 => INS <= doins( iJUMP,iNOTIF,ZERO,30);
when 24 => INS <= doins( iRAMREAD,10);
when 25 => INS <= doins( iCMP,16#12345679#);
when 26 => INS <= doins( iJUMP,iNOTIF,ZERO,30);
-- Done tests, jump to signal all done
when 27 => INS <= doins( iJUMP, 28);
------------------------------------------------------------------------------------
-- All tests complete
when 28 => INS <= doins( iIOWRT, iDAT, 253);
when 29 => INS <= doins( iJUMP, 29);
-- Error Condition
when 30 => INS <= doins( iIOWRT, iDAT, 254); -- Error Condition
when 31 => INS <= doins( iJUMP, 31);
when others => INS <= doins( iNOP);
end case;
---------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------
-- Fully Configured 8 bit Operation with 256 instructions
when 11 =>
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#55#); -- Set Accumalator to 55hex
when 2 => INS <= doins( iAND, 16#0F#); -- Do some maths and jump to error if one occurs
when 3 => INS <= doins( iCMP, 16#05#);
when 4 => INS <= doins( iJUMP,iNOTIF,ZERO,254);
when 5 => INS <= doins( iOR, 16#A2#);
when 6 => INS <= doins( iCMP,16#A7#);
when 7 => INS <= doins( iJUMP,iNOTIF,ZERO,254);
when 8 => INS <= doins( iINC );
when 9 => INS <= doins( iCMP,16#A8#);
when 10 => INS <= doins( iJUMP,iNOTIF,ZERO,254);
when 11 => INS <= doins( iXOR, 16#0F#);
when 12 => INS <= doins( iCMP,16#A7#);
when 13 => INS <= doins( iJUMP,iNOTIF,ZERO,254);
when 14 => INS <= doins( iADD, 16#12#);
when 15 => INS <= doins( iCMP,16#B9#);
when 16 => INS <= doins( iJUMP,iNOTIF,ZERO,254);
when 17 => INS <= doins( iSHL0 );
when 18 => INS <= doins( iCMP,16#72#);
when 19 => INS <= doins( iJUMP,iNOTIF,ZERO,254);
when 20 => INS <= doins( iSHL1 );
when 21 => INS <= doins( iCMP,16#E5#);
when 22 => INS <= doins( iJUMP,iNOTIF,ZERO,254);
when 23 => INS <= doins( iSHR0 );
when 24 => INS <= doins( iCMP,16#72#);
when 25 => INS <= doins( iJUMP,iNOTIF,ZERO,254);
when 26 => INS <= doins( iSHR1 );
when 27 => INS <= doins( iCMP,16#B9#);
when 28 => INS <= doins( iJUMP,iNOTIF,ZERO,254);
-- APB Bus Cycles, immediate data
when 30 => INS <= doins( iLOAD,16#66#);
when 31 => INS <= doins( iAPBWRT, iDAT, 0,16#10#,16#12#);
when 32 => INS <= doins( iAPBWRT, iDAT, 0,16#11#,16#13#);
when 33 => INS <= doins( iAPBWRT, iDAT, 1,16#10#,16#14#);
when 34 => INS <= doins( iAPBWRT, iDAT, 1,16#11#,16#15#);
when 35 => INS <= doins( iAPBWRT, iDAT, 2,16#10#,16#16#);
when 36 => INS <= doins( iAPBWRT, iDAT, 2,16#11#,16#17#);
when 37 => INS <= doins( iAPBWRT, iDAT, 3,16#10#,16#18#);
when 38 => INS <= doins( iAPBWRT, iDAT, 3,16#11#,chartoint('Z'));
when 39 => INS <= doins( iAPBREAD, 0,16#10#);
when 40 => INS <= doins( iCMP,16#12#);
when 41 => INS <= doins( iJUMP,iNOTIF,ZERO,254);
when 42 => INS <= doins( iAPBREAD, 0,16#11#);
when 43 => INS <= doins( iCMP,16#13#);
when 44 => INS <= doins( iJUMP,iNOTIF,ZERO,254);
when 45 => INS <= doins( iAPBREAD, 1,16#10#);
when 46 => INS <= doins( iCMP,16#14#);
when 47 => INS <= doins( iJUMP,iNOTIF,ZERO,254);
when 48 => INS <= doins( iAPBREAD, 1,16#11#);
when 49 => INS <= doins( iCMP,16#15#);
when 50 => INS <= doins( iJUMP,iNOTIF,ZERO,254);
when 51 => INS <= doins( iAPBREAD, 2,16#10#);
when 52 => INS <= doins( iCMP,16#16#);
when 53 => INS <= doins( iJUMP,iNOTIF,ZERO,254);
when 54 => INS <= doins( iAPBREAD, 2,16#11#);
when 55 => INS <= doins( iCMP,16#17#);
when 56 => INS <= doins( iJUMP,iNOTIF,ZERO,254);
when 57 => INS <= doins( iAPBREAD, 3,16#10#);
when 58 => INS <= doins( iCMP,16#18#);
when 59 => INS <= doins( iJUMP,iNOTIF,ZERO,254);
when 60 => INS <= doins( iAPBREAD, 3,16#11#);
when 61 => INS <= doins( iCMP,chartoint('Z'));
when 62 => INS <= doins( iJUMP,iIFNOT,ZERO,254); -- other condition
when 63 => INS <= doins( iCMP,chartoint('Y'));
when 64 => INS <= doins( iJUMP,iIF,ZERO,254);
-- Accumalator writes
when 65 => INS <= doins( iLOAD,16#23#);
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#23#);
when 73 => INS <= doins( iJUMP,iNOTIF,ZERO,254);
when 74 => INS <= doins( iAPBREAD, 0,16#21#);
when 75 => INS <= doins( iCMP,16#24#);
when 76 => INS <= doins( iJUMP,iNOTIF,ZERO,254);
when 77 => INS <= doins( iAPBREAD, 1,16#22#);
when 78 => INS <= doins( iCMP,16#25#);
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( iCMP,156); -- 99=63/=9c=156
when 92 => INS <= doins( iJUMP,iNOTIF,ZERO,254);
when 93 => INS <= doins( iAPBREAD, 0,1);
when 94 => INS <= doins( iCMP,16#55#); -- 100 is not written
when 95 => INS <= doins( iJUMP,iNOTIF,ZERO,254);
when 96 => INS <= doins( iAPBREAD, 0,2);
when 97 => INS <= doins( iCMP,154); -- 101=65/=9a=154
when 98 => INS <= doins( iJUMP,iNOTIF,ZERO,254);
-- Flag Conditions
when 99 => INS <= doins( iLOAD,255); -- 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#F6#); -- will go negative
when 106 => INS <= doins( iJUMP,iNOTIF,NEGATIVE,254); -- number is positive
-- Call and Return
when 107 => INS <= doins( iLOAD,255); -- 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,254); -- 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 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#45#); -- 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#45#);
when 165 => INS <= doins( iJUMP,iNOTIF,ZERO,254);
when 166 => INS <= doins( iRAMREAD,10);
when 167 => INS <= doins( iCMP,16#46#);
when 168 => INS <= doins( iJUMP,iNOTIF,ZERO,254);
when 169 => INS <= doins( iRAMREAD,100);
when 170 => INS <= doins( iCMP,16#47#);
when 171 => INS <= doins( iJUMP,iNOTIF,ZERO,254);
when 172 => INS <= doins( iRAMREAD,250);
when 173 => INS <= doins( iCMP,16#48#);
when 174 => INS <= doins( iJUMP,iNOTIF,ZERO,254);
-- test additional shift and rotate instructions
-- Simple Test of Boolean Operations
when 180 => INS <= doins( iLOAD,16#15#); -- Set Accumalator to 15hex
when 181 => INS <= doins( iSHL0 ); -- SHIFT <= 0
when 182 => INS <= doins( iCMP, 16#2A#);
when 183 => INS <= doins( iJUMP,iNOTIF,ZERO,254);
when 184 => INS <= doins( iSHL1 ); -- SHIFT <= 1
when 185 => INS <= doins( iCMP, 16#55#);
when 186 => INS <= doins( iJUMP,iNOTIF,ZERO,254);
when 187 => INS <= doins( iSHLE); -- SHIFT <= EXTEND
when 188 => INS <= doins( iCMP, 16#AB#);
when 189 => INS <= doins( iJUMP,iNOTIF,ZERO,254);
when 191 => INS <= doins( iROL ); -- SHIFT <= ROTATE
when 192 => INS <= doins( iCMP, 16#57#);
when 193 => INS <= doins( iJUMP,iNOTIF,ZERO,254);
when 194 => INS <= doins( iLOAD,16#15#); -- Set Accumalator to 15hex
when 195 => INS <= doins( iSHR0 ); -- SHIFT => 0
when 196 => INS <= doins( iCMP, 16#0A#);
when 197 => INS <= doins( iJUMP,iNOTIF,ZERO,254);
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -