Initial commit
This commit is contained in:
		| @@ -0,0 +1,70 @@ | ||||
| LIBRARY std; | ||||
|   USE std.textio.all; | ||||
| LIBRARY Common_test; | ||||
|   USE Common_test.testUtils.all; | ||||
|  | ||||
| ARCHITECTURE test OF charToMorseController_tester IS | ||||
|                                                               -- clock and reset | ||||
|   constant clockPeriod: time := (1.0/clockFrequency) * 1 sec; | ||||
|   signal sClock: std_uLogic := '1'; | ||||
|   signal sReset: std_uLogic := '1'; | ||||
|                                                               -- character input | ||||
|   constant textToSend : string := "tea time"; | ||||
|   constant charInputDelay : time := 200 us; | ||||
|   signal writePointer, readPointer : integer := 0; | ||||
|   signal fifoDataAvailable: std_uLogic := '0'; | ||||
|  | ||||
| BEGIN | ||||
|                                                               -- clock and reset | ||||
|   sClock <= not sClock after clockPeriod/2; | ||||
|   clock <= transport sClock after clockPeriod*9/10; | ||||
|   sReset <= '1', '0' after 2*clockPeriod; | ||||
|   reset <= sReset; | ||||
|  | ||||
|   ------------------------------------------------------------------------------ | ||||
|                                                                 -- test sequence | ||||
|   testSequence: process | ||||
|   begin | ||||
|                                                               -- send characters | ||||
|     for index in 1 to textToSend'length loop | ||||
|       wait for charInputDelay; | ||||
|       writePointer <= writePointer + 1; | ||||
|     end loop; | ||||
|                                                             -- end of fifo input | ||||
|     print(cr & cr); | ||||
|     assert false | ||||
|     report "End of text" | ||||
|       severity note; | ||||
|     wait; | ||||
|   end process testSequence; | ||||
|  | ||||
|   ------------------------------------------------------------------------------ | ||||
|                                                               -- fifo simulation | ||||
|   fifo: process | ||||
|   begin | ||||
|                                                               -- wait for action | ||||
|     wait until rising_edge(sClock); | ||||
|                                                              -- add char in fifo | ||||
|     if readChar = '1' then | ||||
|       readPointer <= readPointer + 1; | ||||
|     end if; | ||||
|                                                             -- end of simulation | ||||
|     if readPointer = textToSend'length then | ||||
|       wait for charInputDelay; | ||||
|       print(cr & cr); | ||||
|       assert false | ||||
|       report "End of simulation" | ||||
|         severity failure; | ||||
|     end if; | ||||
|   end process fifo; | ||||
|  | ||||
|   char <= std_ulogic_vector(to_unsigned( | ||||
|     character'pos(textToSend(readPointer+1)), char'length | ||||
|   )) when (readPointer < textToSend'length) and (fifoDataAvailable = '1') | ||||
|   else (others => '-'); | ||||
|  | ||||
|   fifoDataAvailable <= '1' when readPointer < writePointer | ||||
|   else '0'; | ||||
|   charNotReady <= not fifoDataAvailable; | ||||
|  | ||||
| END ARCHITECTURE test; | ||||
							
								
								
									
										108
									
								
								05-Morse/Morse_test/hdl/morseDecoder_tester_test.vhd
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										108
									
								
								05-Morse/Morse_test/hdl/morseDecoder_tester_test.vhd
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,108 @@ | ||||
| LIBRARY Common_test; | ||||
|   USE Common_test.testUtils.all; | ||||
|  | ||||
| ARCHITECTURE test OF morseDecoder_tester IS | ||||
|                                                               -- clock and reset | ||||
|   constant clockPeriod: time := (1.0/clockFrequency) * 1 sec; | ||||
|   signal sClock: std_uLogic := '1'; | ||||
|   signal sReset: std_uLogic := '1'; | ||||
|                                                                          -- UART | ||||
|   constant uartPeriod: time := (1.0/uartBaudRate) * 1 sec; | ||||
|   constant uartWriteInterval: time := 2 ms; | ||||
|   signal uartInString : string(1 to 32); | ||||
|   signal uartSendInString: std_uLogic; | ||||
|   signal uartSendInDone: std_uLogic; | ||||
|   signal uartInByte: character; | ||||
|   signal uartSendInByte: std_uLogic; | ||||
|  | ||||
| BEGIN | ||||
|                                                               -- clock and reset | ||||
|   sClock <= not sClock after clockPeriod/2; | ||||
|   clock <= transport sClock after clockPeriod*9/10; | ||||
|   sReset <= '1', '0' after 2*clockPeriod; | ||||
|   reset <= sReset; | ||||
|  | ||||
|   ------------------------------------------------------------------------------ | ||||
|                                                                 -- test sequence | ||||
|   process | ||||
|   begin | ||||
|     uartSendInString <= '0'; | ||||
|     wait for 4*uartPeriod; | ||||
|                                          -- characters with max. 2 Morse symbols | ||||
|     print("Sending characters with max. 2 symbols"); | ||||
|     uartInString <= pad("tea time", uartInString'length); | ||||
|     uartSendInString <= '1', '0' after 1 ns; | ||||
|     wait until uartSendInDone = '1'; | ||||
|     wait for uartWriteInterval; | ||||
|                                                -- characters starting with a dot | ||||
|     print("Sending characters starting with a dot"); | ||||
|     uartInString <= pad("eish54v3uf2arlwpj1", uartInString'length); | ||||
|     uartSendInString <= '1', '0' after 1 ns; | ||||
|     wait until uartSendInDone = '1'; | ||||
|     wait for uartWriteInterval; | ||||
|                                               -- characters starting with a dash | ||||
|     print("Sending characters starting with a dash"); | ||||
|     uartInString <= pad("tndb6xkcymgz7qo890", uartInString'length); | ||||
|     uartSendInString <= '1', '0' after 1 ns; | ||||
|     wait until uartSendInDone = '1'; | ||||
|     wait for uartWriteInterval; | ||||
|                                                             -- end of simulation | ||||
|     print(cr & cr); | ||||
|     assert false | ||||
|       report "End of simulation" | ||||
|       severity failure; | ||||
|     wait; | ||||
|   end process; | ||||
|  | ||||
|   --============================================================================ | ||||
|                                                                    -- uart send | ||||
|   rsSendSerialString: process | ||||
|     constant uartBytePeriod : time := 15*uartPeriod; | ||||
|     variable commandRight: natural; | ||||
|   begin | ||||
|  | ||||
|     uartSendInByte <= '0'; | ||||
|     uartSendInDone <= '0'; | ||||
|  | ||||
|     wait until rising_edge(uartSendInString); | ||||
|  | ||||
|     commandRight := uartInString'right; | ||||
|     while uartInString(commandRight) = ' ' loop | ||||
|       commandRight := commandRight-1; | ||||
|     end loop; | ||||
|  | ||||
|     for index in uartInString'left to commandRight loop | ||||
|       uartInByte <= uartInString(index); | ||||
|       uartSendInByte <= '1', '0' after 1 ns; | ||||
|       wait for uartBytePeriod; | ||||
|     end loop; | ||||
|  | ||||
|     uartInByte <= cr; | ||||
|     uartSendInByte <= '1', '0' after 1 ns; | ||||
|     wait for uartBytePeriod; | ||||
|  | ||||
|     uartSendInDone <= '1'; | ||||
|     wait for 1 ns; | ||||
|  | ||||
|   end process rsSendSerialString; | ||||
|  | ||||
|   rsSendSerialByte: process | ||||
|     variable rxData: unsigned(uartDataBitNb-1 downto 0); | ||||
|   begin | ||||
|     RxD <= '1'; | ||||
|  | ||||
|     wait until rising_edge(uartSendInByte); | ||||
|     rxData := to_unsigned(character'pos(uartInByte), rxData'length); | ||||
|  | ||||
|     RxD <= '0'; | ||||
|     wait for uartPeriod; | ||||
|  | ||||
|     for index in rxData'reverse_range loop | ||||
|       RxD <= rxData(index); | ||||
|       wait for uartPeriod; | ||||
|     end loop; | ||||
|  | ||||
|   end process rsSendSerialByte; | ||||
|  | ||||
| END ARCHITECTURE test; | ||||
|  | ||||
							
								
								
									
										106
									
								
								05-Morse/Morse_test/hdl/morseEncoder_tester_test.vhd
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										106
									
								
								05-Morse/Morse_test/hdl/morseEncoder_tester_test.vhd
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,106 @@ | ||||
| LIBRARY Common_test; | ||||
|   USE Common_test.testUtils.all; | ||||
|  | ||||
| ARCHITECTURE test OF morseEncoder_tester IS | ||||
|                                                               -- clock and reset | ||||
|   constant clockPeriod: time := (1.0/clockFrequency) * 1 sec; | ||||
|   signal sClock: std_uLogic := '1'; | ||||
|   signal sReset: std_uLogic := '1'; | ||||
|                                                                          -- UART | ||||
|   constant uartPeriod: time := (1.0/uartBaudRate) * 1 sec; | ||||
|   constant uartWriteInterval: time := 8 ms; | ||||
|   signal uartInString : string(1 to 32); | ||||
|   signal uartSendInString: std_uLogic; | ||||
|   signal uartSendInDone: std_uLogic; | ||||
|   signal uartInByte: character; | ||||
|   signal uartSendInByte: std_uLogic; | ||||
|  | ||||
| BEGIN | ||||
|                                                               -- clock and reset | ||||
|   sClock <= not sClock after clockPeriod/2; | ||||
|   clock <= transport sClock after clockPeriod*9/10; | ||||
|   sReset <= '1', '0' after 2*clockPeriod; | ||||
|   reset <= sReset; | ||||
|   ------------------------------------------------------------------------------ | ||||
|                                                                 -- test sequence | ||||
|   process | ||||
|   begin | ||||
|     uartSendInString <= '0'; | ||||
|     wait for 4*uartPeriod; | ||||
|                                          -- characters with max. 2 Morse symbols | ||||
|     print("Sending characters with max. 2 symbols"); | ||||
|     uartInString <= pad("tea time", uartInString'length); | ||||
|     uartSendInString <= '1', '0' after 1 ns; | ||||
|     wait until uartSendInDone = '1'; | ||||
|     wait for uartWriteInterval; | ||||
|                                                -- characters starting with a dot | ||||
|     print("Sending characters starting with a dot"); | ||||
|     uartInString <= pad("eish54v3uf2arlwpj1", uartInString'length); | ||||
|     uartSendInString <= '1', '0' after 1 ns; | ||||
|     wait until uartSendInDone = '1'; | ||||
|     wait for uartWriteInterval; | ||||
|                                               -- characters starting with a dash | ||||
|     print("Sending characters starting with a dash"); | ||||
|     uartInString <= pad("tndb6xkcymgz7qo890", uartInString'length); | ||||
|     uartSendInString <= '1', '0' after 1 ns; | ||||
|     wait until uartSendInDone = '1'; | ||||
|     wait for uartWriteInterval; | ||||
|                                                             -- end of simulation | ||||
|     print(cr & cr); | ||||
|     assert false | ||||
|       report "End of simulation" | ||||
|       severity failure; | ||||
|     wait; | ||||
|   end process; | ||||
|  | ||||
|   --============================================================================ | ||||
|                                                                    -- uart send | ||||
|   rsSendSerialString: process | ||||
|     constant uartBytePeriod : time := 15*uartPeriod; | ||||
|     variable commandRight: natural; | ||||
|   begin | ||||
|  | ||||
|     uartSendInByte <= '0'; | ||||
|     uartSendInDone <= '0'; | ||||
|  | ||||
|     wait until rising_edge(uartSendInString); | ||||
|  | ||||
|     commandRight := uartInString'right; | ||||
|     while uartInString(commandRight) = ' ' loop | ||||
|       commandRight := commandRight-1; | ||||
|     end loop; | ||||
|  | ||||
|     for index in uartInString'left to commandRight loop | ||||
|       uartInByte <= uartInString(index); | ||||
|       uartSendInByte <= '1', '0' after 1 ns; | ||||
|       wait for uartBytePeriod; | ||||
|     end loop; | ||||
|  | ||||
|     uartInByte <= cr; | ||||
|     uartSendInByte <= '1', '0' after 1 ns; | ||||
|     wait for uartBytePeriod; | ||||
|  | ||||
|     uartSendInDone <= '1'; | ||||
|     wait for 1 ns; | ||||
|  | ||||
|   end process rsSendSerialString; | ||||
|  | ||||
|   rsSendSerialByte: process | ||||
|     variable rxData: unsigned(uartDataBitNb-1 downto 0); | ||||
|   begin | ||||
|     RxD <= '1'; | ||||
|  | ||||
|     wait until rising_edge(uartSendInByte); | ||||
|     rxData := to_unsigned(character'pos(uartInByte), rxData'length); | ||||
|  | ||||
|     RxD <= '0'; | ||||
|     wait for uartPeriod; | ||||
|  | ||||
|     for index in rxData'reverse_range loop | ||||
|       RxD <= rxData(index); | ||||
|       wait for uartPeriod; | ||||
|     end loop; | ||||
|  | ||||
|   end process rsSendSerialByte; | ||||
|  | ||||
| END ARCHITECTURE test; | ||||
		Reference in New Issue
	
	Block a user