instructions.vhd
来自「Actel Fusion System Management Developme」· VHDL 代码 · 共 1,177 行 · 第 1/5 页
VHD
1,177 行
when 5 => INS <= doins( iLOAD,16#1111#);
when 6 => INS <= doins( iAPBWRT, iDAT, 0,16#10#,16#1234#);
when 7 => INS <= doins( iAPBREAD, 0,16#10#);
when 8 => INS <= doins( iCMP,16#1234#);
when 9 => INS <= doins( iJUMP,iNOTIF,ZERO,30);
-- Accumalator writes
when 10 => INS <= doins( iLOAD,16#2312#);
when 11 => INS <= doins( iAPBWRT, iACC, 0,16#20#);
when 12 => INS <= doins( iAPBREAD, 0,16#20#);
when 13 => INS <= doins( iCMP,16#2312#);
when 14 => INS <= doins( iJUMP,iNOTIF,ZERO,30);
-- Flag Conditions
when 15 => INS <= doins( iLOAD,16#FFFF#); -- set zero flag
when 16 => INS <= doins( iADD, 1);
when 17 => INS <= doins( iJUMP,iNOTIF,ZERO,30);
when 18 => INS <= doins( iADD, 1); -- not set
when 19 => INS <= doins( iCALL,iIF,ZERO,30);
when 20 => INS <= doins( iCALL,iIF,NEGATIVE,30); -- number is positive
when 21 => INS <= doins( iADD, 16#FFF6#); -- will go negative
when 22 => INS <= doins( iCALL,iNOTIF,NEGATIVE,30); -- number is positive
-- Big negative value
when 23 => INS <= doins( iLOAD,0); -- Try loading big negative values
when 24 => INS <= doins( iXOR, 16#FFFF#);
when 25 => INS <= doins( iADD, 1); -- not set
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;
---------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------
-- 32-Bit operation simple core
when 3 =>
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#12552345#); -- Set Accumalator to 55hex
when 2 => INS <= doins( iAND,16#0F0F0F0F#); -- Do some maths and jump to error if one occurs
when 3 => INS <= doins( iCMP,16#02050305#);
when 4 => INS <= doins( iJUMP,iNOTIF,ZERO,30);
-- APB Bus Cycles, immediate data
when 5 => INS <= doins( iLOAD,16#1111#);
when 6 => INS <= doins( iAPBWRT, iDAT,0,16#10#,16#12345678#);
when 7 => INS <= doins( iAPBREAD, 0,16#10#);
when 8 => INS <= doins( iCMP,16#12345678#);
when 9 => INS <= doins( iJUMP,iNOTIF,ZERO,30);
-- Accumalator writes
when 10 => INS <= doins( iLOAD,16#23121234#);
when 11 => INS <= doins( iAPBWRT, iACC, 0,16#20#);
when 12 => INS <= doins( iAPBREAD, 0,16#20#);
when 13 => INS <= doins( iCMP,16#23121234#);
when 14 => INS <= doins( iJUMP,iNOTIF,ZERO,30);
-- Flag Conditions
when 15 => INS <= doins( iLOAD,-1); -- set zero flag
when 16 => INS <= doins( iADD, 1);
when 17 => INS <= doins( iJUMP,iNOTIF,ZERO,30);
when 18 => INS <= doins( iADD, 1); -- not set
when 19 => INS <= doins( iCALL,iIF,ZERO,30);
when 20 => INS <= doins( iCALL,iIF,NEGATIVE,30); -- number is positive
when 21 => INS <= doins( iADD, -8); -- will go negative
when 22 => INS <= doins( iCALL,iNOTIF,NEGATIVE,30); -- number is positive
-- Big negative value
when 23 => INS <= doins( iLOAD,0); -- Try loading big negative values
when 24 => INS <= doins( iXOR, -1);
when 25 => INS <= doins( iADD, 1); -- not set
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;
---------------------------------------------------------------------------------------------
-- 8-Bit operation simple core with RAM
when 4 =>
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,30);
-- APB Bus Cycles, immediate data
when 5 => INS <= doins( iLOAD,16#12#);
when 6 => INS <= doins( iAPBWRT, iDAT, 0,16#10#,16#12#);
when 7 => INS <= doins( iAPBREAD, 0,16#10#);
when 8 => INS <= doins( iCMP,16#12#);
when 9 => INS <= doins( iJUMP,iNOTIF,ZERO,30);
-- Loop Instruction
when 10 => INS <= doins( iLOAD,0); -- Clear accum
when 11 => INS <= doins( iLOADZ,iDAT, 5);
when 12 => INS <= doins( iINC);
when 13 => INS <= doins( iDECZ);
when 14 => INS <= doins( iJUMP,iNOTIF,ZZERO,12);
when 15 => INS <= doins( iCMP,16#05#); -- Should loop 5 times
when 16 => INS <= doins( iJUMP,iNOTIF,ZERO,30);
-- Memory Block read and write
when 17 => INS <= doins( iLOAD,16#12#);
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#12#);
when 23 => INS <= doins( iJUMP,iNOTIF,ZERO,30);
when 24 => INS <= doins( iRAMREAD,10);
when 25 => INS <= doins( iCMP,16#13#);
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;
---------------------------------------------------------------------------------------------
-- 16-Bit operation simple core with RAM
when 5 =>
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#5544#); -- 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#0504#);
when 4 => INS <= doins( iJUMP,iNOTIF,ZERO,30);
-- APB Bus Cycles, immediate data
when 5 => INS <= doins( iLOAD,16#1111#);
when 6 => INS <= doins( iAPBWRT, iDAT, 0,16#10#,16#1234#);
when 7 => INS <= doins( iAPBREAD, 0,16#10#);
when 8 => INS <= doins( iCMP,16#1234#);
when 9 => INS <= doins( iJUMP,iNOTIF,ZERO,30);
-- Loop Instruction
when 10 => INS <= doins( iLOAD,0); -- Clear accum
when 11 => INS <= doins( iLOADZ,iDAT, 5);
when 12 => INS <= doins( iINC);
when 13 => INS <= doins( iDECZ);
when 14 => INS <= doins( iJUMP,iNOTIF,ZZERO,12);
when 15 => INS <= doins( iCMP,16#05#); -- Should loop 5 times
when 16 => INS <= doins( iJUMP,iNOTIF,ZERO,30);
-- Memory Block read and write
when 17 => INS <= doins( iLOAD,16#1234#);
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#1234#);
when 23 => INS <= doins( iJUMP,iNOTIF,ZERO,30);
when 24 => INS <= doins( iRAMREAD,10);
when 25 => INS <= doins( iCMP,16#1235#);
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;
---------------------------------------------------------------------------------------------
-- 32-Bit operation simple core with RAM
when 6 =>
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#55443322#); -- Set Accumalator to 55hex
when 2 => INS <= doins( iAND,16#0F0F0F0F#); -- Do some maths and jump to error if one occurs
when 3 => INS <= doins( iCMP,16#05040302#);
when 4 => INS <= doins( iJUMP,iNOTIF,ZERO,30);
-- APB Bus Cycles, immediate data
when 5 => INS <= doins( iLOAD,16#1111#);
when 6 => INS <= doins( iAPBWRT, iDAT, 0,16#10#,16#12345678#);
when 7 => INS <= doins( iAPBREAD, 0,16#10#);
when 8 => INS <= doins( iCMP,16#12345678#);
when 9 => INS <= doins( iJUMP,iNOTIF,ZERO,30);
-- Loop Instruction
when 10 => INS <= doins( iLOAD,0); -- Clear accum
when 11 => INS <= doins( iLOADZ,iDAT, 5);
when 12 => INS <= doins( iINC);
when 13 => INS <= doins( iDECZ);
when 14 => INS <= doins( iJUMP,iNOTIF,ZZERO,12);
when 15 => INS <= doins( iCMP,16#05#); -- Should loop 5 times
when 16 => INS <= doins( iJUMP,iNOTIF,ZERO,30);
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?