-- Copyright © 1993 by McGraw-Hill, Inc. and Zainalabedin Navabi
-- FIGURE 8.29
-- ENTITY DECLERATION OF TWO-PHASE CLOCK :
USE STD.TEXTIO.ALL;
ENTITY two_phase_clock IS END two_phase_clock;
--
-- GENERATING AN ASCII PLOT WITH 5 NS RESOLUTION FOR TWO-PHASE CLOCK :
RCHITECTURE input_output OF two_phase_clock IS
SIGNAL c1 : BIT := '1';
SIGNAL c2 : BIT := '0';
SIGNAL print_tick : BIT := '0';
CONSTANT print_resolution : TIME := 5 NS;
BEGIN
phase1: c1 <= NOT c1 AFTER 500 NS WHEN NOW < 2 US ELSE c1;
phase2: PROCESS
BEGIN
WAIT UNTIL c1 = '0';
WAIT FOR 10 NS;
c2 <= '1';
WAIT FOR 480 NS;
c2 <= '0';
END PROCESS phase2;
print_tick <= NOT print_tick AFTER print_resolution WHEN NOW <= 2 US
ELSE print_tick;
writing: PROCESS (print_tick, c1, c2)
FILE flush : TEXT IS OUT "clock4.out";
VARIABLE header : STRING (1 TO 18) := " c1 c2 ";
VARIABLE l : LINE;
PROCEDURE append_wave_slice (SIGNAL s : BIT) IS
VARIABLE lo_value : STRING (1 TO 3) := "| ";
VARIABLE hi_value : STRING (1 TO 3) := " |";
VARIABLE lo_to_hi : STRING (1 TO 3) := ".-+";
VARIABLE hi_to_lo : STRING (1 TO 3) := "+-.";
BEGIN
IF s'LAST_EVENT < print_resolution AND s'LAST_VALUE /= s THEN
IF s = '1' THEN
WRITE (l, lo_to_hi, RIGHT, 5);
ELSE
WRITE (l, hi_to_lo, RIGHT, 5);
END IF;
ELSE
IF s = '1' THEN
WRITE (l, hi_value, RIGHT, 5);
ELSE
WRITE (l, lo_value, RIGHT, 5);
END IF;
END IF;
END append_wave_slice;
BEGIN
IF NOW = 0 US THEN
WRITE (l, header, LEFT, 0);
WRITELINE (flush, l);
END IF;
WRITE (l, NOW, RIGHT, 8, NS);
append_wave_slice (c1);
append_wave_slice (c2);
WRITELINE (flush, l);
END PROCESS writing;
END input_output;
--