-- Author: M. Gomez -- Date : 10/29/1999 -- Rev No: 1.1 -- File : arm7_pkg.vhdl -- Following is the CSE517 package declaration and definition -- During block development, this package is to be used by -- all design blocks to insure common and consistent -- type declarations among all blocks. -- -- To use this package include the following line into each -- block that makes use of this set of package declarations: -- USE work.arm_pkg.ALL; LIBRARY ieee; USE ieee.std_logic_1164.ALL; PACKAGE arm7_pkg IS -- Establish a standard IO type for use by all signals SUBTYPE io IS std_logic; SUBTYPE io_vec IS std_logic_vector; CONSTANT Tps : time := 10 ns; -- Establish some usefull data width constants CONSTANT adrs_bus_width : integer := 32; CONSTANT adrs_max : integer := 2**adrs_bus_width-1; CONSTANT adrs_min : integer := 0; CONSTANT memory_size : integer := 2**adrs_bus_width; CONSTANT data_width : integer := 8; CONSTANT data_max : integer := 2**data_width-1; CONSTANT data_min : integer := 0; CONSTANT word_width : integer := 4* data_width; CONSTANT word_max : integer := 2**word_width-1; CONSTANT word_min : integer := 0; CONSTANT data_bus_width : integer := word_width; CONSTANT reg_width : integer := word_width; CONSTANT reg_max : integer := word_max; CONSTANT reg_min : integer := 0; CONSTANT pipelineLength : integer := 5; SUBTYPE adrsRange IS natural RANGE adrs_bus_width-1 DOWNTO 0; SUBTYPE adrsRangeLessLeft IS adrsRange RANGE adrsRange'pred(adrsRange'left) DOWNTO adrsRange'right; SUBTYPE adrsRangeLessRight IS adrsRange RANGE adrsRange'left DOWNTO adrsRange'succ(adrsRange'right); SUBTYPE dataRange IS natural RANGE data_bus_width-1 DOWNTO 0; SUBTYPE dataRangeLessLeft IS dataRange RANGE dataRange'pred(dataRange'left) DOWNTO dataRange'right; SUBTYPE dataRangeLessRight IS datarange RANGE datarange'left DOWNTO dataRange'succ(dataRange'right); SUBTYPE regRange IS natural RANGE data_bus_width-1 DOWNTO 0; SUBTYPE regRangeLessLeft IS regRange RANGE regRange'pred(regRange'left) DOWNTO regRange'right; SUBTYPE regRangeLessRight IS regRange RANGE regRange'left DOWNTO regRange'succ(regRange'right); -- The following subtype declarations are to be used to define of the -- bus a information in the design. SUBTYPE adrs_t IS io_vec(adrsRange); SUBTYPE data_t IS io_vec(dataRange); SUBTYPE reg_t IS io_vec(regRange); TYPE cc_t IS RECORD n : io; z : io; c : io; v : io; irq : io; fiq : io; mode : io_vec (4 DOWNTO 0); END RECORD cc_t; -- Establish each address bus as a subtype of the common -- type adrs_t so that operations can be easily coded across -- multiple data busses. SUBTYPE a_t IS adrs_t; SUBTYPE pc_bus_t IS adrs_t; SUBTYPE inc_bus_t IS adrs_t; -- Define what an instruction looks like TYPE opcode_t IS (no_op, add, adc, sub, sbc, rsb, rsc, cmp, cmn, tst, teq, -- Modified 10/28/99 MG andr, eor, orr, bic, lsl, lsr, asr, mov, -- Modified 10/28/99 MG ldr, ldrb, str, strb, beq, bne, swp, swi); -- Modified 10/28/99 MG -- Establish each data bus as a subtype of the common -- type data_t so that operations can be easily coded across -- multiple data busses. SUBTYPE alu_bus_t IS data_t; -- Modified 10/29/99 MG SUBTYPE a_bus_t IS data_t; SUBTYPE b_bus_t IS data_t; SUBTYPE d_bus_t IS data_t; SUBTYPE inst_bus_t IS opcode_t; TYPE adrsMode_t IS (immed, reg); -- Modified 10/29/99 MG TYPE regName_t IS (r0, r1, r2, r3, r4, r5, r6, r7, r8, -- Modified 10/28/99 MG r9, r10, r11, r12, r13, r14, r15, cpsr); -- Modified 10/28/99 MG SUBTYPE arg_t IS integer; TYPE inst_t IS RECORD baseInst : opcode_t ; adrsMode : adrsMode_t; r1 : regName_t; r2 : regName_t; arg1 : arg_t; arg2 : arg_t; END RECORD inst_t; -- Declare ALU control commands for each of the TYPE alu_ops_t IS (add, adc, sub, sbc, rsb, rsc, and_op, or_op, eor, -- Modified 10/28/99 MG passA, passB, passInst); -- Modified 10/28/99 MG TYPE b_bus_ctrl_t IS ( b_bus, inst_bus); -- Modified 10/28/99 MG -- Declare a single record to be passed between controller and -- register bank for all actions TYPE alu_ctrl_t IS RECORD -- Modified 10/28/99 MG alu_ops : alu_ops_t; -- Modified 10/28/99 MG b_bus_ctl : b_bus_ctrl_t; -- Modified 10/28/99 MG END RECORD alu_ctrl_t; -- Modified 10/28/99 MG -- Declare a single record to be passed between controller and -- register bank for all actions TYPE regBank_src_t IS (alu_bus, inc_bus); TYPE regBank_ops_t IS (lsl, lsr, asr); TYPE regBank_ctrl_t IS RECORD a_bus_out : regName_t; b_bus_out : regName_t; loadReg : regName_t; regBank_src : regBank_src_t; regBank_ops : regBank_ops_t; loadN : boolean; loadZ : boolean; loadC : boolean; loadV : boolean; loadI : boolean; loadF : boolean; loadMode : boolean; END RECORD regBank_ctrl_t; TYPE adrsReg_ctrl_t IS RECORD loadReg : boolean; END RECORD adrsReg_ctrl_t; TYPE adrsReg_ctrl_rtn_t IS RECORD adrs_valid : boolean; END RECORD adrsReg_ctrl_rtn_t; TYPE adrsInc_ctrl_t IS RECORD loadReg : boolean; END RECORD adrsInc_ctrl_t; -- Declare a single record to be passed between controller and -- register bank for all actions TYPE wdReg_ctrl_t IS RECORD loadReg : boolean; END RECORD wdReg_ctrl_t; TYPE wdReg_ctrl_rtn_t IS RECORD data_written : boolean; END RECORD wdReg_ctrl_rtn_t; -- Declare a single record to be passed between controller and -- register bank for all actions TYPE dataSize_t IS (word, byte); TYPE rdReg_ctrl_t IS RECORD loadReg : boolean; dataSize : dataSize_t; END RECORD rdReg_ctrl_t; TYPE rdReg_ctrl_rtn_t IS RECORD data_ready : boolean; END RECORD rdReg_ctrl_rtn_t; TYPE instpipeline IS ARRAY(1 TO pipelineLength) OF inst_t; TYPE cc_reg_t IS (no_op); END PACKAGE arm7_pkg;