Corrections are shown in the order they were reported. Please let me know if you find an error that is not listed below.
To infer a D flip-flop instead of a latch, Design Compiler requires that the process for the D flip-flop be written as follows:
process(clk) begin if clk'event and clk = '1' then q <= d ; end if ; end process ;The clk'event tells DC that the memory element is edge-triggered rather than level sensitive.
Similarly the process that generates the sequential logic for the state machine should read:
-- sequential logic process(clk) begin if clk'event and clk = '1' then current <= nexts ; end if ; end process ;
This means that the 16550's address inputs will be valid until the next bus cycle and the chip select will be valid until T4. Both requirements are met by a large margin:
The guaranteed hold time for the 16550 address input will be the time from the falling edge of ALE to the rising edge of ALE in the next bus cycle: 4t_CLCL - (t_CHCL-t_CHLL(max)) - t_CLLH(min) = 800 - ( 66 - 85 ) - 0 = 819 ns.
The guaranteed hold time for the 16550 chip select input will be the time from the falling edge of ALE to when A8 to A15 becomes invalid at the end of T4: 3tCLCL + tCHLL(max) + tCHDX(min) = 600 + 85 + 10 = 695 ns.