Revision 22
Added by markw over 11 years ago
mist/atari800core.qsf | ||
---|---|---|
set_global_assignment -name VHDL_FILE data_io.vhdl
|
||
set_global_assignment -name SDC_FILE atari800core.sdc
|
||
set_global_assignment -name QIP_FILE mist_sector_buffer.qip
|
||
set_global_assignment -name VHDL_FILE sdram_statemachine.vhdl
|
||
set_global_assignment -name VHDL_FILE atari800core_mist.vhd
|
||
set_global_assignment -name VERILOG_FILE user_io.v
|
||
set_global_assignment -name QIP_FILE pll.qip
|
mist/atari800core_mist.vhd | ||
---|---|---|
SIGNAL THROTTLE_COUNT_6502 : STD_LOGIC_VECTOR(5 DOWNTO 0);
|
||
|
||
SIGNAL PAL : std_logic;
|
||
|
||
signal SDRAM_REQUEST : std_logic;
|
||
signal SDRAM_REQUEST_COMPLETE : std_logic;
|
||
signal SDRAM_READ_ENABLE : STD_LOGIC;
|
||
signal SDRAM_WRITE_ENABLE : std_logic;
|
||
signal SDRAM_ADDR : STD_LOGIC_VECTOR(22 DOWNTO 0);
|
||
signal SDRAM_DO : STD_LOGIC_VECTOR(31 DOWNTO 0);
|
||
signal SDRAM_DI : STD_LOGIC_VECTOR(31 DOWNTO 0);
|
||
signal SDRAM_WIDTH_8bit_ACCESS : std_logic;
|
||
signal SDRAM_WIDTH_16bit_ACCESS : std_logic;
|
||
signal SDRAM_WIDTH_32bit_ACCESS : std_logic;
|
||
|
||
signal SDRAM_REFRESH : std_logic;
|
||
|
||
signal SYSTEM_RESET_REQUEST: std_logic;
|
||
|
||
signal SDRAM_RESET_N : std_logic;
|
||
|
||
BEGIN
|
||
pal <= '1'; -- TODO, two builds, with appropriate pll settings
|
||
|
||
... | ... | |
|
||
--HOT KEYS! Connect to ZPU when present...
|
||
--virtual_keys <= keyboard(65)&keyboard(66)&keyboard(67)&keyboard(68);
|
||
--SYSTEM_RESET_REQUEST <= keyboard(63);
|
||
SYSTEM_RESET_REQUEST <= keyboard(63);
|
||
|
||
-- TODO this should be common, same for PS2 after mapping...
|
||
process(keyboard_scan, atari_keyboard, control_pressed, shift_pressed, break_pressed)
|
||
... | ... | |
(
|
||
cycle_length => 32,
|
||
internal_rom => 1,
|
||
internal_ram => 16384
|
||
internal_ram => 0
|
||
)
|
||
PORT MAP
|
||
(
|
||
CLK => CLK,
|
||
RESET_N => RESET_N,
|
||
RESET_N => RESET_N and SDRAM_RESET_N and not(SYSTEM_RESET_REQUEST),
|
||
|
||
VGA_VS => VGA_VS_RAW,
|
||
VGA_HS => VGA_HS_RAW,
|
||
... | ... | |
CONSOL_SELECT => CONSOL_SELECT,
|
||
CONSOL_START => CONSOL_START,
|
||
|
||
SDRAM_REQUEST => open,
|
||
SDRAM_REQUEST_COMPLETE => '1',
|
||
SDRAM_READ_ENABLE => open,
|
||
SDRAM_WRITE_ENABLE => open,
|
||
SDRAM_ADDR => open,
|
||
SDRAM_DO => (others=>'1'),
|
||
SDRAM_REQUEST => SDRAM_REQUEST,
|
||
SDRAM_REQUEST_COMPLETE => SDRAM_REQUEST_COMPLETE,
|
||
SDRAM_READ_ENABLE => SDRAM_READ_ENABLE,
|
||
SDRAM_WRITE_ENABLE => SDRAM_WRITE_ENABLE,
|
||
SDRAM_ADDR => SDRAM_ADDR,
|
||
SDRAM_DO => SDRAM_DO,
|
||
SDRAM_DI => SDRAM_DI,
|
||
SDRAM_32BIT_WRITE_ENABLE => SDRAM_WIDTH_32bit_ACCESS,
|
||
SDRAM_16BIT_WRITE_ENABLE => SDRAM_WIDTH_16bit_ACCESS,
|
||
SDRAM_8BIT_WRITE_ENABLE => SDRAM_WIDTH_8bit_ACCESS,
|
||
|
||
DMA_FETCH => '0',
|
||
DMA_READ_ENABLE => '0',
|
||
... | ... | |
THROTTLE_COUNT_6502 => THROTTLE_COUNT_6502
|
||
);
|
||
|
||
--b2v_inst20 : sdram_statemachine
|
||
--GENERIC MAP(ADDRESS_WIDTH => 22,
|
||
-- AP_BIT => 10,
|
||
-- COLUMN_WIDTH => 8,
|
||
-- ROW_WIDTH => 12
|
||
-- )
|
||
--PORT MAP(CLK_SYSTEM => CLK,
|
||
-- CLK_SDRAM => CLK_SDRAM,
|
||
-- RESET_N => RESET_N,
|
||
-- READ_EN => SDRAM_READ_ENABLE,
|
||
-- WRITE_EN => SDRAM_WRITE_ENABLE,
|
||
-- REQUEST => SDRAM_REQUEST,
|
||
-- BYTE_ACCESS => WIDTH_8BIT_ACCESS,
|
||
-- WORD_ACCESS => WIDTH_16BIT_ACCESS,
|
||
-- LONGWORD_ACCESS => WIDTH_32BIT_ACCESS,
|
||
-- REFRESH => SDRAM_REFRESH,
|
||
-- ADDRESS_IN => SDRAM_ADDR,
|
||
-- DATA_IN => WRITE_DATA,
|
||
-- SDRAM_DQ => SDRAM_DQ,
|
||
-- COMPLETE => SDRAM_REQUEST_COMPLETE,
|
||
-- SDRAM_BA0 => SDRAM_BA(0),
|
||
-- SDRAM_BA1 => SDRAM_BA(1),
|
||
-- SDRAM_CKE => SDRAM_CKE,
|
||
-- SDRAM_CS_N => SDRAM_nCS,
|
||
-- SDRAM_RAS_N => SDRAM_nRAS,
|
||
-- SDRAM_CAS_N => SDRAM_nCAS,
|
||
-- SDRAM_WE_N => SDRAM_nWE,
|
||
-- SDRAM_ldqm => SDRAM_DQML,
|
||
-- SDRAM_udqm => SDRAM_DQMH,
|
||
-- DATA_OUT => SDRAM_DO,
|
||
-- SDRAM_ADDR => SDRAM_A(11 downto 0));
|
||
--
|
||
--SDRAM_A(12) <= '0';
|
||
sdram_adaptor : entity work.sdram_statemachine
|
||
GENERIC MAP(ADDRESS_WIDTH => 22,
|
||
AP_BIT => 10,
|
||
COLUMN_WIDTH => 8,
|
||
ROW_WIDTH => 12
|
||
)
|
||
PORT MAP(CLK_SYSTEM => CLK,
|
||
CLK_SDRAM => CLK_SDRAM,
|
||
RESET_N => RESET_N and not(SYSTEM_RESET_REQUEST),
|
||
READ_EN => SDRAM_READ_ENABLE,
|
||
WRITE_EN => SDRAM_WRITE_ENABLE,
|
||
REQUEST => SDRAM_REQUEST,
|
||
BYTE_ACCESS => SDRAM_WIDTH_8BIT_ACCESS,
|
||
WORD_ACCESS => SDRAM_WIDTH_16BIT_ACCESS,
|
||
LONGWORD_ACCESS => SDRAM_WIDTH_32BIT_ACCESS,
|
||
REFRESH => SDRAM_REFRESH,
|
||
ADDRESS_IN => SDRAM_ADDR,
|
||
DATA_IN => SDRAM_DI,
|
||
SDRAM_DQ => SDRAM_DQ,
|
||
COMPLETE => SDRAM_REQUEST_COMPLETE,
|
||
SDRAM_BA0 => SDRAM_BA(0),
|
||
SDRAM_BA1 => SDRAM_BA(1),
|
||
SDRAM_CKE => SDRAM_CKE,
|
||
SDRAM_CS_N => SDRAM_nCS,
|
||
SDRAM_RAS_N => SDRAM_nRAS,
|
||
SDRAM_CAS_N => SDRAM_nCAS,
|
||
SDRAM_WE_N => SDRAM_nWE,
|
||
SDRAM_ldqm => SDRAM_DQML,
|
||
SDRAM_udqm => SDRAM_DQMH,
|
||
DATA_OUT => SDRAM_DO,
|
||
SDRAM_ADDR => SDRAM_A(11 downto 0),
|
||
reset_client_n => SDRAM_RESET_N
|
||
);
|
||
|
||
SDRAM_A(12) <= '0';
|
||
SDRAM_REFRESH <= '0'; -- TODO
|
||
|
||
-- Until SDRAM enabled... TODO
|
||
SDRAM_nCS <= '1';
|
||
SDRAM_DQ <= (others=>'Z');
|
||
--SDRAM_nCS <= '1';
|
||
--SDRAM_DQ <= (others=>'Z');
|
||
|
||
--SDRAM_CKE <= '1';
|
||
LED <= '0';
|
mist/build.sh | ||
---|---|---|
rm -rf build
|
||
mkdir build
|
||
cp atari800core_mist.vhd build
|
||
cp sdram_statemachine.vhdl build
|
||
cp pll.* build
|
||
cp atari800core.sdc build
|
||
cp data_io.vhdl build
|
||
cp user_io.v build
|
||
cp mist_sector_buffer.* build
|
||
mkdir build/common
|
||
mkdir build/common/a8core
|
||
mkdir build/common/components
|
||
cp ../common/a8core/* ./build/common/a8core
|
||
cp ../common/components/* ./build/common/components
|
||
|
||
cd build
|
||
../makeqsf ../atari800core.qsf ../../common/a8core ../../common/components
|
||
../makeqsf ../atari800core.qsf ./common/a8core ./common/components
|
||
|
||
quartus_sh --flow compile atari800core
|
mist/pll.bsf | ||
---|---|---|
(text "Clk " (rect 51 93 116 197)(font "Arial" ))
|
||
(text "Ratio" (rect 72 93 164 197)(font "Arial" ))
|
||
(text "Ph (dg)" (rect 99 93 227 197)(font "Arial" ))
|
||
(text "DC (%)" (rect 133 93 296 197)(font "Arial" ))
|
||
(text "DC (%)" (rect 134 93 298 197)(font "Arial" ))
|
||
(text "c0" (rect 54 107 116 225)(font "Arial" ))
|
||
(text "69/16" (rect 72 107 165 225)(font "Arial" ))
|
||
(text "0.00" (rect 105 107 226 225)(font "Arial" ))
|
||
(text "50.00" (rect 137 107 295 225)(font "Arial" ))
|
||
(text "50.00" (rect 138 107 297 225)(font "Arial" ))
|
||
(text "c1" (rect 54 121 115 253)(font "Arial" ))
|
||
(text "69/32" (rect 72 121 165 253)(font "Arial" ))
|
||
(text "0.00" (rect 105 121 226 253)(font "Arial" ))
|
||
(text "50.00" (rect 137 121 295 253)(font "Arial" ))
|
||
(text "50.00" (rect 138 121 297 253)(font "Arial" ))
|
||
(text "c2" (rect 54 135 116 281)(font "Arial" ))
|
||
(text "69/16" (rect 72 135 165 281)(font "Arial" ))
|
||
(text "-67.06" (rect 101 135 226 281)(font "Arial" ))
|
||
(text "50.00" (rect 137 135 295 281)(font "Arial" ))
|
||
(text "-100.60" (rect 99 135 227 281)(font "Arial" ))
|
||
(text "50.00" (rect 138 135 297 281)(font "Arial" ))
|
||
(line (pt 0 0)(pt 257 0))
|
||
(line (pt 257 0)(pt 257 185))
|
||
(line (pt 0 185)(pt 257 185))
|
||
(line (pt 0 0)(pt 0 185))
|
||
(line (pt 48 91)(pt 165 91))
|
||
(line (pt 48 104)(pt 165 104))
|
||
(line (pt 48 118)(pt 165 118))
|
||
(line (pt 48 132)(pt 165 132))
|
||
(line (pt 48 146)(pt 165 146))
|
||
(line (pt 48 91)(pt 166 91))
|
||
(line (pt 48 104)(pt 166 104))
|
||
(line (pt 48 118)(pt 166 118))
|
||
(line (pt 48 132)(pt 166 132))
|
||
(line (pt 48 146)(pt 166 146))
|
||
(line (pt 48 91)(pt 48 146))
|
||
(line (pt 69 91)(pt 69 146)(line_width 3))
|
||
(line (pt 96 91)(pt 96 146)(line_width 3))
|
||
(line (pt 130 91)(pt 130 146)(line_width 3))
|
||
(line (pt 164 91)(pt 164 146))
|
||
(line (pt 131 91)(pt 131 146)(line_width 3))
|
||
(line (pt 165 91)(pt 165 146))
|
||
(line (pt 40 48)(pt 207 48))
|
||
(line (pt 207 48)(pt 207 167))
|
||
(line (pt 40 167)(pt 207 167))
|
mist/pll.vhd | ||
---|---|---|
clk2_divide_by => 16,
|
||
clk2_duty_cycle => 50,
|
||
clk2_multiply_by => 69,
|
||
clk2_phase_shift => "-1600",
|
||
clk2_phase_shift => "-2400",
|
||
compensate_clock => "CLK0",
|
||
inclk0_input_frequency => 37037,
|
||
intended_device_family => "Cyclone III",
|
||
... | ... | |
-- Retrieval info: PRIVATE: PHASE_RECONFIG_INPUTS_CHECK STRING "0"
|
||
-- Retrieval info: PRIVATE: PHASE_SHIFT0 STRING "0.00000000"
|
||
-- Retrieval info: PRIVATE: PHASE_SHIFT1 STRING "0.00000000"
|
||
-- Retrieval info: PRIVATE: PHASE_SHIFT2 STRING "-1.60000000"
|
||
-- Retrieval info: PRIVATE: PHASE_SHIFT2 STRING "-2.40000000"
|
||
-- Retrieval info: PRIVATE: PHASE_SHIFT_STEP_ENABLED_CHECK STRING "0"
|
||
-- Retrieval info: PRIVATE: PHASE_SHIFT_UNIT0 STRING "deg"
|
||
-- Retrieval info: PRIVATE: PHASE_SHIFT_UNIT1 STRING "ns"
|
||
... | ... | |
-- Retrieval info: CONSTANT: CLK2_DIVIDE_BY NUMERIC "16"
|
||
-- Retrieval info: CONSTANT: CLK2_DUTY_CYCLE NUMERIC "50"
|
||
-- Retrieval info: CONSTANT: CLK2_MULTIPLY_BY NUMERIC "69"
|
||
-- Retrieval info: CONSTANT: CLK2_PHASE_SHIFT STRING "-1600"
|
||
-- Retrieval info: CONSTANT: CLK2_PHASE_SHIFT STRING "-2400"
|
||
-- Retrieval info: CONSTANT: COMPENSATE_CLOCK STRING "CLK0"
|
||
-- Retrieval info: CONSTANT: INCLK0_INPUT_FREQUENCY NUMERIC "37037"
|
||
-- Retrieval info: CONSTANT: INTENDED_DEVICE_FAMILY STRING "Cyclone III"
|
mist/sdram_statemachine.vhdl | ||
---|---|---|
SDRAM_WE_N : out std_logic;
|
||
|
||
SDRAM_ldqm : out std_logic; -- low enable, high disable - for byte addressing - NB, cas latency applies to reads
|
||
SDRAM_udqm : out std_logic
|
||
SDRAM_udqm : out std_logic;
|
||
|
||
reset_client_n : out std_logic
|
||
);
|
||
END sdram_statemachine;
|
||
|
||
... | ... | |
signal sdram_request_reg : std_logic;
|
||
signal sdram_request_next : std_logic;
|
||
|
||
signal reset_client_n_reg : std_logic;
|
||
signal reset_client_n_next : std_logic;
|
||
|
||
BEGIN
|
||
-- register
|
||
process(CLK_SDRAM,reset_n)
|
||
... | ... | |
reply_sreg <= '0';
|
||
|
||
sdram_request_reg <= '0';
|
||
|
||
reset_client_n_reg <= '0';
|
||
|
||
elsif (CLK_SYSTEM'event and CLK_SYSTEM='1') then
|
||
data_in_sreg <= data_in_snext;
|
||
address_in_sreg <= address_in_snext;
|
||
... | ... | |
reply_sreg <= reply_snext;
|
||
|
||
sdram_request_reg <= sdram_request_next;
|
||
|
||
reset_client_n_reg <= reset_client_n_next;
|
||
end if;
|
||
end process;
|
||
|
||
... | ... | |
end process;
|
||
|
||
--
|
||
process(sdram_state_reg,delay_reg, idle_priority, data_out_reg, read_en_sreg, write_en_sreg, address_in_sreg, data_in_sreg, reply_reg, require_refresh, dq_in_next, dqm_mask_sreg, request_sreg)
|
||
process(reset_client_n_reg,sdram_state_reg,delay_reg, idle_priority, data_out_reg, read_en_sreg, write_en_sreg, address_in_sreg, data_in_sreg, reply_reg, require_refresh, dq_in_next, dqm_mask_sreg, request_sreg)
|
||
begin
|
||
idle_priority <= (others=>'0');
|
||
refreshing_now <= '0';
|
||
|
||
reset_client_n_next <= reset_client_n_reg;
|
||
|
||
sdram_state_next <= sdram_state_reg;
|
||
|
||
command_next <= sdram_command_no_operation;
|
||
... | ... | |
-- nop
|
||
end case;
|
||
when sdram_state_idle =>
|
||
reset_client_n_next <= '1';
|
||
delay_next <= (others=>'0');
|
||
|
||
idle_priority <= (request_sreg xor reply_reg)&require_refresh&write_en_sreg&read_en_sreg;
|
||
... | ... | |
COMPLETE <= (reply_sreg xnor sdram_request_reg) and not(request);
|
||
sdram_request_next <= sdram_request_reg xor request;
|
||
|
||
reset_client_n <= reset_client_n_reg;
|
||
|
||
END vhdl;
|
Also available in: Unified diff
Connected up SDRAM. Make 800XL core wait for SDRAM reset to complete. Also had to adjust phase offset to make it work - need to get a proper setup for mist