480 lines
		
	
	
		
			20 KiB
		
	
	
	
		
			VHDL
		
	
	
	
	
	
			
		
		
	
	
			480 lines
		
	
	
		
			20 KiB
		
	
	
	
		
			VHDL
		
	
	
	
	
	
| LIBRARY Common_test;
 | |
|   USE Common_test.testUtils.all;
 | |
| 
 | |
| ARCHITECTURE test OF ahbBeamer_tester IS
 | |
|                                                               -- reset and clock
 | |
|   constant clockPeriod: time := (1.0/clockFrequency) * 1 sec;
 | |
|   signal clock_int: std_uLogic := '1';
 | |
|   signal reset_int: std_uLogic;
 | |
|                                                              -- test information
 | |
|   signal testSeparator : string(1 to 80) := (others => '-');
 | |
|   signal errorTopSeparator : string(1 to 80) := (others => '#');
 | |
|   signal bottomSeparator : string(1 to 80) := (others => '.');
 | |
|   signal indentation : string(1 to 2) := (others => ' ');
 | |
|   signal noteInformation : string(1 to 9) := (others => ' ');
 | |
|   signal errorInformation : string(1 to 10) := (others => ' ');
 | |
|   signal failureInformation : string(1 to 12) := (others => ' ');
 | |
|   signal testInformation : string(1 to 50) := (others => ' ');
 | |
|                                                           -- register definition
 | |
|   constant controlRegisterAddress: natural := 0;
 | |
|   constant controlRun: natural := 2#001#;
 | |
|   constant controlUpdatePattern: natural := 2#010#;
 | |
|   constant controlInterpolateLinear: natural := 2#100#;
 | |
|   constant speedRegisterAddress: natural := 1;
 | |
|   constant xFifoRegisterAddress: natural := 2;
 | |
|   constant yFifoRegisterAddress: natural := 3;
 | |
|   signal updatePeriod: natural := 1;
 | |
|   signal patternLength: natural := 32;
 | |
|                                                               -- AMBA bus access
 | |
|   constant registerWriteDelay: time := 4*clockPeriod;
 | |
|   signal registerAddress: natural;
 | |
|   signal registerDataOut, registerDataIn: integer;
 | |
|   signal registerWrite: std_uLogic;
 | |
|   signal registerRead: std_uLogic;
 | |
|                                                                   -- UART access
 | |
|   constant baudPeriodNb: positive := 4;
 | |
|   signal uartData: integer;
 | |
|   signal uartSend: std_uLogic;
 | |
|                                                                     -- functions
 | |
|   function clearBits (word, bits : natural) return natural is
 | |
|     variable andMask: unsigned(hRData'range);
 | |
|   begin
 | |
|     andMask := not(to_unsigned(bits, hRData'length));
 | |
|     return to_integer(to_unsigned(word, hRData'length) and andMask);
 | |
|   end clearBits; 
 | |
| 
 | |
| BEGIN
 | |
|   ------------------------------------------------------------------------------
 | |
|                                                               -- reset and clock
 | |
|   reset_int <= '1', '0' after 2*clockPeriod;
 | |
|   hReset_n <= not(reset_int);
 | |
|   reset <= reset_int;
 | |
| 
 | |
|   clock_int <= not clock_int after clockPeriod/2;
 | |
|   hClk <= transport clock_int after clockPeriod*9.0/10.0;
 | |
|   clock <= transport clock_int after clockPeriod*9.0/10.0;
 | |
| 
 | |
|   ------------------------------------------------------------------------------
 | |
|                                                                 -- test sequence
 | |
|   testSequence: process
 | |
|   begin
 | |
|     selSinCos <= '0';
 | |
|     registerAddress <= 0;
 | |
|     registerDataOut <= 0;
 | |
|     registerWrite <= '0';
 | |
|     registerRead <= '0';
 | |
|     uartSend <= '0';
 | |
|     wait for 100 ns;
 | |
|     print(cr & cr & cr & cr);
 | |
| 
 | |
|     ----------------------------------------------------------------------------
 | |
|                                                         -- test control register
 | |
|     wait for 1 us - now;
 | |
|     testInformation <= pad("Testing control register", testInformation'length);
 | |
|     wait for 0 ns;
 | |
|     print(testSeparator & cr & testInformation);
 | |
|                                                     -- set control register bits
 | |
|     wait until rising_edge(clock_int);
 | |
|     registerAddress <= controlRegisterAddress;
 | |
|     registerDataOut <= controlRun + controlUpdatePattern + controlInterpolateLinear;
 | |
|     registerWrite <= '1', '0' after clockPeriod;
 | |
|     wait for registerWriteDelay;
 | |
|                                                     -- readback control register
 | |
|     wait until rising_edge(clock_int);
 | |
|     registerAddress <= controlRegisterAddress;
 | |
|     registerRead <= '1', '0' after clockPeriod;
 | |
|     wait for 3*clockPeriod;
 | |
|     assert(registerDataIn = controlRun + controlUpdatePattern + controlInterpolateLinear)
 | |
|       report "Control register write / readback error"
 | |
|       severity error;
 | |
|     wait for registerWriteDelay;
 | |
|                                               -- stop running and pattern update
 | |
|     wait until rising_edge(clock_int);
 | |
|     registerAddress <= controlRegisterAddress;
 | |
|     registerRead <= '1', '0' after clockPeriod;
 | |
|     wait for 3*clockPeriod;
 | |
|     registerDataOut <= clearBits(registerDataIn, controlRun + controlUpdatePattern);
 | |
|     registerWrite <= '1', '0' after clockPeriod;
 | |
|     wait for registerWriteDelay;
 | |
| 
 | |
|     ----------------------------------------------------------------------------
 | |
|                                                           -- test speed register
 | |
|     wait for 2 us - now;
 | |
|     testInformation <= pad("Testing speed register", testInformation'length);
 | |
|     wait for 0 ns;
 | |
|     print(testSeparator & cr & testInformation);
 | |
|                                                         -- set speed count value
 | |
|     wait until rising_edge(clock_int);
 | |
|     registerAddress <= speedRegisterAddress;
 | |
|     registerDataOut <= updatePeriod;
 | |
|     registerWrite <= '1', '0' after clockPeriod;
 | |
|     wait for registerWriteDelay;
 | |
|                                                          -- readback speed count
 | |
|     wait until rising_edge(clock_int);
 | |
|     registerAddress <= speedRegisterAddress;
 | |
|     registerRead <= '1', '0' after clockPeriod;
 | |
|     wait for 3*clockPeriod;
 | |
|     assert(registerDataIn = updatePeriod)
 | |
|       report "Speed register write / readback error"
 | |
|       severity error;
 | |
|     wait for registerWriteDelay;
 | |
| 
 | |
|     ----------------------------------------------------------------------------
 | |
|                                             -- write sinewave data points to RAM
 | |
|     wait for 3 us - now;
 | |
|     testInformation <= pad("Writing sinewaves to RAM", testInformation'length);
 | |
|     wait for 0 ns;
 | |
|     print(testSeparator & cr & testInformation);
 | |
|                                                          -- start pattern update
 | |
|     wait until rising_edge(clock_int);
 | |
|     registerAddress <= controlRegisterAddress;
 | |
|     registerDataOut <= controlUpdatePattern;
 | |
|     registerWrite <= '1', '0' after clockPeriod;
 | |
|     wait for registerWriteDelay;
 | |
|                                                           -- write X FIFO values
 | |
|     wait until rising_edge(clock_int);
 | |
|     registerAddress <= xFifoRegisterAddress;
 | |
|     registerDataOut <= 16#0000#;
 | |
|     registerWrite <= '1', '0' after clockPeriod;
 | |
|     wait for registerWriteDelay;
 | |
|     registerDataOut <= 16#18F9#;
 | |
|     registerWrite <= '1', '0' after clockPeriod;
 | |
|     wait for registerWriteDelay;
 | |
|     registerDataOut <= 16#30FB#;
 | |
|     registerWrite <= '1', '0' after clockPeriod;
 | |
|     wait for registerWriteDelay;
 | |
|     registerDataOut <= 16#471C#;
 | |
|     registerWrite <= '1', '0' after clockPeriod;
 | |
|     wait for registerWriteDelay;
 | |
|     registerDataOut <= 16#5A82#;
 | |
|     registerWrite <= '1', '0' after clockPeriod;
 | |
|     wait for registerWriteDelay;
 | |
|     registerDataOut <= 16#6A6D#;
 | |
|     registerWrite <= '1', '0' after clockPeriod;
 | |
|     wait for registerWriteDelay;
 | |
|     registerDataOut <= 16#7641#;
 | |
|     registerWrite <= '1', '0' after clockPeriod;
 | |
|     wait for registerWriteDelay;
 | |
|     registerDataOut <= 16#7D89#;
 | |
|     registerWrite <= '1', '0' after clockPeriod;
 | |
|     wait for registerWriteDelay;
 | |
|     registerDataOut <= 16#7FFF#;
 | |
|     registerWrite <= '1', '0' after clockPeriod;
 | |
|     wait for registerWriteDelay;
 | |
|     registerDataOut <= 16#7D89#;
 | |
|     registerWrite <= '1', '0' after clockPeriod;
 | |
|     wait for registerWriteDelay;
 | |
|     registerDataOut <= 16#7641#;
 | |
|     registerWrite <= '1', '0' after clockPeriod;
 | |
|     wait for registerWriteDelay;
 | |
|     registerDataOut <= 16#6A6D#;
 | |
|     registerWrite <= '1', '0' after clockPeriod;
 | |
|     wait for registerWriteDelay;
 | |
|     registerDataOut <= 16#5A82#;
 | |
|     registerWrite <= '1', '0' after clockPeriod;
 | |
|     wait for registerWriteDelay;
 | |
|     registerDataOut <= 16#471C#;
 | |
|     registerWrite <= '1', '0' after clockPeriod;
 | |
|     wait for registerWriteDelay;
 | |
|     registerDataOut <= 16#30FB#;
 | |
|     registerWrite <= '1', '0' after clockPeriod;
 | |
|     wait for registerWriteDelay;
 | |
|     registerDataOut <= 16#18F9#;
 | |
|     registerWrite <= '1', '0' after clockPeriod;
 | |
|     wait for registerWriteDelay;
 | |
|     registerDataOut <= 16#0000#;
 | |
|     registerWrite <= '1', '0' after clockPeriod;
 | |
|     wait for registerWriteDelay;
 | |
|     registerDataOut <= -16#18F9#;
 | |
|     registerWrite <= '1', '0' after clockPeriod;
 | |
|     wait for registerWriteDelay;
 | |
|     registerDataOut <= -16#30FB#;
 | |
|     registerWrite <= '1', '0' after clockPeriod;
 | |
|     wait for registerWriteDelay;
 | |
|     registerDataOut <= -16#471C#;
 | |
|     registerWrite <= '1', '0' after clockPeriod;
 | |
|     wait for registerWriteDelay;
 | |
|     registerDataOut <= -16#5A82#;
 | |
|     registerWrite <= '1', '0' after clockPeriod;
 | |
|     wait for registerWriteDelay;
 | |
|     registerDataOut <= -16#6A6D#;
 | |
|     registerWrite <= '1', '0' after clockPeriod;
 | |
|     wait for registerWriteDelay;
 | |
|     registerDataOut <= -16#7641#;
 | |
|     registerWrite <= '1', '0' after clockPeriod;
 | |
|     wait for registerWriteDelay;
 | |
|     registerDataOut <= -16#7D89#;
 | |
|     registerWrite <= '1', '0' after clockPeriod;
 | |
|     wait for registerWriteDelay;
 | |
|     registerDataOut <= -16#7FFF#;
 | |
|     registerWrite <= '1', '0' after clockPeriod;
 | |
|     wait for registerWriteDelay;
 | |
|     registerDataOut <= -16#7D89#;
 | |
|     registerWrite <= '1', '0' after clockPeriod;
 | |
|     wait for registerWriteDelay;
 | |
|     registerDataOut <= -16#7641#;
 | |
|     registerWrite <= '1', '0' after clockPeriod;
 | |
|     wait for registerWriteDelay;
 | |
|     registerDataOut <= -16#6A6D#;
 | |
|     registerWrite <= '1', '0' after clockPeriod;
 | |
|     wait for registerWriteDelay;
 | |
|     registerDataOut <= -16#5A82#;
 | |
|     registerWrite <= '1', '0' after clockPeriod;
 | |
|     wait for registerWriteDelay;
 | |
|     registerDataOut <= -16#471C#;
 | |
|     registerWrite <= '1', '0' after clockPeriod;
 | |
|     wait for registerWriteDelay;
 | |
|     registerDataOut <= -16#30FB#;
 | |
|     registerWrite <= '1', '0' after clockPeriod;
 | |
|     wait for registerWriteDelay;
 | |
|     registerDataOut <= -16#18F9#;
 | |
|     registerWrite <= '1', '0' after clockPeriod;
 | |
|     wait for 10*registerWriteDelay;
 | |
|                                                           -- write Y FIFO values
 | |
|     wait until rising_edge(clock_int);
 | |
|     registerAddress <= yFifoRegisterAddress;
 | |
|     registerDataOut <= 16#7FFF#;
 | |
|     registerWrite <= '1', '0' after clockPeriod;
 | |
|     wait for registerWriteDelay;
 | |
|     registerDataOut <= 16#7D89#;
 | |
|     registerWrite <= '1', '0' after clockPeriod;
 | |
|     wait for registerWriteDelay;
 | |
|     registerDataOut <= 16#7641#;
 | |
|     registerWrite <= '1', '0' after clockPeriod;
 | |
|     wait for registerWriteDelay;
 | |
|     registerDataOut <= 16#6A6D#;
 | |
|     registerWrite <= '1', '0' after clockPeriod;
 | |
|     wait for registerWriteDelay;
 | |
|     registerDataOut <= 16#5A82#;
 | |
|     registerWrite <= '1', '0' after clockPeriod;
 | |
|     wait for registerWriteDelay;
 | |
|     registerDataOut <= 16#471C#;
 | |
|     registerWrite <= '1', '0' after clockPeriod;
 | |
|     wait for registerWriteDelay;
 | |
|     registerDataOut <= 16#30FB#;
 | |
|     registerWrite <= '1', '0' after clockPeriod;
 | |
|     wait for registerWriteDelay;
 | |
|     registerDataOut <= 16#18F9#;
 | |
|     registerWrite <= '1', '0' after clockPeriod;
 | |
|     wait for registerWriteDelay;
 | |
|     registerDataOut <= 16#0000#;
 | |
|     registerWrite <= '1', '0' after clockPeriod;
 | |
|     wait for registerWriteDelay;
 | |
|     registerDataOut <= -16#18F9#;
 | |
|     registerWrite <= '1', '0' after clockPeriod;
 | |
|     wait for registerWriteDelay;
 | |
|     registerDataOut <= -16#30FB#;
 | |
|     registerWrite <= '1', '0' after clockPeriod;
 | |
|     wait for registerWriteDelay;
 | |
|     registerDataOut <= -16#471C#;
 | |
|     registerWrite <= '1', '0' after clockPeriod;
 | |
|     wait for registerWriteDelay;
 | |
|     registerDataOut <= -16#5A82#;
 | |
|     registerWrite <= '1', '0' after clockPeriod;
 | |
|     wait for registerWriteDelay;
 | |
|     registerDataOut <= -16#6A6D#;
 | |
|     registerWrite <= '1', '0' after clockPeriod;
 | |
|     wait for registerWriteDelay;
 | |
|     registerDataOut <= -16#7641#;
 | |
|     registerWrite <= '1', '0' after clockPeriod;
 | |
|     wait for registerWriteDelay;
 | |
|     registerDataOut <= -16#7D89#;
 | |
|     registerWrite <= '1', '0' after clockPeriod;
 | |
|     wait for registerWriteDelay;
 | |
|     registerDataOut <= -16#7FFF#;
 | |
|     registerWrite <= '1', '0' after clockPeriod;
 | |
|     wait for registerWriteDelay;
 | |
|     registerDataOut <= -16#7D89#;
 | |
|     registerWrite <= '1', '0' after clockPeriod;
 | |
|     wait for registerWriteDelay;
 | |
|     registerDataOut <= -16#7641#;
 | |
|     registerWrite <= '1', '0' after clockPeriod;
 | |
|     wait for registerWriteDelay;
 | |
|     registerDataOut <= -16#6A6D#;
 | |
|     registerWrite <= '1', '0' after clockPeriod;
 | |
|     wait for registerWriteDelay;
 | |
|     registerDataOut <= -16#5A82#;
 | |
|     registerWrite <= '1', '0' after clockPeriod;
 | |
|     wait for registerWriteDelay;
 | |
|     registerDataOut <= -16#471C#;
 | |
|     registerWrite <= '1', '0' after clockPeriod;
 | |
|     wait for registerWriteDelay;
 | |
|     registerDataOut <= -16#30FB#;
 | |
|     registerWrite <= '1', '0' after clockPeriod;
 | |
|     wait for registerWriteDelay;
 | |
|     registerDataOut <= -16#18F9#;
 | |
|     registerWrite <= '1', '0' after clockPeriod;
 | |
|     wait for registerWriteDelay;
 | |
|     registerDataOut <= 16#0000#;
 | |
|     registerWrite <= '1', '0' after clockPeriod;
 | |
|     wait for registerWriteDelay;
 | |
|     registerDataOut <= 16#18F9#;
 | |
|     registerWrite <= '1', '0' after clockPeriod;
 | |
|     wait for registerWriteDelay;
 | |
|     registerDataOut <= 16#30FB#;
 | |
|     registerWrite <= '1', '0' after clockPeriod;
 | |
|     wait for registerWriteDelay;
 | |
|     registerDataOut <= 16#471C#;
 | |
|     registerWrite <= '1', '0' after clockPeriod;
 | |
|     wait for registerWriteDelay;
 | |
|     registerDataOut <= 16#5A82#;
 | |
|     registerWrite <= '1', '0' after clockPeriod;
 | |
|     wait for registerWriteDelay;
 | |
|     registerDataOut <= 16#6A6D#;
 | |
|     registerWrite <= '1', '0' after clockPeriod;
 | |
|     wait for registerWriteDelay;
 | |
|     registerDataOut <= 16#7641#;
 | |
|     registerWrite <= '1', '0' after clockPeriod;
 | |
|     wait for registerWriteDelay;
 | |
|     registerDataOut <= 16#7D89#;
 | |
|     registerWrite <= '1', '0' after clockPeriod;
 | |
|     wait for 10*registerWriteDelay;
 | |
|                                                            -- end pattern update
 | |
|     wait until rising_edge(clock_int);
 | |
|     registerAddress <= controlRegisterAddress;
 | |
|     registerDataOut <= 0;
 | |
|     registerWrite <= '1', '0' after clockPeriod;
 | |
|     wait for registerWriteDelay;
 | |
| 
 | |
|     ----------------------------------------------------------------------------
 | |
|                                                             -- playing waveforms
 | |
|     wait for 7 us - now;
 | |
|     testInformation <= pad("Playing waveforms", testInformation'length);
 | |
|     wait for 0 ns;
 | |
|     print(testSeparator & cr & testInformation);
 | |
|                                                                     -- start run
 | |
|     wait until rising_edge(clock_int);
 | |
|     registerAddress <= controlRegisterAddress;
 | |
|     registerDataOut <= controlRun + patternLength * 2**(hWData'length-patternAddressBitNb);
 | |
|     registerWrite <= '1', '0' after clockPeriod;
 | |
|     wait for registerWriteDelay;
 | |
|                                                             -- run for some time
 | |
|     wait for 250 us - now;
 | |
|                                                                      -- stop run
 | |
|     wait until rising_edge(clock_int);
 | |
|     registerAddress <= controlRegisterAddress;
 | |
|     registerDataOut <= 0;
 | |
|     registerWrite <= '1', '0' after clockPeriod;
 | |
|     wait for registerWriteDelay;
 | |
| 
 | |
|     ----------------------------------------------------------------------------
 | |
|                                          -- play data points to RAM for overflow
 | |
|     wait for 300 us - now;
 | |
|     testInformation <= pad(
 | |
|       "Writing waveform to RAM for overflow", testInformation'length
 | |
|     );
 | |
|     wait for 0 ns;
 | |
|     print(testSeparator & cr & testInformation);
 | |
|                                                          -- start pattern update
 | |
|     wait until rising_edge(clock_int);
 | |
|     registerAddress <= controlRegisterAddress;
 | |
|     registerDataOut <= controlUpdatePattern;
 | |
|     registerWrite <= '1', '0' after clockPeriod;
 | |
|     wait for registerWriteDelay;
 | |
|                                                           -- write X FIFO values
 | |
|     wait until rising_edge(clock_int);
 | |
|     registerAddress <= xFifoRegisterAddress;
 | |
|     registerDataOut <=  16#4000#;
 | |
|     registerWrite <= '1', '0' after clockPeriod;
 | |
|     wait for registerWriteDelay;
 | |
|     registerDataOut <= -16#7000#;
 | |
|     registerWrite <= '1', '0' after clockPeriod;
 | |
|     wait for registerWriteDelay;
 | |
|     registerDataOut <= -16#7000#;
 | |
|     registerWrite <= '1', '0' after clockPeriod;
 | |
|     wait for registerWriteDelay;
 | |
|     registerDataOut <=  16#7000#;
 | |
|     registerWrite <= '1', '0' after clockPeriod;
 | |
|     wait for 10*registerWriteDelay;
 | |
|                                                           -- write Y FIFO values
 | |
|     wait until rising_edge(clock_int);
 | |
|     registerAddress <= yFifoRegisterAddress;
 | |
|     registerDataOut <= -16#4000#;
 | |
|     registerWrite <= '1', '0' after clockPeriod;
 | |
|     wait for registerWriteDelay;
 | |
|     registerDataOut <=  16#7000#;
 | |
|     registerWrite <= '1', '0' after clockPeriod;
 | |
|     wait for registerWriteDelay;
 | |
|     registerDataOut <=  16#7000#;
 | |
|     registerWrite <= '1', '0' after clockPeriod;
 | |
|     wait for registerWriteDelay;
 | |
|     registerDataOut <= -16#7000#;
 | |
|     registerWrite <= '1', '0' after clockPeriod;
 | |
|     wait for 10*registerWriteDelay;
 | |
|                                              -- end pattern update and start run
 | |
|     patternLength <= 4;
 | |
|     wait until rising_edge(clock_int);
 | |
|     registerAddress <= controlRegisterAddress;
 | |
|     registerDataOut <= controlRun + patternLength * 2**(hWData'length-patternAddressBitNb);
 | |
|     registerWrite <= '1', '0' after clockPeriod;
 | |
|     wait for registerWriteDelay;
 | |
|                                                     -- set lower speed execution
 | |
|     updatePeriod <= 9;
 | |
|     wait until rising_edge(clock_int);
 | |
|     registerAddress <= speedRegisterAddress;
 | |
|     registerDataOut <= updatePeriod;
 | |
|     registerWrite <= '1', '0' after clockPeriod;
 | |
|     wait for registerWriteDelay;
 | |
|     ----------------------------------------------------------------------------
 | |
|                                                            -- sin/cos debug mode
 | |
|     wait for 700 us - now;
 | |
|     testInformation <= pad("Drawing debug mode circle", testInformation'length);
 | |
|     wait for 0 ns;
 | |
|     print(testSeparator & cr & testInformation);
 | |
|     selSinCos <= '1';
 | |
|     ----------------------------------------------------------------------------
 | |
|                                                               -- stop simulation
 | |
|     wait for 1 ms - now;
 | |
|     assert false
 | |
|       report "End" & cr & "     --> " &
 | |
|              "End of simulation"
 | |
|       severity failure;
 | |
|   end process testSequence;
 | |
| 
 | |
|   ------------------------------------------------------------------------------
 | |
|                                                               -- AMBA bus access
 | |
|   busAccess: process
 | |
|     variable writeAccess: boolean;
 | |
|     variable hRData01: std_ulogic_vector(hRData'range);
 | |
|   begin
 | |
|     hAddr <= (others => '-');
 | |
|     hWData <= (others => '-');
 | |
|     hTrans <= transIdle;
 | |
|     hSel <= '0';
 | |
|     hWrite <= '0';
 | |
|     wait on registerWrite, registerRead;
 | |
|     writeAccess := false;
 | |
|     if rising_edge(registerWrite) then
 | |
|       writeAccess := true;
 | |
|     end if;
 | |
|                                                 -- phase 1: address and controls
 | |
|     wait until rising_edge(clock_int);
 | |
|     hAddr <= to_unsigned(registerAddress, hAddr'length);
 | |
|     hTrans <= transNonSeq;
 | |
|     hSel <= '1';
 | |
|     if writeAccess then
 | |
|       hWrite <= '1';
 | |
|     end if;
 | |
|                                                                 -- phase 2: data
 | |
|     wait until rising_edge(clock_int);
 | |
|     hAddr <= (others => '-');
 | |
|     hTrans <= transIdle;
 | |
|     hSel <= '0';
 | |
|     hWrite <= '0';
 | |
|     if writeAccess then
 | |
|       hWData <= std_uLogic_vector(to_signed(registerDataOut, hWData'length));
 | |
|     else
 | |
|       wait until falling_edge(clock_int);
 | |
|       hRData01 := hRData;
 | |
|       for index in hRData01'range loop
 | |
|         if (hRData01(index) /= '0') and (hRData01(index) /= '1') then
 | |
|           hRData01(index) := '0';
 | |
|         end if;
 | |
|       end loop;
 | |
|       registerDataIn <= to_integer(unsigned(hRData01));
 | |
|     end if;
 | |
|     wait until rising_edge(clock_int);
 | |
|   end process;
 | |
| 
 | |
| END ARCHITECTURE test;
 |