Revision 1405
Added by markw over 1 year ago
| atari_chips/gtia/gtiamax.vhd | ||
|---|---|---|
| 
     	signal COLOUR_OSC_PHASED : std_logic_vector(1 downto 0);
 
   | 
||
| 
     | 
||
| 
     	signal OSC_CLEAN : std_logic;
 
   | 
||
| 
     	signal OSC_CLEAN_FAST : std_logic;
 
   | 
||
| 
     	signal OSC_CLEAN_VIDEO : std_logic;
 
   | 
||
| 
     	signal OSC_CLEAN_EVENT : std_logic;
 
   | 
||
| 
     	signal OSC_CLEAN_FAST_EVENT : std_logic;
 
   | 
||
| 
     	signal CC_FALLING_FAST : std_logic;
 
   | 
||
| 
     	signal CC_FALLING : std_logic;
 
   | 
||
| 
     	signal OSC_CLEAN_PREV_REG : std_logic;
 
   | 
||
| 
     | 
||
| 
     	signal S_OUT : std_logic_vector(3 downto 0);
 
   | 
||
| 
     | 
||
| ... | ... | |
| 
     			 c1 => FAST_CLK, -- 300MHz
 
   | 
||
| 
     			 locked => RESET_N);
 
   | 
||
| 
     | 
||
| 
     	process(clk,reset_n)
 
   | 
||
| 
     	process(cc_falling_fast,reset_n)
 
   | 
||
| 
     	begin
 
   | 
||
| 
     		if (reset_n='0') then
 
   | 
||
| 
     			AN_DEL_REG <= (others=>'0');
 
   | 
||
| 
     			AN_DEL2_REG <= (others=>'0');
 
   | 
||
| 
     		elsif (clk'event and clk='1') then
 
   | 
||
| 
     		elsif (cc_falling_fast'event and cc_falling_fast='1') then
 
   | 
||
| 
     			AN_DEL_REG <= AN_DEL_NEXT;
 
   | 
||
| 
     			AN_DEL2_REG <= AN_DEL2_NEXT;
 
   | 
||
| 
     		end if;
 
   | 
||
| 
     	end process;
 
   | 
||
| 
     	AN_DEL_NEXT <= AN;
 
   | 
||
| 
     	AN_DEL2_NEXT <= AN_DEL_REG;
 
   | 
||
| 
     | 
||
| 
     	process(AN,AN_DEL_REG,AN_DEL2_REG,CC_FALLING)
 
   | 
||
| 
     	begin
 
   | 
||
| 
     		AN_DEL_NEXT <= AN_DEL_REG;
 
   | 
||
| 
     		AN_DEL2_NEXT <= AN_DEL2_REG;
 
   | 
||
| 
     | 
||
| 
     		if (CC_FALLING='1') then
 
   | 
||
| 
     			AN_DEL_NEXT <= AN;
 
   | 
||
| 
     			AN_DEL2_NEXT <= AN_DEL_REG;
 
   | 
||
| 
     		end if;
 
   | 
||
| 
     	end process;
 
   | 
||
| 
     | 
||
| 
     bus_adapt : entity work.slave_timing_6502
 
   | 
||
| 
     	PORT MAP
 
   | 
||
| 
     	(
 
   | 
||
| ... | ... | |
| 
     | 
||
| 
     osc_cleaner : entity work.correct_duty
 
   | 
||
| 
     PORT MAP(
 
   | 
||
| 
     	CLK => CLK,
 
   | 
||
| 
     	CLK => FAST_CLK,
 
   | 
||
| 
     	RESET_N => RESET_N,
 
   | 
||
| 
     	CLKIN => OSC,
 
   | 
||
| 
     	CLKOUT => OSC_CLEAN,
 
   | 
||
| 
     	CLKOUT_EVENT => OSC_CLEAN_EVENT
 
   | 
||
| 
     	CLKOUT => OSC_CLEAN_FAST,
 
   | 
||
| 
     	CLKOUT_EVENT => OSC_CLEAN_FAST_EVENT
 
   | 
||
| 
     	);
 
   | 
||
| 
     	CC_FALLING_FAST <= OSC_CLEAN_FAST_EVENT and not(OSC_CLEAN_FAST);
 
   | 
||
| 
     | 
||
| 
     	sync_clk : entity work.synchronizer
 
   | 
||
| 
     	port map
 
   | 
||
| 
     	(
 
   | 
||
| 
     		CLK => CLK,
 
   | 
||
| 
     		RAW => OSC_CLEAN_FAST,
 
   | 
||
| 
     		SYNC => OSC_CLEAN
 
   | 
||
| 
     	);
 
   | 
||
| 
     | 
||
| 
     	process(clk,reset_n)
 
   | 
||
| 
     	begin
 
   | 
||
| 
     		if (reset_n='0') then
 
   | 
||
| 
     			OSC_CLEAN_PREV_REG <= '0';
 
   | 
||
| 
     		elsif (clk'event and clk='1') then
 
   | 
||
| 
     			OSC_CLEAN_PREV_REG <= OSC_CLEAN;
 
   | 
||
| 
     		end if;
 
   | 
||
| 
     	end process;
 
   | 
||
| 
     | 
||
| 
     	OSC_CLEAN_EVENT <= OSC_CLEAN_PREV_REG xor OSC_CLEAN;
 
   | 
||
| 
     	CC_FALLING <= OSC_CLEAN_EVENT and not(OSC_CLEAN);
 
   | 
||
| 
     | 
||
| 
     	pal_ntsc_n <= '1'; -- TODO GPIO
 
   | 
||
| ... | ... | |
| 
     --COLOR <= colour_osc_phased;
 
   | 
||
| 
     LUM(3 downto 0) <= VIDEO_COLOUR(3 downto 0);
 
   | 
||
| 
     | 
||
| 
     FO0 <= OSC_CLEAN;
 
   | 
||
| 
     FO0 <= OSC_CLEAN_FAST;
 
   | 
||
| 
     | 
||
| 
     END vhdl;
 
   | 
||
Improve AN sample timing