You have defined 's1' to be an output of the entity. Prior to VHDL-2008, outputs could not be read, which means they cannot be on the right hand side of an assignment, so 'y1 <= s1;' is illegal which is the error that is being reported. There are two pre-2008 solutions:
- Define s1 as 'buffer' instead of 'out' in the entity. Then it is legit to use s1 on both the left and the right hand side.
- Define an internal signal (say 's1_internal') and use that everywhere you want. Add an assignment 's1 <= s1_internal' to connect that new signal to the entity output.
Using VHDL-2008 rules, it is much simpler since they have removed that requirement so 'y1 <= s1;' is legal. In the Modelsim project window, right click and you should run across an option to compile it according to the 2008 standard. If you're trying to synthesize the design into an actual part, you will have to do the same thing in that tool to tell it which set of rules to follow. If your tool does not support 2008, then complain to the supplier and tell them you'll be taking your business elsewhere. There have been four major revisions of the language: 1987, 1993, 2002 and 2008.
Kevin Jennings