From 775ccb997a37af1875e228647b6ba308d30990a7 Mon Sep 17 00:00:00 2001
From: Jack Driscoll <jd12g21@soton.ac.uk>
Date: Fri, 18 Oct 2024 20:11:00 +0000
Subject: [PATCH] Update basic_msf_signal_tb.vhd

---
 MSF/MSF_decoder/tb/basic_msf_signal_tb.vhd | 69 +++++++++++-----------
 1 file changed, 36 insertions(+), 33 deletions(-)

diff --git a/MSF/MSF_decoder/tb/basic_msf_signal_tb.vhd b/MSF/MSF_decoder/tb/basic_msf_signal_tb.vhd
index bf2b947..1d84fdd 100644
--- a/MSF/MSF_decoder/tb/basic_msf_signal_tb.vhd
+++ b/MSF/MSF_decoder/tb/basic_msf_signal_tb.vhd
@@ -15,10 +15,11 @@ architecture basic_msf_signal of basic_msf_signal_tb is
 	
 
 	
-	--Signal Declaration--  
-	signal clk			: std_logic := '0'; --10Hz clock for MSF pulse
-	signal fast_clk		: std_logic := '0'; --32768Hz clock for crystal
+	--Signal Declaration--
+	signal clk			: std_logic := '0';
+	signal fast_clk		: std_logic := '0';
 	signal rst			: std_logic := '0';
+	signal read_next	: std_logic := '0';
 	signal h_filter_in	: std_logic := '1';
 
 	signal year_out		: std_logic_vector (7 downto 0) := (others => '0');
@@ -31,12 +32,11 @@ architecture basic_msf_signal of basic_msf_signal_tb is
 	signal msf_a_string	: std_logic_vector (58 downto 0) := (others => '0');
 	signal msf_b_string	: std_logic_vector (58 downto 0) := (others => '0');
 	
-	signal bit_count	: integer := 0;
+	signal bit_count	: integer := 58;
 	
 	--File variables--
 	file f_TIME_DATA	: text;
-
-
+	
 	function parity_check(vector : std_logic_vector) return std_logic is
 	    variable count : integer := 0;
 		begin
@@ -70,9 +70,9 @@ architecture basic_msf_signal of basic_msf_signal_tb is
 		FAST_CLOCK_CYCLE: process
 			begin
 				fast_clk <= '0';
-				wait for 30.517578 us;
+				wait for 200 us;
 				fast_clk <= '1';
-				wait for 30.517578 us;
+				wait for 200 us;
 		end process FAST_CLOCK_CYCLE;
 		
 		--Read time data from file--
@@ -84,14 +84,14 @@ architecture basic_msf_signal of basic_msf_signal_tb is
 			variable f_year		: integer;
 			variable f_month	: integer;
 			variable f_dmonth	: integer;
-			variable f_dweek	: string (1 to 9);
+			variable f_dweek	: string (1 to 6);
 			variable f_hour		: integer;
 			variable f_minute	: integer;
 			variable remm		: integer;
 			
 			begin
-				file_open(f_TIME_DATA, "H:\MSF_Project\time_data.csv", read_mode);
 				
+				wait until rising_edge(read_next);
 				msf_a_string(58 downto 43) <= (others => '0'); 
 				msf_b_string(58 downto 43) <= "0000000011111110"; --default DUT1
 				
@@ -102,7 +102,7 @@ architecture basic_msf_signal of basic_msf_signal_tb is
 				wait until rising_edge(fast_clk);
 				msf_a_string(42 downto 35) <= year_out;
 				wait until rising_edge(fast_clk);
-				msf_b_string(5 downto 5) <= parity_check(year_out);
+				msf_b_string(5) <= parity_check(year_out);
 				
 				readline(f_TIME_DATA, file_line);
 				read(file_line, f_month);
@@ -118,7 +118,7 @@ architecture basic_msf_signal of basic_msf_signal_tb is
 				wait until rising_edge(fast_clk);
 				msf_a_string(29 downto 24) <= d_month_out;
 				wait until rising_edge(fast_clk);
-				msf_b_string(4 downto 4) <= parity_check(month_out & d_month_out);
+				msf_b_string(4) <= parity_check(msf_a_string(34 downto 24));
 				
 				readline(f_TIME_DATA, file_line);
 				read(file_line, f_dweek);
@@ -140,7 +140,7 @@ architecture basic_msf_signal of basic_msf_signal_tb is
 				wait until rising_edge(fast_clk);
 				msf_a_string(23 downto 21) <= d_week_out;
 				wait until rising_edge(fast_clk);
-				msf_b_string(3 downto 3) <= parity_check(d_week_out);
+				msf_b_string(3) <= parity_check(d_week_out);
 				
 				readline(f_TIME_DATA, file_line);
 				read(file_line, f_hour);
@@ -155,41 +155,44 @@ architecture basic_msf_signal of basic_msf_signal_tb is
 				minute_out(6 downto 4) <= std_logic_vector(to_unsigned((f_minute - f_minute mod 10)/10, 3));
 				wait until rising_edge(fast_clk);
 				msf_a_string(14 downto 8) <= minute_out;
+				readline(f_TIME_DATA, file_line); --whitespace
 				wait until rising_edge(fast_clk);
-				msf_b_string(2 downto 2) <= parity_check(f_hour & f_minute);
+				msf_b_string(2) <= parity_check(msf_a_string(20 downto 8));
+				msf_b_string(1) <= '1'; --BST
 				
 				msf_a_string(7 downto 0) <= "01111110";
-				msf_b_string(1 downto 1) <= '1'; --assume BST
 				
-				wait;
 				
 		end process DATA_READ;
 		
 		--Send data as MSF signal--
 		SEND_DATA: process
 			begin
-				--Start of minute indicator--
-				wait until rising_edge(clk);
-				wait until rising_edge(clk);
-				h_filter_in <= '0';
-				wait for 450 ms;
-				wait until rising_edge(clk);
-				h_filter_in <= '1';
-				wait for 450 ms;
-				bit_count <= 59;
-				for i in 58 downto 0 loop
-					bit_count <= bit_count - 1;
+				file_open(f_TIME_DATA, "H:\MSF_Project\time_data.csv", read_mode);
+				while not endfile(f_TIME_DATA) loop
+					--Start of minute indicator--
+					bit_count <= 59;
+					read_next <= '1';
 					wait until rising_edge(clk);
+					read_next <= '0';
 					h_filter_in <= '0';
-					wait until rising_edge(clk);
-					h_filter_in <= msf_a_string(bit_count) xor '1';
-					wait until rising_edge(clk);
-					h_filter_in <= msf_b_string(bit_count) xor '1'; --rely on don't care
+					wait for 450 ms;
 					wait until rising_edge(clk);
 					h_filter_in <= '1';
-					wait for 750 ms;
+					wait for 450 ms;
+					for i in 0 to 58 loop
+						bit_count <= bit_count - 1;
+						wait until rising_edge(clk);
+						h_filter_in <= '0';
+						wait until rising_edge(clk);
+						h_filter_in <= msf_a_string(bit_count) xor '1';
+						wait until rising_edge(clk);
+						h_filter_in <= msf_b_string(bit_count) xor '1'; --rely on don't care
+						wait until rising_edge(clk);
+						h_filter_in <= '1';
+						wait for 750 ms;
+					end loop;
 				end loop;
-				
 		end process SEND_DATA;
 		
 		
-- 
GitLab