unified behavior on address decode
This commit is contained in:
@@ -120,3 +120,4 @@ Logic/LAN_IDE_V2/LAN_IDE_CP_html/images/
|
|||||||
Logic/LAN_IDE_V2/LAN_IDE_CP_html/tim/
|
Logic/LAN_IDE_V2/LAN_IDE_CP_html/tim/
|
||||||
|
|
||||||
Logic/LAN_IDE/LAN_IDE\.zip
|
Logic/LAN_IDE/LAN_IDE\.zip
|
||||||
|
/PCB/ZORRO-LAN-IDE-CP-V2F.s##
|
||||||
|
|||||||
+1464
-1464
File diff suppressed because it is too large
Load Diff
@@ -155,9 +155,7 @@ architecture Behavioral of LAN_IDE_CP is
|
|||||||
|
|
||||||
signal AMIGA_CLK:STD_LOGIC;
|
signal AMIGA_CLK:STD_LOGIC;
|
||||||
signal DS:STD_LOGIC;
|
signal DS:STD_LOGIC;
|
||||||
signal AS_D0:STD_LOGIC;
|
|
||||||
signal AS_D1:STD_LOGIC;
|
|
||||||
|
|
||||||
signal LAN_CS_RST: std_logic;
|
signal LAN_CS_RST: std_logic;
|
||||||
signal LAN_WR_RST: std_logic;
|
signal LAN_WR_RST: std_logic;
|
||||||
signal INT_VECTOR_CYCLE: std_logic;
|
signal INT_VECTOR_CYCLE: std_logic;
|
||||||
@@ -184,7 +182,6 @@ begin
|
|||||||
AMIGA_CLK <= not (C1 xor C3);
|
AMIGA_CLK <= not (C1 xor C3);
|
||||||
DS <= UDS and LDS;
|
DS <= UDS and LDS;
|
||||||
|
|
||||||
|
|
||||||
clock_init: process(reset,CLK_EXT)
|
clock_init: process(reset,CLK_EXT)
|
||||||
begin
|
begin
|
||||||
if(reset='1')then
|
if(reset='1')then
|
||||||
@@ -248,30 +245,16 @@ begin
|
|||||||
end if;
|
end if;
|
||||||
end process clock_init;
|
end process clock_init;
|
||||||
|
|
||||||
ADDRESS_Z3_DECODE: process(reset,FCS)
|
ADDRESS_Z3_DECODE: process(FCS,reset)
|
||||||
begin
|
|
||||||
if(reset='0')then
|
|
||||||
|
|
||||||
elsif(falling_edge(FCS))then
|
|
||||||
|
|
||||||
|
|
||||||
end if;
|
|
||||||
end process ADDRESS_Z3_DECODE;
|
|
||||||
|
|
||||||
ADDRESS_DECODE: process(FCS,reset,AS)
|
|
||||||
begin
|
begin
|
||||||
if(reset='0' )then
|
if(reset='0' )then
|
||||||
AUTOCONFIG_Z2_ACCESS <= '0';
|
|
||||||
IDE_ACCESS <= '0';
|
|
||||||
CP_ACCESS <= '0';
|
|
||||||
AS_D0 <='1';
|
|
||||||
LAN_ACCESS <= '0';
|
LAN_ACCESS <= '0';
|
||||||
DQ_SWAP <= '1';
|
DQ_SWAP <= '1';
|
||||||
Z3_ADR <= (others => '1');
|
Z3_ADR <= (others => '1');
|
||||||
INT_VECTOR_CYCLE <='0';
|
INT_VECTOR_CYCLE <='0';
|
||||||
elsif(rising_edge(CLK_EXT))then
|
elsif(falling_edge(FCS))then
|
||||||
|
|
||||||
if(FCS='0' and AS_D1 ='1' and Z3='1') then
|
if(Z3='1') then
|
||||||
Z3_ADR(15 downto 2) <= A(15 downto 2);-- latch the whole address for the whole cycle
|
Z3_ADR(15 downto 2) <= A(15 downto 2);-- latch the whole address for the whole cycle
|
||||||
|
|
||||||
INT_VECTOR_CYCLE <= not MTCR; --is this s special int vector cycle?!?
|
INT_VECTOR_CYCLE <= not MTCR; --is this s special int vector cycle?!?
|
||||||
@@ -291,36 +274,42 @@ begin
|
|||||||
LAN_ACCESS <= '0';
|
LAN_ACCESS <= '0';
|
||||||
DQ_SWAP <= '1';
|
DQ_SWAP <= '1';
|
||||||
end if;
|
end if;
|
||||||
elsif(FCS ='1' or Z3='0')then
|
else
|
||||||
LAN_ACCESS <= '0';
|
LAN_ACCESS <= '0';
|
||||||
DQ_SWAP <= '1';
|
DQ_SWAP <= '1';
|
||||||
end if;
|
end if;
|
||||||
|
end if;
|
||||||
|
end process ADDRESS_Z3_DECODE;
|
||||||
AS_D0 <= AS;
|
|
||||||
AS_D1 <= FCS; -- double sync!
|
ADDRESS_Z2_DECODE: process(AS,reset)
|
||||||
if(A(23 downto 16) = x"E8" and AUTO_CONFIG_Z2_DONE /= "111" and CFIN='0' and LAN_ACCESS = '0' and AS='0')then
|
begin
|
||||||
|
if(reset='0' )then
|
||||||
|
AUTOCONFIG_Z2_ACCESS <= '0';
|
||||||
|
IDE_ACCESS <= '0';
|
||||||
|
CP_ACCESS <= '0';
|
||||||
|
elsif(falling_edge(AS))then
|
||||||
|
if(A(23 downto 16) = x"E8" and AUTO_CONFIG_Z2_DONE /= "111" and CFIN='0' and LAN_ACCESS = '0')then
|
||||||
AUTOCONFIG_Z2_ACCESS <= '1';
|
AUTOCONFIG_Z2_ACCESS <= '1';
|
||||||
else
|
else
|
||||||
AUTOCONFIG_Z2_ACCESS <= '0';
|
AUTOCONFIG_Z2_ACCESS <= '0';
|
||||||
end if;
|
end if;
|
||||||
|
|
||||||
--CP base
|
--CP base
|
||||||
if(A(23 downto 16) = CP_BASEADR and SHUT_UP_Z2(1)='0' and LAN_ACCESS = '0' and AS='0' )then
|
if(A(23 downto 16) = CP_BASEADR and SHUT_UP_Z2(1)='0' and LAN_ACCESS = '0')then
|
||||||
CP_ACCESS <= '1';
|
CP_ACCESS <= '1';
|
||||||
else
|
else
|
||||||
CP_ACCESS <= '0';
|
CP_ACCESS <= '0';
|
||||||
end if;
|
end if;
|
||||||
|
|
||||||
--IDE base
|
--IDE base
|
||||||
if(A(23 downto 16) = IDE_BASEADR and SHUT_UP_Z2(2)='0' and LAN_ACCESS = '0' and AS='0' )then
|
if(A(23 downto 16) = IDE_BASEADR and SHUT_UP_Z2(2)='0' and LAN_ACCESS = '0')then
|
||||||
IDE_ACCESS <= '1';
|
IDE_ACCESS <= '1';
|
||||||
else
|
else
|
||||||
IDE_ACCESS <= '0';
|
IDE_ACCESS <= '0';
|
||||||
end if;
|
end if;
|
||||||
|
|
||||||
end if;
|
end if;
|
||||||
end process ADDRESS_DECODE;
|
end process ADDRESS_Z2_DECODE;
|
||||||
|
|
||||||
--LAN interrupt controll
|
--LAN interrupt controll
|
||||||
lan_int_proc: process (CLK_EXT,reset)
|
lan_int_proc: process (CLK_EXT,reset)
|
||||||
@@ -504,7 +493,7 @@ begin
|
|||||||
end process lan_rw_gen;
|
end process lan_rw_gen;
|
||||||
|
|
||||||
--autoconfig
|
--autoconfig
|
||||||
autoconfig_proc: process (reset, AMIGA_CLK)
|
autoconfig_proc: process (reset, CLK_EXT)
|
||||||
begin
|
begin
|
||||||
if reset = '0' then
|
if reset = '0' then
|
||||||
-- reset active ...
|
-- reset active ...
|
||||||
@@ -517,9 +506,9 @@ begin
|
|||||||
LAN_BASEADR<=x"FFFF";
|
LAN_BASEADR<=x"FFFF";
|
||||||
elsif rising_edge(CLK_EXT) then -- no reset, so wait for rising edge of the clock
|
elsif rising_edge(CLK_EXT) then -- no reset, so wait for rising edge of the clock
|
||||||
D_Z2_OUT<="1111";
|
D_Z2_OUT<="1111";
|
||||||
if(AS_D0='1')then
|
if(AS='1')then
|
||||||
AUTO_CONFIG_Z2_DONE <= AUTO_CONFIG_Z2_DONE or AUTO_CONFIG_Z2_DONE_CYCLE or (not AUTOBOOT_OFF & "00") ;
|
AUTO_CONFIG_Z2_DONE <= AUTO_CONFIG_Z2_DONE or AUTO_CONFIG_Z2_DONE_CYCLE or (not AUTOBOOT_OFF & "00") ;
|
||||||
elsif(AUTOCONFIG_Z2_ACCESS= '1' and DS='0') then
|
elsif(AUTOCONFIG_Z2_ACCESS= '1' and AS='0' and DS='0') then
|
||||||
case A(6 downto 1) is
|
case A(6 downto 1) is
|
||||||
when "000000" =>
|
when "000000" =>
|
||||||
if(AUTO_CONFIG_Z2_DONE(0) = '0')then
|
if(AUTO_CONFIG_Z2_DONE(0) = '0')then
|
||||||
@@ -686,7 +675,7 @@ begin
|
|||||||
IDE_R_S <= '1';
|
IDE_R_S <= '1';
|
||||||
IDE_W_S <= '1';
|
IDE_W_S <= '1';
|
||||||
ROM_OE_S <= '1';
|
ROM_OE_S <= '1';
|
||||||
if(IDE_ACCESS='1')then
|
if(IDE_ACCESS='1' and AS='0' and DS='0')then
|
||||||
if(RW='0')then
|
if(RW='0')then
|
||||||
--the write goes to the hdd!
|
--the write goes to the hdd!
|
||||||
IDE_ENABLE <= '0'; -- enable IDE on first read
|
IDE_ENABLE <= '0'; -- enable IDE on first read
|
||||||
@@ -708,22 +697,31 @@ begin
|
|||||||
|
|
||||||
|
|
||||||
--cp signal generation
|
--cp signal generation
|
||||||
cp_rw_gen: process (AMIGA_CLK)
|
cp_rw_gen: process (AMIGA_CLK, reset)
|
||||||
begin
|
begin
|
||||||
if falling_edge(AMIGA_CLK) then
|
|
||||||
|
if (reset = '0') then
|
||||||
|
CP_RD_S <= '1';
|
||||||
|
CP_WE_S <= '1';
|
||||||
|
CP_WE_QUIRK <= '1';
|
||||||
|
elsif falling_edge(AMIGA_CLK) then
|
||||||
--default values
|
--default values
|
||||||
CP_RD_S <= '1';
|
CP_RD_S <= '1';
|
||||||
CP_WE_S <= '1';
|
CP_WE_S <= '1';
|
||||||
if(CP_ACCESS = '1' and DS='0')then --datastrobe instead of AS!
|
if( CP_ACCESS = '1' and
|
||||||
|
AS = '0' and
|
||||||
|
DS = '0' --datastrobe too!
|
||||||
|
)then
|
||||||
CP_RD_S <= not RW;
|
CP_RD_S <= not RW;
|
||||||
CP_WE_S <= RW;
|
CP_WE_S <= RW;
|
||||||
end if;
|
end if;
|
||||||
CP_WE_QUIRK <= CP_WE_S; --the clockport write must be low exactly one 7MHz cycle!
|
--the clockport write must be low exactly one 7MHz cycle!
|
||||||
|
CP_WE_QUIRK <= CP_WE_S;
|
||||||
end if;
|
end if;
|
||||||
end process cp_rw_gen;
|
end process cp_rw_gen;
|
||||||
CP_WE <= CP_WE_S when AS='0' and CP_WE_QUIRK ='1' else '1';
|
CP_WE <= CP_WE_S when AS='0' and CP_WE_QUIRK ='1' else '1';
|
||||||
CP_RD <= CP_RD_S when AS='0' else '1';
|
CP_RD <= CP_RD_S when AS='0' else '1';
|
||||||
CP_CS <= not CP_ACCESS;
|
CP_CS <= '0' when CP_ACCESS ='1' and AS='0' else '1';
|
||||||
|
|
||||||
end Behavioral;
|
end Behavioral;
|
||||||
|
|
||||||
|
|||||||
@@ -68,7 +68,7 @@
|
|||||||
<status xil_pn:value="SuccessfullyRun"/>
|
<status xil_pn:value="SuccessfullyRun"/>
|
||||||
<status xil_pn:value="ReadyToRun"/>
|
<status xil_pn:value="ReadyToRun"/>
|
||||||
</transform>
|
</transform>
|
||||||
<transform xil_pn:end_ts="1573773896" xil_pn:in_ck="-2520376148396271922" xil_pn:name="TRANEXT_xstsynthesize_xc9500xl" xil_pn:prop_ck="-5742752562858310575" xil_pn:start_ts="1573773885">
|
<transform xil_pn:end_ts="1574202935" xil_pn:in_ck="-2520376148396271922" xil_pn:name="TRANEXT_xstsynthesize_xc9500xl" xil_pn:prop_ck="-5742752562858310575" xil_pn:start_ts="1574202924">
|
||||||
<status xil_pn:value="SuccessfullyRun"/>
|
<status xil_pn:value="SuccessfullyRun"/>
|
||||||
<status xil_pn:value="WarningsGenerated"/>
|
<status xil_pn:value="WarningsGenerated"/>
|
||||||
<status xil_pn:value="ReadyToRun"/>
|
<status xil_pn:value="ReadyToRun"/>
|
||||||
@@ -89,7 +89,7 @@
|
|||||||
<status xil_pn:value="SuccessfullyRun"/>
|
<status xil_pn:value="SuccessfullyRun"/>
|
||||||
<status xil_pn:value="ReadyToRun"/>
|
<status xil_pn:value="ReadyToRun"/>
|
||||||
</transform>
|
</transform>
|
||||||
<transform xil_pn:end_ts="1573773904" xil_pn:in_ck="-8547647177936735053" xil_pn:name="TRAN_ngdbuild" xil_pn:prop_ck="6932115226421322529" xil_pn:start_ts="1573773896">
|
<transform xil_pn:end_ts="1574202943" xil_pn:in_ck="-8547647177936735053" xil_pn:name="TRAN_ngdbuild" xil_pn:prop_ck="6932115226421322529" xil_pn:start_ts="1574202935">
|
||||||
<status xil_pn:value="SuccessfullyRun"/>
|
<status xil_pn:value="SuccessfullyRun"/>
|
||||||
<status xil_pn:value="ReadyToRun"/>
|
<status xil_pn:value="ReadyToRun"/>
|
||||||
<outfile xil_pn:name="LAN_IDE_CP.bld"/>
|
<outfile xil_pn:name="LAN_IDE_CP.bld"/>
|
||||||
@@ -98,7 +98,7 @@
|
|||||||
<outfile xil_pn:name="_ngo"/>
|
<outfile xil_pn:name="_ngo"/>
|
||||||
<outfile xil_pn:name="_xmsgs/ngdbuild.xmsgs"/>
|
<outfile xil_pn:name="_xmsgs/ngdbuild.xmsgs"/>
|
||||||
</transform>
|
</transform>
|
||||||
<transform xil_pn:end_ts="1573773944" xil_pn:in_ck="-2520376148396280667" xil_pn:name="TRANEXT_vm6File_xc9500xl" xil_pn:prop_ck="-1014768965495450326" xil_pn:start_ts="1573773904">
|
<transform xil_pn:end_ts="1574202972" xil_pn:in_ck="-2520376148396280667" xil_pn:name="TRANEXT_vm6File_xc9500xl" xil_pn:prop_ck="-1014768965495450326" xil_pn:start_ts="1574202943">
|
||||||
<status xil_pn:value="SuccessfullyRun"/>
|
<status xil_pn:value="SuccessfullyRun"/>
|
||||||
<status xil_pn:value="WarningsGenerated"/>
|
<status xil_pn:value="WarningsGenerated"/>
|
||||||
<status xil_pn:value="ReadyToRun"/>
|
<status xil_pn:value="ReadyToRun"/>
|
||||||
@@ -116,12 +116,12 @@
|
|||||||
<outfile xil_pn:name="LAN_IDE_CP_html"/>
|
<outfile xil_pn:name="LAN_IDE_CP_html"/>
|
||||||
<outfile xil_pn:name="LAN_IDE_CP_pad.csv"/>
|
<outfile xil_pn:name="LAN_IDE_CP_pad.csv"/>
|
||||||
</transform>
|
</transform>
|
||||||
<transform xil_pn:end_ts="1573773946" xil_pn:in_ck="-2520376148396271803" xil_pn:name="TRANEXT_crtProg_xc9500" xil_pn:prop_ck="-6294026017969277533" xil_pn:start_ts="1573773944">
|
<transform xil_pn:end_ts="1574202975" xil_pn:in_ck="-2520376148396271803" xil_pn:name="TRANEXT_crtProg_xc9500" xil_pn:prop_ck="-6294026017969277533" xil_pn:start_ts="1574202972">
|
||||||
<status xil_pn:value="SuccessfullyRun"/>
|
<status xil_pn:value="SuccessfullyRun"/>
|
||||||
<status xil_pn:value="ReadyToRun"/>
|
<status xil_pn:value="ReadyToRun"/>
|
||||||
<outfile xil_pn:name="LAN_IDE_CP.jed"/>
|
<outfile xil_pn:name="LAN_IDE_CP.jed"/>
|
||||||
</transform>
|
</transform>
|
||||||
<transform xil_pn:end_ts="1558977170" xil_pn:in_ck="-2520376148396285089" xil_pn:name="TRAN_impactProgrammingTool_CPLD" xil_pn:prop_ck="-3598488201878296819" xil_pn:start_ts="1558977170">
|
<transform xil_pn:end_ts="1574196319" xil_pn:in_ck="-2520376148396285089" xil_pn:name="TRAN_impactProgrammingTool_CPLD" xil_pn:prop_ck="-3598488201878296819" xil_pn:start_ts="1574196319">
|
||||||
<status xil_pn:value="SuccessfullyRun"/>
|
<status xil_pn:value="SuccessfullyRun"/>
|
||||||
<status xil_pn:value="ReadyToRun"/>
|
<status xil_pn:value="ReadyToRun"/>
|
||||||
<status xil_pn:value="OutOfDateForInputs"/>
|
<status xil_pn:value="OutOfDateForInputs"/>
|
||||||
|
|||||||
Reference in New Issue
Block a user