Project

General

Profile

« Previous | Next » 

Revision 331

Added by markw over 10 years ago

Added multiple build types

View differences:

papilioduo/atari800core_papilioduo.vhd
ENTITY atari800core_papilioduo IS
GENERIC
(
TV : integer := 1; -- 1 = PAL, 0=NTSC
SCANDOUBLE : integer := 0; -- 1 = YES, 0=NO, (+ later scanlines etc)
TV : integer; -- 1 = PAL, 0=NTSC
VIDEO : integer; -- 1 = RGB, 2 = VGA
COMPOSITE_SYNC : integer; --0 = no, 1 = yes!
SCANDOUBLE : integer; -- 1 = YES, 0=NO, (+ later scanlines etc)
internal_rom : integer := 1 ;
--internal_ram : integer := 16384;
internal_ram : integer := 0;
......
-- scandoubler
signal half_scandouble_enable_reg : std_logic;
signal half_scandouble_enable_next : std_logic;
signal scanlines_reg : std_logic;
signal scanlines_next : std_logic;
SIGNAL COMPOSITE_ON_HSYNC : std_logic;
SIGNAL VGA : std_logic;
function palette_from_scandouble( scandouble : integer ) return integer is
begin
if (scandouble = 1) then
return 0;
else
return 1;
end if;
end palette_from_scandouble;
-- dma/virtual drive
signal DMA_ADDR_FETCH : std_logic_vector(23 downto 0);
signal DMA_WRITE_DATA : std_logic_vector(31 downto 0);
......
internal_rom => internal_rom,
internal_ram => internal_ram,
video_bits => 8,
palette => palette_from_scandouble(scandouble),
palette => 0,
low_memory => 2,
STEREO => 0,
COVOX => 0
......
);
-- Video options
gen_scandouble_off: if scandouble=0 generate
VGA_HSYNC <= not(VIDEO_HS xor VIDEO_VS);
VGA_VSYNC <= not(VIDEO_VS);
VGA_BLUE <= VIDEO_B(7 downto 4);
VGA_GREEN <= VIDEO_G(7 downto 4);
VGA_RED <= VIDEO_R(7 downto 4);
end generate;
pal <= '1' when tv=1 else '0';
vga <= '1' when video=2 else '0';
composite_on_hsync <= '1' when composite_sync=1 else '0';
gen_scandouble_on: if scandouble=1 generate
process(clk,reset_n)
begin
if (reset_n='0') then
half_scandouble_enable_reg <= '0';
elsif (clk'event and clk='1') then
half_scandouble_enable_reg <= half_scandouble_enable_next;
end if;
end process;
process(clk,RESET_N,reset_atari)
begin
if ((RESET_N and not(reset_atari))='0') then
half_scandouble_enable_reg <= '0';
scanlines_reg <= '0';
elsif (clk'event and clk='1') then
half_scandouble_enable_reg <= half_scandouble_enable_next;
scanlines_reg <= scanlines_next;
end if;
end process;
half_scandouble_enable_next <= not(half_scandouble_enable_reg);
half_scandouble_enable_next <= not(half_scandouble_enable_reg);
scanlines_next <= scanlines_reg xor (not(ps2_keys(16#11#)) and ps2_keys_next(16#11#)); -- left alt
scandoubler1: entity work.scandoubler
PORT MAP
(
CLK => CLK,
RESET_N => reset_n,
VGA => '1',
COMPOSITE_ON_HSYNC => '1', -- TODO
scandoubler1: entity work.scandoubler
PORT MAP
(
CLK => CLK,
RESET_N => reset_n,
VGA => vga,
COMPOSITE_ON_HSYNC => composite_on_hsync,
colour_enable => half_scandouble_enable_reg,
doubled_enable => '1',
-- GTIA interface
pal => PAL,
colour_in => VIDEO_B,
vsync_in => VIDEO_VS,
hsync_in => VIDEO_HS,
-- TO TV...
R => VGA_RED,
G => VGA_GREEN,
B => VGA_BLUE,
VSYNC => VGA_VSYNC,
HSYNC => VGA_HSYNC
);
end generate;
colour_enable => half_scandouble_enable_reg,
doubled_enable => '1',
scanlines_on => scanlines_reg,
-- GTIA interface
pal => PAL,
colour_in => VIDEO_B,
vsync_in => VIDEO_VS,
hsync_in => VIDEO_HS,
-- TO TV...
R => VGA_RED,
G => VGA_GREEN,
B => VGA_BLUE,
VSYNC => VGA_VSYNC,
HSYNC => VGA_HSYNC
);
zpu: entity work.zpucore
GENERIC MAP
(
platform => 1,
spi_clock_div => 1, -- 28MHz/2. Max for SD cards is 25MHz...
spi_clock_div => 2, -- 28MHz/2. Max for SD cards is 25MHz...
usb => 0
)
PORT MAP
papilioduo/build.pl
#!/usr/bin/perl -w
use strict;
my $wanted_variant = shift @ARGV;
my $name="papilioduo";
#variants...
my $PAL = 1;
my $NTSC = 0;
my $RGB = 1; # i.e. not scandoubled
my $VGA = 2;
#Added like this to the generated qsf
#set_parameter -name TV 1
my %variants =
(
"PAL_RGB" =>
{
"TV" => $PAL,
"SCANDOUBLE" => 0,
"VIDEO" => $RGB,
"COMPOSITE_SYNC" => 1
},
"PAL_RGBHV" =>
{
"TV" => $PAL,
"SCANDOUBLE" => 0,
"VIDEO" => $RGB,
"COMPOSITE_SYNC" => 0
},
"PAL_VGA" =>
{
"TV" => $PAL,
"SCANDOUBLE" => 1,
"VIDEO" => $VGA,
"COMPOSITE_SYNC" => 0
},
"PAL_VGA_CS" =>
{
"TV" => $PAL,
"SCANDOUBLE" => 1,
"VIDEO" => $VGA,
"COMPOSITE_SYNC" => 1
},
"NTSC_RGB" =>
{
"TV" => $NTSC,
"SCANDOUBLE" => 0,
"VIDEO" => $RGB,
"COMPOSITE_SYNC" => 1
},
"NTSC_RGBHV" =>
{
"TV" => $NTSC,
"SCANDOUBLE" => 0,
"VIDEO" => $RGB,
"COMPOSITE_SYNC" => 0
},
"NTSC_VGA" =>
{
"TV" => $NTSC,
"SCANDOUBLE" => 1,
"VIDEO" => $VGA,
"COMPOSITE_SYNC" => 0
},
"NTSC_VGA_CS" =>
{
"TV" => $NTSC,
"SCANDOUBLE" => 1,
"VIDEO" => $VGA,
"COMPOSITE_SYNC" => 1
}
);
if (not defined $wanted_variant or (not exists $variants{$wanted_variant} and $wanted_variant ne "ALL"))
{
die "Provide variant of ALL or ".join ",",sort keys %variants;
}
foreach my $variant (sort keys %variants)
{
next if ($wanted_variant ne $variant and $wanted_variant ne "ALL");
print "Building $variant of $name\n";
my $dir = "build_$variant";
`rm -rf $dir`;
mkdir $dir;
chdir $dir;
`cp -p ../pll/* .`;
`cp -p ../../common/a8core/*.vhd .`;
`cp -p ../../common/a8core/*.vhdl .`;
`cp -p ../../common/components/*.vhd .`;
`cp -p ../../common/components/*.vhdl .`;
`cp -p ../../common/zpu/*.vhd .`;
`cp -p ../../common/zpu/*.vhdl .`;
`cp -p ../*.vhd .`;
`cp -p ../*.vhdl .`;
`cp -p ../$name.ucf .`;
`cp -p ../$name.ut .`;
`cp -p ../$name.prj .`;
`mkdir -p xst/projnav.tmp/`;
`cp -p ../*.xst .`;
# TODO make project file `../makexst ../atari800core.qsf ./common/a8core ./common/components ./common/zpu`;
my $generics = "-generics {";
foreach my $key (sort keys %{$variants{$variant}})
{
my $val = $variants{$variant}->{$key};
$generics.="$key=$val ";
}
$generics .= "}\n";
`echo '$generics' >> $name.xst`;
`echo "Starting Synthesis" >> build.log 2>>build.err`;
`xst -intstyle ise -ifn $name.xst -ofn $name.syr >> build.log 2>>build.err`;
`echo "Starting NGD" >> build.log 2>>build.err`;
`ngdbuild -intstyle ise -uc $name.ucf -dd _ngo -nt timestamp -p xc6slx9-tqg144-3 $name.ngc $name.ngd >> build.log 2>>build.err`;
`echo "Starting Map..." >> build.log 2>>build.err`;
`map -intstyle ise -p xc6slx9-tqg144-3 -w -logic_opt off -ol high -t 1 -xt 0 -register_duplication off -r 4 -global_opt off -mt off -detail -ir off -pr off -lc off -power off -o ${name}_map.ncd $name.ngd $name.pcf >> build.log 2>>build.err`;
`echo "Starting Place & Route..." >> build.log 2>>build.err`;
`par -w -intstyle ise -ol high -mt off ${name}_map.ncd $name.ncd $name.pcf >> build.log 2>>build.err`;
`echo "Starting Timing Analysis..." >> build.log 2>>build.err`;
`trce -intstyle ise -v 3 -s 3 -n 3 -fastpaths -xml $name.twx $name.ncd -o $name.twr $name.pcf >> build.log 2>>build.err`;
`echo "Starting Bitgen..." >> build.log 2>>build.err`;
`bitgen -intstyle ise -f $name.ut $name.ncd >> build.log 2>>build.err`;
chdir "..";
}
papilioduo/build.sh
#!/bin/bash
name=papilioduo
args=$@
shift
. /home/markw/fpga/xilinx/14.7/ISE_DS/settings64.sh
mkdir -p build
pushd build
export XILINX_DSP
export LD_LIBRARY_PATH
export XILINX_EDK
export PATH
export XILINX_PLANAHEAD
export XILINX
# copy source files
cp -p ../pll/* .
cp -p ../../common/a8core/*.vhd .
cp -p ../../common/a8core/*.vhdl .
cp -p ../../common/components/*.vhd .
cp -p ../../common/components/*.vhdl .
cp -p ../../common/zpu/*.vhd .
cp -p ../../common/zpu/*.vhdl .
#rm -f delay_line.vhdl
cp -p ../*.vhd .
cp -p ../*.vhdl .
cp -p ../*.xst .
which xst
cp -p ../$name.ucf .
cp -p ../$name.ut .
cp -p ../$name.prj .
./build.pl ${args}
mkdir -p xst/projnav.tmp/
echo "Starting Synthesis"
xst -intstyle ise -ifn $name.xst -ofn $name.syr
echo "Starting NGD"
ngdbuild -intstyle ise -uc $name.ucf -dd _ngo -nt timestamp -p xc6slx9-tqg144-3 $name.ngc $name.ngd
echo "Starting Map..."
map -intstyle ise -p xc6slx9-tqg144-3 -w -logic_opt off -ol high -t 1 -xt 0 -register_duplication off -r 4 -global_opt off -mt off -detail -ir off -pr off -lc off -power off -o $name_map.ncd $name.ngd $name.pcf
echo "Starting Place & Route..."
par -w -intstyle ise -ol high -mt off $name_map.ncd $name.ncd $name.pcf
echo "Starting Timing Analysis..."
trce -intstyle ise -v 3 -s 3 -n 3 -fastpaths -xml $name.twx $name.ncd -o $name.twr $name.pcf
echo "Starting Bitgen..."
bitgen -intstyle ise -f $name.ut $name.ncd
popd
papilioduo/zpu_rom.vhdl
X"04fc3d0d",
X"800b83e7",
X"bc348480",
X"805284a4",
X"80528498",
X"808051ff",
X"b5923f83",
X"e0800880",
......
X"08f40508",
X"872e0981",
X"06ffab38",
X"84a88080",
X"849c8080",
X"51ebcf3f",
X"ff0b83e7",
X"c00c800b",

Also available in: Unified diff