Ok, that makes sense i guess. I changed my code to look like this and it compiled:
begin
fetch: imem PORT MAP(PC1,PC2,clock,INS1,INS2,'0','0',INS1,INS2);--fetched the INS
process(clock,reset)
begin
if(reset = '1') then
state<=A;
PC1<="0000000000000000";
--initialize stuff
elsif(rising_Edge(clock)) then
case state is
when A=>
opcode<=INS1(15 DOWNTO 12);
state <= B;
--other stuff
The problem I'm forseeing is when I want to do decode. Initially I was thinking of a bunch of opcode sensitive if statements and then decode depending on what opcode I have but since I can't put port maps into my process block I'll have to put it outside but I guess its up to the state machine to make sure I set the right values?