1
0
mirror of https://github.com/Gehstock/Mist_FPGA.git synced 2026-03-27 02:04:37 +00:00

Tank Battalion

This commit is contained in:
Marcel
2022-10-31 15:24:06 +01:00
parent d8abd48628
commit bfef66d461
26 changed files with 78605 additions and 9 deletions

View File

@@ -226,8 +226,8 @@ begin
dip_comotion_lives <= sw[0];
dip_overlay_type <= sw[2:1];
dip_boom <= sw[3];
IN_1 <= ~{m_coin1, 2'b0, m_one_player, dip_comotion_lives, dip_boom, 2'b00};
IN_2 <= ~{m_left2, m_down2, m_right2, m_up2, m_left, m_down, m_right, m_up};
IN_1 <= ~{m_coin1, 2'b0, m_one_player, dip_comotion_lives, dip_boom, 2'b00};
IN_2 <= ~{m_left3, m_down3, m_right3, m_up3, m_left, m_down, m_right, m_up};
IN_4 <= ~{m_left4, m_down4, m_right4, m_up4, m_left4, m_down4, m_right4, m_up4};
end
7'h2: // GAME_HUSTLE

View File

@@ -54,6 +54,13 @@ localparam GAME_HUSTLE = 2;
localparam GAME_BLASTO = 3;
localparam GAME_MINESWEEPER = 4;
localparam GAME_MINESWEEPER4 = 5;
localparam COIN_START_TIMER_WIDTH = 6;
reg [COIN_START_TIMER_WIDTH-1:0] coin_start;
localparam COIN_LATCH_TIMER_WIDTH = 6;
reg [COIN_LATCH_TIMER_WIDTH-1:0] coin_latch;
// CPU and Video system clock enables
// ----------------------------------
@@ -116,7 +123,8 @@ wire WR_N;
wire SYNC /*verilator public_flat*/;
// CPU reset can originate from system reset signal or coin start signal (only for CoMotion, Hustle, and Blasto)
wire RESET = reset || (game_mode != GAME_BLOCKADE && coin_start > 6'b0);
//wire RESET = reset || (game_mode != GAME_BLOCKADE && coin_start > 6'b0);
wire RESET = reset || (game_mode != GAME_BLOCKADE && coin_start > {COIN_START_TIMER_WIDTH{1'b0}});
// 8080A CPU
vm80a cpu
@@ -417,9 +425,7 @@ assign audio_r = audio_l;
// ------------
wire OUTP1 = OUTP && ADDR[0];
reg coin_last;
reg [5:0] coin_start;
reg coin_inserted;
reg [5:0] coin_latch;
always @(posedge clk) begin
if(reset)
@@ -434,10 +440,10 @@ always @(posedge clk) begin
begin
if(coin_inserted)
begin
coin_latch <= 6'b111111;
coin_latch <= {COIN_LATCH_TIMER_WIDTH{1'b1}};
coin_inserted <= 1'b0;
end
if(coin_latch > 6'b0) coin_latch <= coin_latch - 1'b1;
if(coin_latch > {COIN_LATCH_TIMER_WIDTH{1'b0}}) coin_latch <= coin_latch - 1'b1;
end
// When coin input is going high, latch coin inserted and start reset pulse
@@ -445,11 +451,11 @@ always @(posedge clk) begin
if(coin && !coin_last)
begin
coin_inserted <= 1'b1;
coin_start <= 6'b111111;
coin_start <= {COIN_START_TIMER_WIDTH{1'b1}};
end
// Decrement coin start timer if active
if(coin_start > 6'b0) coin_start <= coin_start - 6'b1;
if(coin_start > {COIN_START_TIMER_WIDTH{1'b0}}) coin_start <= coin_start - 6'b1;
end
end

View File

@@ -0,0 +1,39 @@
---------------------------------------------------------------------------------
--
-- Arcade version of Tank Battalion for MiSTer from Namco - MiSTerRetroWolf
--
-- V 1.0 08/20/2022 - Nick Stone
---------------------------------------------------------------------------------
-- Supports screen and controls rotation on HDMI output.
-- Sound now supported via samples
--
-- Inputs:
-- UP,DOWN,LEFT,RIGHT : Tank Movements
-- Fire
-- Coin 1
-- Start 1 Player
-- Start 2 Players (alternate play)
-- Test button: in DIP settings enable test mode
-- and then the test button toggle which bullet is selected
--
--
---------------------------------------------------------------------------------
*** Attention ***
ROMs are not included. In order to use this arcade, you need to provide the
correct ROMs.
To simplify the process .mra files are provided in the releases folder, that
specifies the required ROMs with checksums. The ROMs .zip filename refers to the
corresponding file of the M.A.M.E. project.
Please refer to https://github.com/MiSTer-devel/Main_MiSTer/wiki/Arcade-Roms for
information on how to setup and use the environment.
Quickreference for folders and file placement:
/_Arcade/<game name>.mra
/_Arcade/cores/<game rbf>.rbf
/_Arcade/mame/<mame rom>.zip
/_Arcade/hbmame/<hbmame rom>.zip

View File

@@ -0,0 +1,30 @@
# -------------------------------------------------------------------------- #
#
# Copyright (C) 1991-2014 Altera Corporation
# Your use of Altera Corporation's design tools, logic functions
# and other software and tools, and its AMPP partner logic
# functions, and any output files from any of the foregoing
# (including device programming or simulation files), and any
# associated documentation or information are expressly subject
# to the terms and conditions of the Altera Program License
# Subscription Agreement, Altera MegaCore Function License
# Agreement, or other applicable license agreement, including,
# without limitation, that your use is for the sole purpose of
# programming logic devices manufactured by Altera and sold by
# Altera or its authorized distributors. Please refer to the
# applicable agreement for further details.
#
# -------------------------------------------------------------------------- #
#
# Quartus II 64-Bit
# Version 13.1.4 Build 182 03/12/2014 SJ Full Version
# Date created = 16:01:18 November 25, 2020
#
# -------------------------------------------------------------------------- #
QUARTUS_VERSION = "13.1"
DATE = "16:01:18 November 25, 2020"
# Revisions
PROJECT_REVISION = "TankBatt"

View File

@@ -0,0 +1,189 @@
# -------------------------------------------------------------------------- #
#
# Copyright (C) 1991-2014 Altera Corporation
# Your use of Altera Corporation's design tools, logic functions
# and other software and tools, and its AMPP partner logic
# functions, and any output files from any of the foregoing
# (including device programming or simulation files), and any
# associated documentation or information are expressly subject
# to the terms and conditions of the Altera Program License
# Subscription Agreement, Altera MegaCore Function License
# Agreement, or other applicable license agreement, including,
# without limitation, that your use is for the sole purpose of
# programming logic devices manufactured by Altera and sold by
# Altera or its authorized distributors. Please refer to the
# applicable agreement for further details.
#
# -------------------------------------------------------------------------- #
#
# Quartus II 64-Bit
# Version 13.1.4 Build 182 03/12/2014 SJ Full Version
# Date created = 14:46:10 October 31, 2022
#
# -------------------------------------------------------------------------- #
#
# Notes:
#
# 1) The default values for assignments are stored in the file:
# TankBatt_assignment_defaults.qdf
# If this file doesn't exist, see file:
# assignment_defaults.qdf
#
# 2) Altera recommends that you do not modify this file. This
# file is updated automatically by the Quartus II software
# and any changes you make may be lost or overwritten.
#
# -------------------------------------------------------------------------- #
# Project-Wide Assignments
# ========================
set_global_assignment -name PROJECT_OUTPUT_DIRECTORY output_files
set_global_assignment -name NUM_PARALLEL_PROCESSORS ALL
set_global_assignment -name LAST_QUARTUS_VERSION 13.1
set_global_assignment -name PRE_FLOW_SCRIPT_FILE "quartus_sh:rtl/build_id.tcl"
set_global_assignment -name SMART_RECOMPILE ON
set_global_assignment -name SYSTEMVERILOG_FILE rtl/TankBatt_MiST.sv
set_global_assignment -name VERILOG_FILE rtl/Tankb_fpga.v
set_global_assignment -name VERILOG_FILE rtl/ttl_chips.v
set_global_assignment -name VERILOG_FILE rtl/sound_FSM.v
set_global_assignment -name VHDL_FILE rtl/EngineSound.vhd
set_global_assignment -name VERILOG_FILE rtl/clock.v
set_global_assignment -name VERILOG_FILE rtl/ram.v
set_global_assignment -name VERILOG_FILE rtl/pll.v
set_global_assignment -name QIP_FILE "D:/GitHub/Mist_FPGA/common/mist/mist.qip"
set_global_assignment -name QIP_FILE "D:/GitHub/Mist_FPGA/common/CPU/T65/T65.qip"
set_global_assignment -name VHDL_FILE rtl/rom/l3.vhd
set_global_assignment -name VHDL_FILE rtl/rom/k3.vhd
set_global_assignment -name VHDL_FILE rtl/rom/a1.vhd
set_global_assignment -name VHDL_FILE rtl/rom/b1.vhd
set_global_assignment -name VHDL_FILE rtl/rom/c1.vhd
set_global_assignment -name VHDL_FILE rtl/rom/d1.vhd
# Pin & Location Assignments
# ==========================
set_location_assignment PIN_7 -to LED
set_location_assignment PIN_54 -to CLOCK_27
set_location_assignment PIN_144 -to VGA_R[5]
set_location_assignment PIN_143 -to VGA_R[4]
set_location_assignment PIN_142 -to VGA_R[3]
set_location_assignment PIN_141 -to VGA_R[2]
set_location_assignment PIN_137 -to VGA_R[1]
set_location_assignment PIN_135 -to VGA_R[0]
set_location_assignment PIN_133 -to VGA_B[5]
set_location_assignment PIN_132 -to VGA_B[4]
set_location_assignment PIN_125 -to VGA_B[3]
set_location_assignment PIN_121 -to VGA_B[2]
set_location_assignment PIN_120 -to VGA_B[1]
set_location_assignment PIN_115 -to VGA_B[0]
set_location_assignment PIN_114 -to VGA_G[5]
set_location_assignment PIN_113 -to VGA_G[4]
set_location_assignment PIN_112 -to VGA_G[3]
set_location_assignment PIN_111 -to VGA_G[2]
set_location_assignment PIN_110 -to VGA_G[1]
set_location_assignment PIN_106 -to VGA_G[0]
set_location_assignment PIN_136 -to VGA_VS
set_location_assignment PIN_119 -to VGA_HS
set_location_assignment PIN_65 -to AUDIO_L
set_location_assignment PIN_80 -to AUDIO_R
set_location_assignment PIN_105 -to SPI_DO
set_location_assignment PIN_88 -to SPI_DI
set_location_assignment PIN_126 -to SPI_SCK
set_location_assignment PIN_127 -to SPI_SS2
set_location_assignment PIN_91 -to SPI_SS3
set_location_assignment PIN_13 -to CONF_DATA0
set_location_assignment PLL_1 -to "pll:pll|altpll:altpll_component"
# Classic Timing Assignments
# ==========================
set_global_assignment -name MIN_CORE_JUNCTION_TEMP 0
set_global_assignment -name MAX_CORE_JUNCTION_TEMP 85
set_global_assignment -name TIMEQUEST_MULTICORNER_ANALYSIS ON
# Analysis & Synthesis Assignments
# ================================
set_global_assignment -name FAMILY "Cyclone III"
set_global_assignment -name DEVICE_FILTER_PIN_COUNT 144
set_global_assignment -name DEVICE_FILTER_SPEED_GRADE 8
set_global_assignment -name DEVICE_FILTER_PACKAGE TQFP
set_global_assignment -name VERILOG_INPUT_VERSION SYSTEMVERILOG_2005
set_global_assignment -name VERILOG_SHOW_LMF_MAPPING_MESSAGES OFF
set_global_assignment -name SEARCH_PATH Mist_FPGA/common/CPU/T80/ -tag from_archive
set_global_assignment -name SEARCH_PATH Mist_FPGA/common/Sound/ym2149/ -tag from_archive
set_global_assignment -name SEARCH_PATH Mist_FPGA/common/mist/ -tag from_archive
set_global_assignment -name SEARCH_PATH rtl/ -tag from_archive
set_global_assignment -name SEARCH_PATH rtl/rom/ -tag from_archive
set_global_assignment -name SEARCH_PATH rtl/ttl/ -tag from_archive
set_global_assignment -name TOP_LEVEL_ENTITY TankBatt_MiST
# Fitter Assignments
# ==================
set_global_assignment -name DEVICE EP3C25E144C8
set_global_assignment -name ENABLE_CONFIGURATION_PINS OFF
set_global_assignment -name ENABLE_NCE_PIN OFF
set_global_assignment -name ENABLE_BOOT_SEL_PIN OFF
set_global_assignment -name CYCLONEIII_CONFIGURATION_SCHEME "PASSIVE SERIAL"
set_global_assignment -name CRC_ERROR_OPEN_DRAIN OFF
set_global_assignment -name FORCE_CONFIGURATION_VCCIO ON
set_global_assignment -name STRATIX_DEVICE_IO_STANDARD "3.3-V LVTTL"
set_global_assignment -name CYCLONEII_RESERVE_NCEO_AFTER_CONFIGURATION "USE AS REGULAR IO"
set_global_assignment -name RESERVE_DATA0_AFTER_CONFIGURATION "USE AS REGULAR IO"
set_global_assignment -name RESERVE_DATA1_AFTER_CONFIGURATION "USE AS REGULAR IO"
set_global_assignment -name RESERVE_FLASH_NCE_AFTER_CONFIGURATION "USE AS REGULAR IO"
set_global_assignment -name RESERVE_DCLK_AFTER_CONFIGURATION "USE AS REGULAR IO"
set_global_assignment -name PHYSICAL_SYNTHESIS_REGISTER_DUPLICATION ON
set_global_assignment -name PHYSICAL_SYNTHESIS_COMBO_LOGIC_FOR_AREA ON
set_global_assignment -name PHYSICAL_SYNTHESIS_MAP_LOGIC_TO_MEMORY_FOR_AREA ON
# Assembler Assignments
# =====================
set_global_assignment -name GENERATE_RBF_FILE ON
set_global_assignment -name USE_CONFIGURATION_DEVICE OFF
# SignalTap II Assignments
# ========================
set_global_assignment -name ENABLE_SIGNALTAP OFF
set_global_assignment -name USE_SIGNALTAP_FILE output_files/dect.stp
# Power Estimation Assignments
# ============================
set_global_assignment -name POWER_PRESET_COOLING_SOLUTION "23 MM HEAT SINK WITH 200 LFPM AIRFLOW"
set_global_assignment -name POWER_BOARD_THERMAL_MODEL "NONE (CONSERVATIVE)"
# Advanced I/O Timing Assignments
# ===============================
set_global_assignment -name OUTPUT_IO_TIMING_NEAR_END_VMEAS "HALF VCCIO" -rise
set_global_assignment -name OUTPUT_IO_TIMING_NEAR_END_VMEAS "HALF VCCIO" -fall
set_global_assignment -name OUTPUT_IO_TIMING_FAR_END_VMEAS "HALF SIGNAL SWING" -rise
set_global_assignment -name OUTPUT_IO_TIMING_FAR_END_VMEAS "HALF SIGNAL SWING" -fall
# ---------------------------
# start ENTITY(TankBatt_MiST)
# Fitter Assignments
# ==================
set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to VGA_R[*]
set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to VGA_G[*]
set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to VGA_B[*]
set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to VGA_HS
set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to VGA_VS
set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to AUDIO_L
set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to AUDIO_R
set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to SPI_DO
# start DESIGN_PARTITION(Top)
# ---------------------------
# Incremental Compilation Assignments
# ===================================
set_global_assignment -name PARTITION_NETLIST_TYPE SOURCE -section_id Top
set_global_assignment -name PARTITION_FITTER_PRESERVATION_LEVEL PLACEMENT_AND_ROUTING -section_id Top
set_global_assignment -name PARTITION_COLOR 16764057 -section_id Top
# end DESIGN_PARTITION(Top)
# -------------------------
# end ENTITY(TankBatt_MiST)
# -------------------------
set_instance_assignment -name PARTITION_HIERARCHY root_partition -to | -section_id Top

View File

@@ -0,0 +1,15 @@
@echo off
del /s *.bak
del /s *.orig
del /s *.rej
rmdir /s /q db
rmdir /s /q incremental_db
rmdir /s /q output_files
rmdir /s /q simulation
rmdir /s /q greybox_tmp
del PLLJ_PLLSPE_INFO.txt
del *.qws
del *.ppf
del *.qip
del *.ddb
pause

View File

@@ -0,0 +1,164 @@
-- Motor sound generator for Kee Games Ultra Tank
-- This was originally created for Sprint 2 - Identical circuit
-- Similar circuits are used in a number of other games
-- (c) 2017 James Sweet
--
-- Original circuit used a 555 configured as an astable oscillator with the frequency controlled by
-- a four bit binary value. The output of this oscillator drives a counter configured to produce an
-- irregular thumping simulating the sound of an engine.
--
-- This is free software: you can redistribute
-- it and/or modify it under the terms of the GNU General
-- Public License as published by the Free Software
-- Foundation, either version 3 of the License, or (at your
-- option) any later version.
--
-- This is distributed in the hope that it will
-- be useful, but WITHOUT ANY WARRANTY; without even the
-- implied warranty of MERCHANTABILITY or FITNESS FOR A
-- PARTICULAR PURPOSE. See the GNU General Public License
-- for more details.
library IEEE;
use IEEE.STD_LOGIC_1164.all;
use IEEE.STD_LOGIC_ARITH.all;
use IEEE.STD_LOGIC_UNSIGNED.all;
entity EngineSound is
generic(
constant Freq_tune : integer := 50 -- Value from 0-100 used to tune the overall engine sound frequency
);
port(
Clk_6 : in std_logic;
Reset : in std_logic;
highrpm : in std_logic;
Motor : out std_logic_vector(5 downto 0)
);
end EngineSound;
architecture rtl of EngineSound is
signal RPM_val : integer range 1 to 350;
signal Ramp_term_unfilt : integer range 1 to 80000;
signal Ramp_Count : integer range 0 to 80000;
signal Ramp_term : integer range 1 to 80000;
signal Freq_mod : integer range 0 to 400;
signal Motor_Clk : std_logic;
signal Counter_A : std_logic;
signal Counter_B : unsigned(2 downto 0);
signal Counter_A_clk : std_logic;
signal Motor_prefilter : unsigned(1 downto 0);
signal Motor_filter_t1 : unsigned(3 downto 0);
signal Motor_filter_t2 : unsigned(3 downto 0);
signal Motor_filter_t3 : unsigned(3 downto 0);
signal Motor_filtered : unsigned(5 downto 0);
signal ena_count : std_logic_vector(10 downto 0) := (others => '0');
signal ena_3k : std_logic := '0';
begin
Enable: process(clk_6)
begin
if rising_edge(CLK_6) then
ena_count <= ena_count + "1";
ena_3k <= '0';
if (ena_count(10 downto 0) = "00000000000") then
ena_3k <= '1';
end if;
end if;
end process;
-- The frequency of the oscillator is set by a 4 bit binary value controlled by the game CPU
-- in the real hardware this is a 555 coupled to a 4 bit resistor DAC used to pull the frequency.
-- The output of this DAC has a capacitor to smooth out the frequency variation.
-- The constants assigned to RPM_val can be tweaked to adjust the frequency curve
Speed_select: process(Clk_6)
begin
if rising_edge(Clk_6) then
if (highrpm = '1') then
RPM_val <= 25;
else
RPM_val <= 50;
end if;
end if;
end process;
-- There is a RC filter between the frequency control DAC and the 555 to smooth out the transitions between the
-- 16 possible states. We can simulate a reasonable approximation of that behavior using a linear slope which is
-- not truly accurate but should be close enough.
RC_filt: process(clk_6, ena_3k, ramp_term_unfilt)
begin
if rising_edge(clk_6) then
if ena_3k = '1' then
if ramp_term_unfilt > ramp_term then
ramp_term <= ramp_term + 10;
elsif ramp_term_unfilt = ramp_term then
ramp_term <= ramp_term;
else
ramp_term <= ramp_term - 8;
end if;
end if;
end if;
end process;
-- Ramp_term terminates the ramp count, the higher this value, the longer the ramp will count up and the lower
-- the frequency. RPM_val is multiplied by a constant which can be adjusted by changing the value of freq_tune
-- to simulate the function of the frequency adjustment pot in the original hardware.
ramp_term_unfilt <= ((200 - freq_tune) * RPM_val);
-- Variable frequency oscillator roughly approximating the function of a 555 astable oscillator
Ramp_osc: process(clk_6)
begin
if rising_edge(clk_6) then
motor_clk <= '1';
ramp_count <= ramp_count + 1;
if ramp_count > ramp_term then
ramp_count <= 0;
motor_clk <= '0';
end if;
end if;
end process;
-- 7492 counter with XOR on two of the outputs creates lumpy engine sound from smooth pulse train
-- 7492 has two sections, one div-by-2 and one div-by-6.
Engine_counter: process(motor_clk, counter_A_clk, counter_B, reset)
begin
if reset = '1' then
Counter_B <= (others => '0');
elsif rising_edge(motor_clk) then
Counter_B <= Counter_B + '1';
end if;
Counter_A_clk <= Counter_B(0) xor Counter_B(2);
if reset = '1' then
Counter_A <= '0';
elsif rising_edge(counter_A_clk) then
Counter_A <= (not Counter_A);
end if;
end process;
motor_prefilter <= ('0' & Counter_B(2)) + ('0' & Counter_B(1)) + ('0' & Counter_A);
-- Very simple low pass filter, borrowed from MikeJ's Asteroids code
Engine_filter: process(clk_6)
begin
if rising_edge(clk_6) then
if (ena_3k = '1') then
motor_filter_t1 <= ("00" & motor_prefilter) + ("00" & motor_prefilter);
motor_filter_t2 <= motor_filter_t1;
motor_filter_t3 <= motor_filter_t2;
end if;
motor_filtered <= ("00" & motor_filter_t1) +
('0' & motor_filter_t2 & '0') +
("00" & motor_filter_t3);
end if;
end process;
motor <= std_logic_vector(motor_filtered);
end rtl;

View File

@@ -0,0 +1,178 @@
module TankBatt_MiST
(
output LED,
output [5:0] VGA_R,
output [5:0] VGA_G,
output [5:0] VGA_B,
output VGA_HS,
output VGA_VS,
output AUDIO_L,
output AUDIO_R,
input SPI_SCK,
output SPI_DO,
input SPI_DI,
input SPI_SS2,
input SPI_SS3,
input CONF_DATA0,
input CLOCK_27
);
`include "rtl\build_id.v"
//Todo Sound
localparam CONF_STR = {
"CENTIPED;;",
"O2,Rotate Controls,Off,On;",
"O34,Scanlines,Off,25%,50%,75%;",
"O5,Blend,Off,On;",
// "O6,Joystick Swap,Off,On;",
"O8,Test Mode,Off,On;",
"O9,Lives,3,2;",
"OCD,Coinage,1 Coin/1 Credit,2 Coins/1 Credit,1 Coin/2 Credits,Freeplay;",
"OAB,Bonus,20000,10000,None,15000;",
"OE,Cabinet,Upright,Cocktail;",
"T0,Reset;",
"V,v1.50.",`BUILD_DATE
};
wire rotate = status[2];
wire [1:0] scanlines = status[4:3];
wire blend = status[5];
wire joyswap = status[6];
wire service = status[8];
wire cabinet = status[14];
wire [1:0] coinage = status[13:12];
wire lives = status[9];
wire [1:0] bonus = status[13:12];
wire [1:0] orientation = 2'b11;
assign LED = 1'b1;
assign AUDIO_R = AUDIO_L;
wire clk_6, clk_18, clk_36;
wire pll_locked;
pll pll(
.inclk0(CLOCK_27),
.areset(0),
.c0(clk_36),//36.864
.c1(clk_18),//18.432
.c2(clk_6)//6.144
);
wire [63:0] status;
wire [1:0] buttons;
wire [1:0] switches;
wire [31:0] joystick_0;
wire [31:0] joystick_1;
wire scandoublerD;
wire ypbpr;
wire no_csync;
wire key_pressed;
wire [7:0] key_code;
wire key_strobe;
wire r, g, b;
wire hs, vs, vb, hb;
wire blankn = ~(hb | vb);
wire [15:0] audio;
wire [5:0] motor;
wire resetn = ~(status[0] | buttons[1]);
Tankb_fpga Tankb_fpga(
.CLK_18M(clk_18),
.CLK_6M(clk_6),
.RESET_n(resetn),
.vid_r(r),
.vid_g(g),
.vid_b(b),
.vid_hs(hs),
.vid_vs(vs),
.vid_hb(hb),
.vid_vb(vb),
.P1(~{service,m_coin2,m_coin1,m_fireA,m_right,m_down,m_left,m_up}),
.P2(~{1'b0,m_two_players,m_one_player,m_fire2A,m_right2,m_down2,m_left2,m_up2}),
.DSW(~{2'b00,lives,bonus,coinage,cabinet}),
.audio(audio)
);
mist_video #(.COLOR_DEPTH(1), .SD_HCNT_WIDTH(9)) mist_video(
.clk_sys ( clk_36 ),
.SPI_SCK ( SPI_SCK ),
.SPI_SS3 ( SPI_SS3 ),
.SPI_DI ( SPI_DI ),
.R ( blankn ? r : 0 ),
.G ( blankn ? g : 0 ),
.B ( blankn ? b : 0 ),
.HSync ( ~hs ),
.VSync ( ~vs ),
.VGA_R ( VGA_R ),
.VGA_G ( VGA_G ),
.VGA_B ( VGA_B ),
.VGA_VS ( VGA_VS ),
.VGA_HS ( VGA_HS ),
.scanlines ( scanlines ),
.rotate ( {orientation[1],rotate} ),
.ce_divider ( 1'b0 ),
.blend ( blend ),
.scandoubler_disable(scandoublerD ),
.no_csync ( no_csync ),
.ypbpr ( ypbpr )
);
user_io #(
.STRLEN(($size(CONF_STR)>>3)))
user_io(
.clk_sys (clk_18 ),
.conf_str (CONF_STR ),
.SPI_CLK (SPI_SCK ),
.SPI_SS_IO (CONF_DATA0 ),
.SPI_MISO (SPI_DO ),
.SPI_MOSI (SPI_DI ),
.buttons (buttons ),
.switches (switches ),
.scandoubler_disable (scandoublerD ),
.ypbpr (ypbpr ),
.no_csync (no_csync ),
.key_strobe (key_strobe ),
.key_pressed (key_pressed ),
.key_code (key_code ),
.joystick_0 (joystick_0 ),
.joystick_1 (joystick_1 ),
.status (status )
);
dac #(
.C_bits(16))
dac (
.clk_i(clk_18),
.res_n_i(1),
.dac_i({~audio[15],audio[14:0]}),
.dac_o(AUDIO_L)
);
wire m_up, m_down, m_left, m_right, m_fireA, m_fireB, m_fireC, m_fireD, m_fireE, m_fireF;
wire m_up2, m_down2, m_left2, m_right2, m_fire2A, m_fire2B, m_fire2C, m_fire2D, m_fire2E, m_fire2F;
wire m_tilt, m_coin1, m_coin2, m_coin3, m_coin4, m_one_player, m_two_players, m_three_players, m_four_players;
arcade_inputs inputs (
.clk ( clk_18 ),
.key_strobe ( key_strobe ),
.key_pressed ( key_pressed ),
.key_code ( key_code ),
.joystick_0 ( joystick_0 ),
.joystick_1 ( joystick_1 ),
.rotate ( rotate ),
.orientation ( orientation ),
.joyswap ( joyswap ),
.oneplayer ( 1'b1 ),
.controls ( {m_tilt, m_coin4, m_coin3, m_coin2, m_coin1, m_four_players, m_three_players, m_two_players, m_one_player} ),
.player1 ( {m_fireF, m_fireE, m_fireD, m_fireC, m_fireB, m_fireA, m_up, m_down, m_left, m_right} ),
.player2 ( {m_fire2F, m_fire2E, m_fire2D, m_fire2C, m_fire2B, m_fire2A, m_up2, m_down2, m_left2, m_right2} )
);
endmodule

View File

@@ -0,0 +1,614 @@
module Tankb_fpga(
input CLK_18M,
input CLK_6M,
input RESET_n,
output vid_r,
output vid_g,
output vid_b,
output vid_hs,
output vid_vs,
output vid_cs,
output vid_hb,
output vid_vb,
input [7:0] P1,
input [7:0] P2,
input [7:0] DSW,
output signed [15:0] audio
);
wire nRESET = (nRESET_PO & RESET_n);
//power-on reset
reg [5:0] reset_cnt = 0;
wire nRESET_PO = &reset_cnt;
always @(posedge clk) begin
reset_cnt <= reset_cnt + !nRESET_PO;
end
//end power-on reset
//wire & reg setup
wire clk = CLK_18M;
wire PUR = nRESET;
wire A5_1_nq,A6_1_q,A6_1_nq,A6_2_q,A6_2_nq;
wire H1,H2,H4,H8,H16,H32,H64,H128,nH256;
wire A5_2_d=(~H64 & H32);
wire H256=~nH256;
wire B6_ca,C6_ca,E6_ca,D6_ca;
wire nHSYNC;
wire M6Hz=~A6_2_q;
wire nM6PRI=A6_1_nq;
wire D5_2_nq;
wire Phi=H4;
wire nH4_nH8=(~H4 & ~H8);
wire V1,V2,V4,V8,V16,V32,V64,V128,nVSYNC;
wire H256star,nH256star;
wire nCOMPSYNC=(nHSYNC & nVSYNC);
wire nINTACK,nIRQ,VBLANK;
wire F5_1_d=~(V128 & V64 & V32);
wire [7:0] L2_q,K2_d;
wire J2_q;
wire [5:0] J3_q;
wire RBG2;
wire E5_14=!(H4 & H2 & H1);
wire [3:0] D4_2_y;
wire C4_11=(D4_2_y[2] & D4_2_y[0]);
wire [3:0] B2_y,C2_y,B3_y;
wire [11:0] VA;
wire Phi2=Phi;
wire NMION = J4_q[7];
wire explode = J4_q[5];
wire fire = J4_q[4];
wire motor_hi = J4_q[3];
wire motor_on = J4_q[2];
wire nNMI = ~(VBLANK & NMION);
//end wire & reg setup
assign vid_hs = ~nHSYNC;
assign vid_vs = ~nVSYNC;
assign vid_hb = H256star;
assign vid_vb = VBLANK;
////wires
wire nDIPSW,F4_o9,F4_o8,F4_o6,nIN1,nIN0,nWDR,nOUT1,nOUT0;
wire [7:0] rom1a_dout,rom1b_dout,rom1c_dout,rom1d_dout;
wire [7:0] ram1e1j_dout,ram1f1k_dout,ram1h1l_dout,vram_dout,bullet_dout;
wire DIP_Y,IN1_Y,IN0_Y;
//start of address decoding
wire nPhi2,nWO,C4_6,nROM;
assign nROM=!A[13];
wire [3:0] C3_1_y;
ls139 icC3_1(
.a(A[11]),
.b(A[12]),
.n_g(nROM),
.y(C3_1_y)
);
wire nROM_A1_cs = C3_1_y[0];
wire nROM_B1_cs = C3_1_y[1];
wire nROM_C1_cs = C3_1_y[2];
wire nROM_D1_cs = C3_1_y[3];
wire [3:0] C3_2_y,D4_1_y;
assign nPhi2=~Phi2;
wire E4_3=!(nROM & H2);
assign C4_6=(E4_3 & C3_2_y[1]);
ls139 icC3_2(
.a(r_w),
.b(1'b0),
.n_g(A[13]),
.y(C3_2_y)
);
assign nWO=C3_2_y[0];
ls139 icD4_1(
.a(A[10]),
.b(A[11]),
.n_g(C4_6),
.y(D4_1_y)
);
wire nVRAM=D4_1_y[2];
wire nWRAM1=D4_1_y[1];
wire nWRAM0=D4_1_y[0];
ls42 icF4(
.in({D4_1_y[3],nWO,A[4],A[3]}),
.out({F4_o9,F4_o8,nDIPSW,F4_o6,nIN1,nIN0,nWDR,nINTACK,nOUT1,nOUT0})
);
//end address decode
//start horizontal timer
ls107 icA6_1(
.clear(PUR),
.clk(~clk),
.j(A6_2_nq),
.k(PUR),
.q(A6_1_q),
.qnot(A6_1_nq)
);
ls107 icA6_2(
.clear(PUR),
.clk(~clk),
.j(A6_1_q),
.k(PUR),
.q(A6_2_q),
.qnot(A6_2_nq)
);
ls74 icA5(
.n_pre1(PUR),
.n_pre2(PUR),
.n_clr1(PUR),
.n_clr2(H256),
.clk1(M6Hz),
.clk2(H16),
.d1(A5_1_nq),
.d2(A5_2_d),
.q1(H1),
.n_q1(A5_1_nq),
.q2(),
.n_q2(nHSYNC)
);
ls161 icB6(
.n_clr(PUR),
.clk(M6Hz),
.din(4'b0),
.enp(H1),
.ent(H1),
.n_load(PUR),
.q({H16,H8,H4,H2}),
.rco(B6_ca)
);
ls161 icC6(
.n_clr(PUR),
.clk(M6Hz),
.din(4'b0100),
.enp(B6_ca),
.ent(B6_ca),
.n_load(~C6_ca),
.q({nH256,H128,H64,H32}),
.rco(C6_ca)
);
//end horizontal timer
//start vertical timer
ls74 icD5(
.n_pre1(PUR),
.n_pre2(PUR),
.n_clr1(PUR),
.n_clr2(PUR),
.clk1(H8),
.clk2(nHSYNC),
.d1(H256),
.d2(D5_2_nq),
.q1(H256star),
.n_q1(nH256star),
.q2(V1),
.n_q2(D5_2_nq)
);
ls161 icD6(
.n_clr(PUR),
.clk(nHSYNC),
.din(4'b1100),
.enp(V1),
.ent(V1),
.n_load(~E6_ca),
.q({V16,V8,V4,V2}),
.rco(D6_ca)
);
ls161 icE6(
.n_clr(PUR),
.clk(nHSYNC),
.din(4'b0111),
.enp(D6_ca),
.ent(D6_ca),
.n_load(~E6_ca),
.q({nVSYNC,V128,V64,V32}),
.rco(E6_ca)
);
//end vertical timer
//vblank
ls74 icF5(
.n_pre1(PUR),
.n_pre2(nINTACK),
.n_clr1(PUR),
.n_clr2(PUR),
.clk1(V16),
.clk2(V16),
.d1(F5_1_d),
.d2(1'b0),
.q1(),
.n_q1(VBLANK),
.q2(nIRQ),
.n_q2()
);
//end vblank
//start screen render 3
wire [7:0] dsp_din;
ls273 icL2(
.d(dsp_din),
.clk(H4),
.res(PUR),
.q(L2_q)
);
k3 k3(
.clk(clk),
.addr({L2_q,V4,V2,V1}),
.data(K2_d)
);
ls166 icJ2(
.clk(M6Hz),
.load(C4_11),
.in(K2_d),
.out(J2_q)
);
//end of screen render 3
//start of screen render 4
ls174 icJ3(
.d(L2_q[7:2]),
.clk(C4_11),
.mr(PUR),
.q(J3_q)
);
wire vid_i;
l3 l3(
.clk(clk),
.addr({J3_q[5:0],E3_q,J2_q}),
.data({vid_b,vid_g,vid_r,vid_i})
);
//end of screen render 4
//screen render 1a
ls139 icD4_2(
.a(H256),
.b(H256star),
.n_g(E5_14),
.y(D4_2_y)
);
//end of screen render 1a
//start of address buffers
wire C4_3=(1'b1 & H256);//nPhi2 - 1'b1
ls157 icB2(
.i0({4{1'b0}}),
.i1({PUR,1'b0,V128,V64}),
.n_e(C4_3),//1'b0
.s(1'b1),
.z(B2_y)
);
assign VA[11]=B2_y[3];
assign VA[10]=B2_y[2];
assign VA[9]=B2_y[1];
assign VA[8]=B2_y[0];
ls157 icC2(
.i0({4{1'b0}}),
.i1({V32,V16,V8,H128}),
.n_e(C4_3),//
.s(1'b1),
.z(C2_y)
);
assign VA[7]=C2_y[3];
assign VA[6]=C2_y[2];
assign VA[5]=C2_y[1];
assign VA[4]=C2_y[0];
ls157 icB3(
.i0({4{1'b0}}),
.i1({H64,H32,H16,H8}),
.n_e(1'b0),
.s(1'b1),
.z(B3_y)
);
assign VA[3]=B3_y[3];
assign VA[2]=B3_y[2];
assign VA[1]=B3_y[1];
assign VA[0]=B3_y[0];
//end of address buffers
//start of video out
assign vid_cs = nCOMPSYNC;
//end of video out
//start of cpuclk
wire cpu_clken;
clock cpu_clk1(
.clk(clk),
.rst_n(nRESET),
.Phi2(Phi2),
.cpu_clken(cpu_clken)
);
//end of cpuclk
//CPU 6502
wire [15:0] A;
wire r_w;
wire [7:0] cpudata_in,cpudata_out;
T65 T65(
.Res_n(nRESET),
.Enable(cpu_clken),
.Clk(clk),
.Rdy(1),
.IRQ_n(nIRQ),
.NMI_n(nNMI),
.R_W_n(r_w),
.A(A),
.DI(cpudata_in),
.DO(cpudata_out)
);
//end of CPU 6502
//start of ROMs
a1 a1(
.clk(clk),
.addr(A[10:0]),
.data(rom1a_dout)
);
b1 b1(
.clk(clk),
.addr(A[10:0]),
.data(rom1b_dout)
);
c1 c1(
.clk(clk),
.addr(A[10:0]),
.data(rom1c_dout)
);
d1 d1(
.clk(clk),
.addr(A[10:0]),
.data(rom1d_dout)
);
//end of ROMs
//start RAMs
ram2114_DP icE1_J1( //a is cpu side, b is display side - WRAM0
.data_a(cpudata_out),
.data_b(),
.addr_a(A[10:0]),
.addr_b(VA[10:0]),
.we_a(!nWO & !nWRAM0),
.we_b(1'b0),
.clk(clk),
.q_a(ram1e1j_dout),
.q_b(bullet_dout)
);
ram2114 icF1_K1(
.data(cpudata_out),
.addr(A[10:0]),
.we(!nWO & !nWRAM1),
.clk(clk),
.q(ram1f1k_dout)
);
ram2114_DP icH1_L1( //a is cpu side, b is display side
.data_a(cpudata_out),
.data_b(),
.addr_a(A[10:0]),
.addr_b(VA[10:0]),
.we_a(!nWO & !nVRAM),
.we_b(1'b0),
.clk(clk),
.q_a(ram1h1l_dout),
.q_b(vram_dout)
);
//end RAMs
//start of Address muxing
assign cpudata_in = !nROM_A1_cs ? rom1a_dout :
!nROM_B1_cs ? rom1b_dout :
!nROM_C1_cs ? rom1c_dout :
!nROM_D1_cs ? rom1d_dout :
!nWRAM0 ? ram1e1j_dout :
!nWRAM1 ? ram1f1k_dout :
!nVRAM ? ram1h1l_dout :
!nDIPSW ? {DIP_Y,7'b0000000} :
!nIN0 ? {IN0_Y,7'b0000000} :
!nIN1 ? {IN1_Y,7'b0000000} :
8'hFF;
wire nWRAM0_VA = (VA[11:4] == 8'b00000000);
wire nVRAM_VA = (VA[11:10] == 2'b10);
assign dsp_din = nWRAM0_VA ? bullet_dout :
nVRAM_VA ? vram_dout :
8'hFF;
//end of Address muxing
//bullet render 2
wire F3_out,E4_11,H3_ca;
wire [3:0] H3_sigma,H2_sigma;
assign F3_out=!(H256 & H2_sigma[3] & H2_sigma[2] & H2_sigma[1] & H2_sigma[0] & H3_sigma[3] & H3_sigma[2] & E4_11);
ls283 icH3(
.a({V8,V4,V2,V1}),
.b(L2_q[3:0]),
.c_in(1'b0),
.sum(H3_sigma),
.c_out(H3_ca)
);
ls283 icH2(
.a({V128,V64,V32,V16}),
.b(L2_q[7:4]),
.c_in(H3_ca),
.sum(H2_sigma),
.c_out()
);
wire D2_d,E3_1_nq,E3_q;
assign E4_11=!(H3_sigma[1] & H3_sigma[0]);
ls74 icE3(
.n_pre1(PUR),
.n_pre2(PUR),
.n_clr1(PUR),
.n_clr2(nH256star),
.clk1(H8),
.clk2(nM6PRI),
.d1(F3_out),
.d2(D2_d),
.q1(),
.n_q1(E3_1_nq),
.q2(E3_q),
.n_q2()
);
wire E4_6,E5_out;
assign E4_6=!(H2 & H1);
assign E5_out=!(E3_1_nq & nH4_nH8 & E4_6);
//end of bullet render 2
//bullet render 1
wire [3:0] F2_q,E2_q;
wire F2_ca;
wire C5_3=(H256star & E5_out);
ls163 icF2(
.n_clr(D4_2_y[2]),
.clk(M6Hz),
.din(L2_q[3:0]),
.enp(1'b1),
.ent(1'b1),
.n_load(D4_2_y[3]),
.q(F2_q),
.rco(F2_ca)
);
ls163 icE2(
.n_clr(D4_2_y[2]),
.clk(M6Hz),
.din(L2_q[7:4]),
.enp(F2_ca),
.ent(F2_ca),
.n_load(D4_2_y[3]),
.q(E2_q),
.rco()
);
ram8125 icD2(
.di(H256star),
.addr({E2_q,F2_q}),
.we(!M6Hz),
.clk(clk),
.cs(!C5_3),
.q(D2_d)
);
//end of bullet render 1
//start of peripherals
ls251 icF7(
.CBA(A[2:0]),
.s(nDIPSW),
.D(DSW),
.Y(DIP_Y),
.W()
);
ls251 icD7(
.CBA(A[2:0]),
.s(nIN1),
.D(P2),
.Y(IN1_Y),
.W()
);
ls251 icE7(
.CBA(A[2:0]),
.s(nIN0),
.D(P1),
.Y(IN0_Y),
.W()
);
wire [7:0] J4_q;
ls259 icJ4(
.A(A[2:0]),
.nE(nOUT1),
.nC(nRESET),
.D(cpudata_out[0]),
.Q(J4_q)
);
//end of peripherals
//start of sound
wire [15:0] wav1_amp;
wire [15:0] wav2_amp;
wire [15:0] wav3_amp;
sound #(52095,"rom/explode.txt") wav1
(
.clk(CLK_18M),
.trigger(explode),//needs to be the explosion latch
.RESET_n(RESET_n),
.sound_out(wav1_amp)
);
sound #(21791,"rom/fire.txt") wav2
(
.clk(CLK_18M),
.trigger(fire),//needs to be the fire latch
.RESET_n(RESET_n),
.sound_out(wav2_amp)
);
EngineSound EngineSound(
.Clk_6(CLK_6M),
.Reset(motor_on),
.highrpm(motor_hi),
.Motor(wav3_amp[14:9])
);
// Audio mixer
// -----------
// - Combine discrete audio circuit and wave output, then invert
wire signed [15:0] sound_combined = 16'hFFFF - (wav1_amp + wav2_amp + wav3_amp);
assign audio = sound_combined; //can just use sound combined if no pause
//end of sound
endmodule

View File

@@ -0,0 +1,35 @@
# ================================================================================
#
# Build ID Verilog Module Script
# Jeff Wiencrot - 8/1/2011
#
# Generates a Verilog module that contains a timestamp,
# from the current build. These values are available from the build_date, build_time,
# physical_address, and host_name output ports of the build_id module in the build_id.v
# Verilog source file.
#
# ================================================================================
proc generateBuildID_Verilog {} {
# Get the timestamp (see: http://www.altera.com/support/examples/tcl/tcl-date-time-stamp.html)
set buildDate [ clock format [ clock seconds ] -format %y%m%d ]
set buildTime [ clock format [ clock seconds ] -format %H%M%S ]
# Create a Verilog file for output
set outputFileName "rtl/build_id.v"
set outputFile [open $outputFileName "w"]
# Output the Verilog source
puts $outputFile "`define BUILD_DATE \"$buildDate\""
puts $outputFile "`define BUILD_TIME \"$buildTime\""
close $outputFile
# Send confirmation message to the Messages window
post_message "Generated build identification Verilog module: [pwd]/$outputFileName"
post_message "Date: $buildDate"
post_message "Time: $buildTime"
}
# Comment out this line to prevent the process from automatically executing when the file is sourced:
generateBuildID_Verilog

View File

@@ -0,0 +1,29 @@
module clock(
input clk,
input rst_n,
input Phi2,
output cpu_clken
);
wire ff1_out;
ls74 LS74
(
.n_pre1(1'b1),
.n_pre2(),
.n_clr1(1'b1),
.n_clr2(),
.clk1(clk),
.clk2(),
.d1(Phi2),
.d2(),
.q1(ff1_out),
.q2(),
.n_q1(),
.n_q2()
);
wire int1 = (Phi2 ^ ff1_out);
assign cpu_clken = (Phi2 & int1);
endmodule

View File

@@ -0,0 +1,4 @@
set_global_assignment -name IP_TOOL_NAME "ALTPLL"
set_global_assignment -name IP_TOOL_VERSION "13.1"
set_global_assignment -name VERILOG_FILE [file join $::quartus(qip_path) "pll.v"]
set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "pll.ppf"]

View File

@@ -0,0 +1,376 @@
// megafunction wizard: %ALTPLL%
// GENERATION: STANDARD
// VERSION: WM1.0
// MODULE: altpll
// ============================================================
// File Name: pll.v
// Megafunction Name(s):
// altpll
//
// Simulation Library Files(s):
// altera_mf
// ============================================================
// ************************************************************
// THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE!
//
// 13.1.4 Build 182 03/12/2014 SJ Full Version
// ************************************************************
//Copyright (C) 1991-2014 Altera Corporation
//Your use of Altera Corporation's design tools, logic functions
//and other software and tools, and its AMPP partner logic
//functions, and any output files from any of the foregoing
//(including device programming or simulation files), and any
//associated documentation or information are expressly subject
//to the terms and conditions of the Altera Program License
//Subscription Agreement, Altera MegaCore Function License
//Agreement, or other applicable license agreement, including,
//without limitation, that your use is for the sole purpose of
//programming logic devices manufactured by Altera and sold by
//Altera or its authorized distributors. Please refer to the
//applicable agreement for further details.
// synopsys translate_off
`timescale 1 ps / 1 ps
// synopsys translate_on
module pll (
areset,
inclk0,
c0,
c1,
c2,
locked);
input areset;
input inclk0;
output c0;
output c1;
output c2;
output locked;
`ifndef ALTERA_RESERVED_QIS
// synopsys translate_off
`endif
tri0 areset;
`ifndef ALTERA_RESERVED_QIS
// synopsys translate_on
`endif
wire [4:0] sub_wire0;
wire sub_wire2;
wire [0:0] sub_wire7 = 1'h0;
wire [2:2] sub_wire4 = sub_wire0[2:2];
wire [0:0] sub_wire3 = sub_wire0[0:0];
wire [1:1] sub_wire1 = sub_wire0[1:1];
wire c1 = sub_wire1;
wire locked = sub_wire2;
wire c0 = sub_wire3;
wire c2 = sub_wire4;
wire sub_wire5 = inclk0;
wire [1:0] sub_wire6 = {sub_wire7, sub_wire5};
altpll altpll_component (
.areset (areset),
.inclk (sub_wire6),
.clk (sub_wire0),
.locked (sub_wire2),
.activeclock (),
.clkbad (),
.clkena ({6{1'b1}}),
.clkloss (),
.clkswitch (1'b0),
.configupdate (1'b0),
.enable0 (),
.enable1 (),
.extclk (),
.extclkena ({4{1'b1}}),
.fbin (1'b1),
.fbmimicbidir (),
.fbout (),
.fref (),
.icdrclk (),
.pfdena (1'b1),
.phasecounterselect ({4{1'b1}}),
.phasedone (),
.phasestep (1'b1),
.phaseupdown (1'b1),
.pllena (1'b1),
.scanaclr (1'b0),
.scanclk (1'b0),
.scanclkena (1'b1),
.scandata (1'b0),
.scandataout (),
.scandone (),
.scanread (1'b0),
.scanwrite (1'b0),
.sclkout0 (),
.sclkout1 (),
.vcooverrange (),
.vcounderrange ());
defparam
altpll_component.bandwidth_type = "AUTO",
altpll_component.clk0_divide_by = 52,
altpll_component.clk0_duty_cycle = 50,
altpll_component.clk0_multiply_by = 71,
altpll_component.clk0_phase_shift = "0",
altpll_component.clk1_divide_by = 375,
altpll_component.clk1_duty_cycle = 50,
altpll_component.clk1_multiply_by = 256,
altpll_component.clk1_phase_shift = "0",
altpll_component.clk2_divide_by = 508,
altpll_component.clk2_duty_cycle = 50,
altpll_component.clk2_multiply_by = 71,
altpll_component.clk2_phase_shift = "0",
altpll_component.compensate_clock = "CLK0",
altpll_component.inclk0_input_frequency = 37037,
altpll_component.intended_device_family = "Cyclone III",
altpll_component.lpm_hint = "CBX_MODULE_PREFIX=pll",
altpll_component.lpm_type = "altpll",
altpll_component.operation_mode = "NORMAL",
altpll_component.pll_type = "AUTO",
altpll_component.port_activeclock = "PORT_UNUSED",
altpll_component.port_areset = "PORT_USED",
altpll_component.port_clkbad0 = "PORT_UNUSED",
altpll_component.port_clkbad1 = "PORT_UNUSED",
altpll_component.port_clkloss = "PORT_UNUSED",
altpll_component.port_clkswitch = "PORT_UNUSED",
altpll_component.port_configupdate = "PORT_UNUSED",
altpll_component.port_fbin = "PORT_UNUSED",
altpll_component.port_inclk0 = "PORT_USED",
altpll_component.port_inclk1 = "PORT_UNUSED",
altpll_component.port_locked = "PORT_USED",
altpll_component.port_pfdena = "PORT_UNUSED",
altpll_component.port_phasecounterselect = "PORT_UNUSED",
altpll_component.port_phasedone = "PORT_UNUSED",
altpll_component.port_phasestep = "PORT_UNUSED",
altpll_component.port_phaseupdown = "PORT_UNUSED",
altpll_component.port_pllena = "PORT_UNUSED",
altpll_component.port_scanaclr = "PORT_UNUSED",
altpll_component.port_scanclk = "PORT_UNUSED",
altpll_component.port_scanclkena = "PORT_UNUSED",
altpll_component.port_scandata = "PORT_UNUSED",
altpll_component.port_scandataout = "PORT_UNUSED",
altpll_component.port_scandone = "PORT_UNUSED",
altpll_component.port_scanread = "PORT_UNUSED",
altpll_component.port_scanwrite = "PORT_UNUSED",
altpll_component.port_clk0 = "PORT_USED",
altpll_component.port_clk1 = "PORT_USED",
altpll_component.port_clk2 = "PORT_USED",
altpll_component.port_clk3 = "PORT_UNUSED",
altpll_component.port_clk4 = "PORT_UNUSED",
altpll_component.port_clk5 = "PORT_UNUSED",
altpll_component.port_clkena0 = "PORT_UNUSED",
altpll_component.port_clkena1 = "PORT_UNUSED",
altpll_component.port_clkena2 = "PORT_UNUSED",
altpll_component.port_clkena3 = "PORT_UNUSED",
altpll_component.port_clkena4 = "PORT_UNUSED",
altpll_component.port_clkena5 = "PORT_UNUSED",
altpll_component.port_extclk0 = "PORT_UNUSED",
altpll_component.port_extclk1 = "PORT_UNUSED",
altpll_component.port_extclk2 = "PORT_UNUSED",
altpll_component.port_extclk3 = "PORT_UNUSED",
altpll_component.self_reset_on_loss_lock = "OFF",
altpll_component.width_clock = 5;
endmodule
// ============================================================
// CNX file retrieval info
// ============================================================
// Retrieval info: PRIVATE: ACTIVECLK_CHECK STRING "0"
// Retrieval info: PRIVATE: BANDWIDTH STRING "1.000"
// Retrieval info: PRIVATE: BANDWIDTH_FEATURE_ENABLED STRING "1"
// Retrieval info: PRIVATE: BANDWIDTH_FREQ_UNIT STRING "MHz"
// Retrieval info: PRIVATE: BANDWIDTH_PRESET STRING "Low"
// Retrieval info: PRIVATE: BANDWIDTH_USE_AUTO STRING "1"
// Retrieval info: PRIVATE: BANDWIDTH_USE_PRESET STRING "0"
// Retrieval info: PRIVATE: CLKBAD_SWITCHOVER_CHECK STRING "0"
// Retrieval info: PRIVATE: CLKLOSS_CHECK STRING "0"
// Retrieval info: PRIVATE: CLKSWITCH_CHECK STRING "0"
// Retrieval info: PRIVATE: CNX_NO_COMPENSATE_RADIO STRING "0"
// Retrieval info: PRIVATE: CREATE_CLKBAD_CHECK STRING "0"
// Retrieval info: PRIVATE: CREATE_INCLK1_CHECK STRING "0"
// Retrieval info: PRIVATE: CUR_DEDICATED_CLK STRING "c0"
// Retrieval info: PRIVATE: CUR_FBIN_CLK STRING "c0"
// Retrieval info: PRIVATE: DEVICE_SPEED_GRADE STRING "8"
// Retrieval info: PRIVATE: DIV_FACTOR0 NUMERIC "52"
// Retrieval info: PRIVATE: DIV_FACTOR1 NUMERIC "3"
// Retrieval info: PRIVATE: DIV_FACTOR2 NUMERIC "508"
// Retrieval info: PRIVATE: DUTY_CYCLE0 STRING "50.00000000"
// Retrieval info: PRIVATE: DUTY_CYCLE1 STRING "50.00000000"
// Retrieval info: PRIVATE: DUTY_CYCLE2 STRING "50.00000000"
// Retrieval info: PRIVATE: EFF_OUTPUT_FREQ_VALUE0 STRING "36.865383"
// Retrieval info: PRIVATE: EFF_OUTPUT_FREQ_VALUE1 STRING "18.431999"
// Retrieval info: PRIVATE: EFF_OUTPUT_FREQ_VALUE2 STRING "3.773622"
// Retrieval info: PRIVATE: EXPLICIT_SWITCHOVER_COUNTER STRING "0"
// Retrieval info: PRIVATE: EXT_FEEDBACK_RADIO STRING "0"
// Retrieval info: PRIVATE: GLOCKED_COUNTER_EDIT_CHANGED STRING "1"
// Retrieval info: PRIVATE: GLOCKED_FEATURE_ENABLED STRING "0"
// Retrieval info: PRIVATE: GLOCKED_MODE_CHECK STRING "0"
// Retrieval info: PRIVATE: GLOCK_COUNTER_EDIT NUMERIC "1048575"
// Retrieval info: PRIVATE: HAS_MANUAL_SWITCHOVER STRING "1"
// Retrieval info: PRIVATE: INCLK0_FREQ_EDIT STRING "27.000"
// Retrieval info: PRIVATE: INCLK0_FREQ_UNIT_COMBO STRING "MHz"
// Retrieval info: PRIVATE: INCLK1_FREQ_EDIT STRING "100.000"
// Retrieval info: PRIVATE: INCLK1_FREQ_EDIT_CHANGED STRING "1"
// Retrieval info: PRIVATE: INCLK1_FREQ_UNIT_CHANGED STRING "1"
// Retrieval info: PRIVATE: INCLK1_FREQ_UNIT_COMBO STRING "MHz"
// Retrieval info: PRIVATE: INTENDED_DEVICE_FAMILY STRING "Cyclone III"
// Retrieval info: PRIVATE: INT_FEEDBACK__MODE_RADIO STRING "1"
// Retrieval info: PRIVATE: LOCKED_OUTPUT_CHECK STRING "1"
// Retrieval info: PRIVATE: LONG_SCAN_RADIO STRING "1"
// Retrieval info: PRIVATE: LVDS_MODE_DATA_RATE STRING "Not Available"
// Retrieval info: PRIVATE: LVDS_MODE_DATA_RATE_DIRTY NUMERIC "0"
// Retrieval info: PRIVATE: LVDS_PHASE_SHIFT_UNIT0 STRING "deg"
// Retrieval info: PRIVATE: LVDS_PHASE_SHIFT_UNIT1 STRING "ps"
// Retrieval info: PRIVATE: LVDS_PHASE_SHIFT_UNIT2 STRING "ps"
// Retrieval info: PRIVATE: MIG_DEVICE_SPEED_GRADE STRING "Any"
// Retrieval info: PRIVATE: MIRROR_CLK0 STRING "0"
// Retrieval info: PRIVATE: MIRROR_CLK1 STRING "0"
// Retrieval info: PRIVATE: MIRROR_CLK2 STRING "0"
// Retrieval info: PRIVATE: MULT_FACTOR0 NUMERIC "71"
// Retrieval info: PRIVATE: MULT_FACTOR1 NUMERIC "2"
// Retrieval info: PRIVATE: MULT_FACTOR2 NUMERIC "71"
// Retrieval info: PRIVATE: NORMAL_MODE_RADIO STRING "1"
// Retrieval info: PRIVATE: OUTPUT_FREQ0 STRING "36.86400000"
// Retrieval info: PRIVATE: OUTPUT_FREQ1 STRING "18.43200000"
// Retrieval info: PRIVATE: OUTPUT_FREQ2 STRING "3.77000000"
// Retrieval info: PRIVATE: OUTPUT_FREQ_MODE0 STRING "0"
// Retrieval info: PRIVATE: OUTPUT_FREQ_MODE1 STRING "1"
// Retrieval info: PRIVATE: OUTPUT_FREQ_MODE2 STRING "0"
// Retrieval info: PRIVATE: OUTPUT_FREQ_UNIT0 STRING "MHz"
// Retrieval info: PRIVATE: OUTPUT_FREQ_UNIT1 STRING "MHz"
// Retrieval info: PRIVATE: OUTPUT_FREQ_UNIT2 STRING "MHz"
// Retrieval info: PRIVATE: PHASE_RECONFIG_FEATURE_ENABLED STRING "1"
// 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 "0.00000000"
// 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 "ps"
// Retrieval info: PRIVATE: PHASE_SHIFT_UNIT2 STRING "deg"
// Retrieval info: PRIVATE: PLL_ADVANCED_PARAM_CHECK STRING "0"
// Retrieval info: PRIVATE: PLL_ARESET_CHECK STRING "1"
// Retrieval info: PRIVATE: PLL_AUTOPLL_CHECK NUMERIC "1"
// Retrieval info: PRIVATE: PLL_ENHPLL_CHECK NUMERIC "0"
// Retrieval info: PRIVATE: PLL_FASTPLL_CHECK NUMERIC "0"
// Retrieval info: PRIVATE: PLL_FBMIMIC_CHECK STRING "0"
// Retrieval info: PRIVATE: PLL_LVDS_PLL_CHECK NUMERIC "0"
// Retrieval info: PRIVATE: PLL_PFDENA_CHECK STRING "0"
// Retrieval info: PRIVATE: PLL_TARGET_HARCOPY_CHECK NUMERIC "0"
// Retrieval info: PRIVATE: PRIMARY_CLK_COMBO STRING "inclk0"
// Retrieval info: PRIVATE: RECONFIG_FILE STRING "pll.mif"
// Retrieval info: PRIVATE: SACN_INPUTS_CHECK STRING "0"
// Retrieval info: PRIVATE: SCAN_FEATURE_ENABLED STRING "1"
// Retrieval info: PRIVATE: SELF_RESET_LOCK_LOSS STRING "0"
// Retrieval info: PRIVATE: SHORT_SCAN_RADIO STRING "0"
// Retrieval info: PRIVATE: SPREAD_FEATURE_ENABLED STRING "0"
// Retrieval info: PRIVATE: SPREAD_FREQ STRING "50.000"
// Retrieval info: PRIVATE: SPREAD_FREQ_UNIT STRING "KHz"
// Retrieval info: PRIVATE: SPREAD_PERCENT STRING "0.500"
// Retrieval info: PRIVATE: SPREAD_USE STRING "0"
// Retrieval info: PRIVATE: SRC_SYNCH_COMP_RADIO STRING "0"
// Retrieval info: PRIVATE: STICKY_CLK0 STRING "1"
// Retrieval info: PRIVATE: STICKY_CLK1 STRING "1"
// Retrieval info: PRIVATE: STICKY_CLK2 STRING "1"
// Retrieval info: PRIVATE: SWITCHOVER_COUNT_EDIT NUMERIC "1"
// Retrieval info: PRIVATE: SWITCHOVER_FEATURE_ENABLED STRING "1"
// Retrieval info: PRIVATE: SYNTH_WRAPPER_GEN_POSTFIX STRING "0"
// Retrieval info: PRIVATE: USE_CLK0 STRING "1"
// Retrieval info: PRIVATE: USE_CLK1 STRING "1"
// Retrieval info: PRIVATE: USE_CLK2 STRING "1"
// Retrieval info: PRIVATE: USE_CLKENA0 STRING "0"
// Retrieval info: PRIVATE: USE_CLKENA1 STRING "0"
// Retrieval info: PRIVATE: USE_CLKENA2 STRING "0"
// Retrieval info: PRIVATE: USE_MIL_SPEED_GRADE NUMERIC "0"
// Retrieval info: PRIVATE: ZERO_DELAY_RADIO STRING "0"
// Retrieval info: LIBRARY: altera_mf altera_mf.altera_mf_components.all
// Retrieval info: CONSTANT: BANDWIDTH_TYPE STRING "AUTO"
// Retrieval info: CONSTANT: CLK0_DIVIDE_BY NUMERIC "52"
// Retrieval info: CONSTANT: CLK0_DUTY_CYCLE NUMERIC "50"
// Retrieval info: CONSTANT: CLK0_MULTIPLY_BY NUMERIC "71"
// Retrieval info: CONSTANT: CLK0_PHASE_SHIFT STRING "0"
// Retrieval info: CONSTANT: CLK1_DIVIDE_BY NUMERIC "375"
// Retrieval info: CONSTANT: CLK1_DUTY_CYCLE NUMERIC "50"
// Retrieval info: CONSTANT: CLK1_MULTIPLY_BY NUMERIC "256"
// Retrieval info: CONSTANT: CLK1_PHASE_SHIFT STRING "0"
// Retrieval info: CONSTANT: CLK2_DIVIDE_BY NUMERIC "508"
// Retrieval info: CONSTANT: CLK2_DUTY_CYCLE NUMERIC "50"
// Retrieval info: CONSTANT: CLK2_MULTIPLY_BY NUMERIC "71"
// Retrieval info: CONSTANT: CLK2_PHASE_SHIFT STRING "0"
// Retrieval info: CONSTANT: COMPENSATE_CLOCK STRING "CLK0"
// Retrieval info: CONSTANT: INCLK0_INPUT_FREQUENCY NUMERIC "37037"
// Retrieval info: CONSTANT: INTENDED_DEVICE_FAMILY STRING "Cyclone III"
// Retrieval info: CONSTANT: LPM_TYPE STRING "altpll"
// Retrieval info: CONSTANT: OPERATION_MODE STRING "NORMAL"
// Retrieval info: CONSTANT: PLL_TYPE STRING "AUTO"
// Retrieval info: CONSTANT: PORT_ACTIVECLOCK STRING "PORT_UNUSED"
// Retrieval info: CONSTANT: PORT_ARESET STRING "PORT_USED"
// Retrieval info: CONSTANT: PORT_CLKBAD0 STRING "PORT_UNUSED"
// Retrieval info: CONSTANT: PORT_CLKBAD1 STRING "PORT_UNUSED"
// Retrieval info: CONSTANT: PORT_CLKLOSS STRING "PORT_UNUSED"
// Retrieval info: CONSTANT: PORT_CLKSWITCH STRING "PORT_UNUSED"
// Retrieval info: CONSTANT: PORT_CONFIGUPDATE STRING "PORT_UNUSED"
// Retrieval info: CONSTANT: PORT_FBIN STRING "PORT_UNUSED"
// Retrieval info: CONSTANT: PORT_INCLK0 STRING "PORT_USED"
// Retrieval info: CONSTANT: PORT_INCLK1 STRING "PORT_UNUSED"
// Retrieval info: CONSTANT: PORT_LOCKED STRING "PORT_USED"
// Retrieval info: CONSTANT: PORT_PFDENA STRING "PORT_UNUSED"
// Retrieval info: CONSTANT: PORT_PHASECOUNTERSELECT STRING "PORT_UNUSED"
// Retrieval info: CONSTANT: PORT_PHASEDONE STRING "PORT_UNUSED"
// Retrieval info: CONSTANT: PORT_PHASESTEP STRING "PORT_UNUSED"
// Retrieval info: CONSTANT: PORT_PHASEUPDOWN STRING "PORT_UNUSED"
// Retrieval info: CONSTANT: PORT_PLLENA STRING "PORT_UNUSED"
// Retrieval info: CONSTANT: PORT_SCANACLR STRING "PORT_UNUSED"
// Retrieval info: CONSTANT: PORT_SCANCLK STRING "PORT_UNUSED"
// Retrieval info: CONSTANT: PORT_SCANCLKENA STRING "PORT_UNUSED"
// Retrieval info: CONSTANT: PORT_SCANDATA STRING "PORT_UNUSED"
// Retrieval info: CONSTANT: PORT_SCANDATAOUT STRING "PORT_UNUSED"
// Retrieval info: CONSTANT: PORT_SCANDONE STRING "PORT_UNUSED"
// Retrieval info: CONSTANT: PORT_SCANREAD STRING "PORT_UNUSED"
// Retrieval info: CONSTANT: PORT_SCANWRITE STRING "PORT_UNUSED"
// Retrieval info: CONSTANT: PORT_clk0 STRING "PORT_USED"
// Retrieval info: CONSTANT: PORT_clk1 STRING "PORT_USED"
// Retrieval info: CONSTANT: PORT_clk2 STRING "PORT_USED"
// Retrieval info: CONSTANT: PORT_clk3 STRING "PORT_UNUSED"
// Retrieval info: CONSTANT: PORT_clk4 STRING "PORT_UNUSED"
// Retrieval info: CONSTANT: PORT_clk5 STRING "PORT_UNUSED"
// Retrieval info: CONSTANT: PORT_clkena0 STRING "PORT_UNUSED"
// Retrieval info: CONSTANT: PORT_clkena1 STRING "PORT_UNUSED"
// Retrieval info: CONSTANT: PORT_clkena2 STRING "PORT_UNUSED"
// Retrieval info: CONSTANT: PORT_clkena3 STRING "PORT_UNUSED"
// Retrieval info: CONSTANT: PORT_clkena4 STRING "PORT_UNUSED"
// Retrieval info: CONSTANT: PORT_clkena5 STRING "PORT_UNUSED"
// Retrieval info: CONSTANT: PORT_extclk0 STRING "PORT_UNUSED"
// Retrieval info: CONSTANT: PORT_extclk1 STRING "PORT_UNUSED"
// Retrieval info: CONSTANT: PORT_extclk2 STRING "PORT_UNUSED"
// Retrieval info: CONSTANT: PORT_extclk3 STRING "PORT_UNUSED"
// Retrieval info: CONSTANT: SELF_RESET_ON_LOSS_LOCK STRING "OFF"
// Retrieval info: CONSTANT: WIDTH_CLOCK NUMERIC "5"
// Retrieval info: USED_PORT: @clk 0 0 5 0 OUTPUT_CLK_EXT VCC "@clk[4..0]"
// Retrieval info: USED_PORT: areset 0 0 0 0 INPUT GND "areset"
// Retrieval info: USED_PORT: c0 0 0 0 0 OUTPUT_CLK_EXT VCC "c0"
// Retrieval info: USED_PORT: c1 0 0 0 0 OUTPUT_CLK_EXT VCC "c1"
// Retrieval info: USED_PORT: c2 0 0 0 0 OUTPUT_CLK_EXT VCC "c2"
// Retrieval info: USED_PORT: inclk0 0 0 0 0 INPUT_CLK_EXT GND "inclk0"
// Retrieval info: USED_PORT: locked 0 0 0 0 OUTPUT GND "locked"
// Retrieval info: CONNECT: @areset 0 0 0 0 areset 0 0 0 0
// Retrieval info: CONNECT: @inclk 0 0 1 1 GND 0 0 0 0
// Retrieval info: CONNECT: @inclk 0 0 1 0 inclk0 0 0 0 0
// Retrieval info: CONNECT: c0 0 0 0 0 @clk 0 0 1 0
// Retrieval info: CONNECT: c1 0 0 0 0 @clk 0 0 1 1
// Retrieval info: CONNECT: c2 0 0 0 0 @clk 0 0 1 2
// Retrieval info: CONNECT: locked 0 0 0 0 @locked 0 0 0 0
// Retrieval info: GEN_FILE: TYPE_NORMAL pll.v TRUE
// Retrieval info: GEN_FILE: TYPE_NORMAL pll.ppf TRUE
// Retrieval info: GEN_FILE: TYPE_NORMAL pll.inc FALSE
// Retrieval info: GEN_FILE: TYPE_NORMAL pll.cmp FALSE
// Retrieval info: GEN_FILE: TYPE_NORMAL pll.bsf FALSE
// Retrieval info: GEN_FILE: TYPE_NORMAL pll_inst.v FALSE
// Retrieval info: GEN_FILE: TYPE_NORMAL pll_bb.v FALSE
// Retrieval info: LIB_FILE: altera_mf
// Retrieval info: CBX_MODULE_PREFIX: ON

View File

@@ -0,0 +1,170 @@
module ram2114
(
input [7:0] data,
input [10:0] addr,
input we,clk,
output [7:0] q
);
reg [7:0] ram[2047:0];
reg [10:0] addr_reg;
//RAM initialization Option 1 - Fill
initial
begin : INIT
integer i;
for(i = 0; i < 2048; i = i + 1)
ram[i] = {8{1'b0}};
end
always @ (posedge clk)
begin
// Write
if (we)//!
ram[addr] <= data;
addr_reg <= addr;
end
assign q = ram[addr_reg];
endmodule
module ram2114_DP
(
input [7:0] data_a, data_b,
input [10:0] addr_a, addr_b,
input we_a, we_b, clk,
output reg [7:0] q_a, q_b
);
// Declare the RAM variable
reg [7:0] ram[2047:0];
initial
begin : INIT
integer i;
for(i = 0; i < 2048; i = i + 1)
ram[i] = {8{1'b0}};
end
// Port A
always @ (posedge clk)
begin
if (we_a) //!
begin
ram[addr_a] <= data_a;
q_a <= data_a;
end
else
begin
q_a <= ram[addr_a];
end
end
// Port B
always @ (posedge clk)
begin
if (we_b) //
begin
ram[addr_b] <= data_b;
q_b <= data_b;
end
else
begin
q_b <= ram[addr_b];
end
end
endmodule
//New Modules
module ram8125
(
input di,
input [7:0] addr,
input we,clk,cs,
output q
);
reg ram[0:1023];
reg [7:0] addr_reg;
initial
begin : INIT
integer i;
for(i = 0; i < 1024; i = i + 1)
ram[i] = 1'b0;
end
always @ (posedge clk)
begin
// Write
if (we && cs)
ram[addr] <= di;
addr_reg <= addr;
end
assign q = ram[addr_reg];
endmodule
/*============================================================================
Generic single-port RAM module
Author: Jim Gregory - https://github.com/JimmyStones/
Version: 1.0
Date: 2022-01-28
This program is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the Free
Software Foundation; either version 3 of the License, or (at your option)
any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License along
with this program. If not, see <http://www.gnu.org/licenses/>.
===========================================================================*/
`timescale 1 ps / 1 ps
module spram # (
parameter address_width = 8,
parameter data_width = 8,
parameter init_file= ""
)
(
input clk,
input [(address_width-1):0] address,
input [(data_width-1):0] data,
output reg [(data_width-1):0] q,
input wren
);
localparam ramLength = (2**address_width);
reg [(data_width-1):0] mem [ramLength-1:0];
initial begin
if (init_file>0) $readmemh(init_file, mem);
end
always @(posedge clk)
begin
if (wren)
begin
mem[address] <= data;
q <= data;
end
else
begin
q <= mem[address];
end
end
endmodule

View File

@@ -0,0 +1,150 @@
library ieee;
use ieee.std_logic_1164.all,ieee.numeric_std.all;
entity a1 is
port (
clk : in std_logic;
addr : in std_logic_vector(10 downto 0);
data : out std_logic_vector(7 downto 0)
);
end entity;
architecture prom of a1 is
type rom is array(0 to 2047) of std_logic_vector(7 downto 0);
signal rom_data: rom := (
X"E6",X"0A",X"07",X"B0",X"B0",X"B5",X"BC",X"B2",X"B1",X"C4",X"E6",X"0A",X"07",X"C4",X"B8",X"B7",
X"B9",X"C2",X"C0",X"C5",X"E8",X"0A",X"09",X"B0",X"B0",X"B0",X"BE",X"B9",X"BF",X"B3",X"B0",X"A1",
X"E8",X"0A",X"09",X"B0",X"B0",X"C3",X"BE",X"B9",X"BF",X"B3",X"B0",X"A2",X"C8",X"09",X"09",X"B0",
X"C4",X"B9",X"B4",X"B5",X"C2",X"B3",X"B0",X"A1",X"C8",X"09",X"09",X"C3",X"C4",X"B9",X"B4",X"B5",
X"C2",X"B3",X"B0",X"A2",X"E8",X"0A",X"12",X"B0",X"B0",X"B0",X"B0",X"B0",X"B0",X"B0",X"B0",X"B0",
X"C9",X"B1",X"BC",X"C0",X"B0",X"B5",X"B5",X"C2",X"B6",X"EA",X"0A",X"05",X"C3",X"C5",X"BE",X"BF",
X"B2",X"8A",X"09",X"05",X"B0",X"B0",X"A0",X"A0",X"A0",X"CA",X"09",X"07",X"B7",X"BE",X"B9",X"B8",
X"C4",X"BF",X"BE",X"EC",X"0A",X"04",X"BB",X"BE",X"B1",X"C4",X"3B",X"0B",X"14",X"A0",X"A8",X"A9",
X"A1",X"B0",X"B4",X"B5",X"C4",X"B9",X"BD",X"B9",X"BC",X"B0",X"BF",X"B3",X"BD",X"B1",X"BE",X"B0",
X"AC",X"40",X"0B",X"03",X"B0",X"B0",X"B0",X"E0",X"08",X"03",X"B0",X"B0",X"B0",X"5F",X"0B",X"03",
X"B0",X"B0",X"B0",X"40",X"0B",X"03",X"C0",X"C5",X"A1",X"E0",X"08",X"03",X"C0",X"C5",X"A2",X"5F",
X"0B",X"03",X"D2",X"F5",X"F0",X"40",X"0B",X"16",X"C0",X"C5",X"A2",X"B0",X"B0",X"B0",X"B5",X"C2",
X"BF",X"B3",X"C3",X"B0",X"B8",X"B7",X"B9",X"B8",X"B0",X"B0",X"B0",X"C0",X"C5",X"A1",X"5F",X"0B",
X"16",X"D1",X"F5",X"F0",X"E0",X"E0",X"E0",X"E8",X"E9",X"E7",X"E8",X"E0",X"F3",X"E3",X"EF",X"F2",
X"E5",X"E0",X"E0",X"E0",X"D2",X"F5",X"F0",X"7F",X"0B",X"09",X"C9",X"B1",X"BC",X"C0",X"B0",X"B5",
X"B5",X"C2",X"B6",X"7F",X"0B",X"06",X"C4",X"B9",X"B4",X"B5",X"C2",X"B3",X"F0",X"0A",X"11",X"BE",
X"BF",X"C4",X"C4",X"C5",X"B2",X"B0",X"C4",X"C2",X"B1",X"C4",X"C3",X"B0",X"B8",X"C3",X"C5",X"C0",
X"72",X"0B",X"18",X"C3",X"C4",X"C0",X"B0",X"A0",X"A0",X"A0",X"A0",X"B0",X"B0",X"C2",X"BF",X"B6",
X"B0",X"BB",X"BE",X"B1",X"C4",X"B0",X"C3",X"C5",X"BE",X"BF",X"B2",X"D6",X"0A",X"0E",X"0F",X"0E",
X"0D",X"0C",X"B0",X"DF",X"DE",X"DD",X"DC",X"AF",X"AE",X"AD",X"B0",X"AC",X"B6",X"09",X"03",X"BF",
X"C7",X"C4",X"6E",X"0A",X"05",X"B4",X"BE",X"C5",X"BF",X"C2",X"96",X"0A",X"0A",X"B5",X"BE",X"BF",
X"B0",X"C2",X"B5",X"C9",X"B1",X"BC",X"C0",X"58",X"0A",X"07",X"CB",X"B0",X"C9",X"B4",X"B1",X"B5",
X"C2",X"11",X"0A",X"05",X"F2",X"EF",X"F5",X"EE",X"E4",X"89",X"0A",X"0A",X"F0",X"EC",X"E1",X"F9",
X"E5",X"F2",X"E0",X"F4",X"F7",X"EF",X"67",X"0A",X"07",X"F2",X"E5",X"E1",X"E4",X"F9",X"E0",X"FB",
X"67",X"0A",X"07",X"BE",X"BF",X"B9",X"C3",X"C3",X"B9",X"BD",X"2A",X"0B",X"13",X"C3",X"BB",X"BE",
X"B1",X"C4",X"B0",X"C9",X"BD",X"B5",X"BE",X"B5",X"B0",X"C9",X"BF",X"C2",X"C4",X"C3",X"B5",X"B4",
X"CD",X"0A",X"0E",X"81",X"83",X"B0",X"B0",X"C2",X"C5",X"BF",X"B0",X"B4",X"BE",X"B5",X"B6",X"B5",
X"B4",X"4C",X"09",X"02",X"80",X"82",X"15",X"0B",X"11",X"C3",X"C4",X"C0",X"B0",X"B0",X"B0",X"B0",
X"B0",X"B0",X"5D",X"5F",X"B0",X"B0",X"BB",X"BE",X"B1",X"C4",X"54",X"0A",X"02",X"5C",X"5E",X"59",
X"0A",X"07",X"DF",X"DE",X"DD",X"DC",X"AF",X"AE",X"AD",X"98",X"0A",X"04",X"B5",X"BD",X"B1",X"B7",
X"D8",X"09",X"04",X"C2",X"B5",X"C6",X"BF",X"87",X"0A",X"04",X"EF",X"F6",X"E5",X"F2",X"C7",X"09",
X"04",X"E7",X"E1",X"ED",X"E5",X"07",X"06",X"04",X"05",X"03",X"04",X"01",X"00",X"04",X"07",X"05",
X"04",X"01",X"00",X"04",X"03",X"00",X"04",X"7A",X"64",X"25",X"64",X"D0",X"63",X"7B",X"63",X"26",
X"63",X"D1",X"62",X"7C",X"62",X"27",X"62",X"CE",X"64",X"79",X"64",X"24",X"64",X"CF",X"63",X"7A",
X"63",X"25",X"63",X"D0",X"62",X"7B",X"62",X"00",X"06",X"00",X"00",X"01",X"80",X"03",X"E6",X"67",
X"F0",X"F9",X"99",X"FC",X"3E",X"60",X"03",X"00",X"00",X"00",X"C0",X"00",X"67",X"30",X"FF",X"99",
X"C0",X"3F",X"E6",X"70",X"00",X"19",X"9C",X"C0",X"06",X"67",X"33",X"99",X"99",X"CC",X"26",X"06",
X"00",X"09",X"81",X"80",X"0E",X"67",X"F9",X"F0",X"01",X"FE",X"7C",X"00",X"00",X"00",X"0F",X"80",
X"00",X"03",X"E6",X"67",X"F0",X"F9",X"99",X"FC",X"00",X"66",X"03",X"00",X"19",X"80",X"C3",X"3E",
X"67",X"30",X"CF",X"99",X"CC",X"00",X"06",X"00",X"00",X"01",X"80",X"00",X"00",X"08",X"00",X"00",
X"02",X"00",X"03",X"FC",X"9F",X"30",X"FF",X"27",X"CC",X"00",X"00",X"00",X"00",X"00",X"00",X"03",
X"E6",X"67",X"30",X"F9",X"99",X"CC",X"3E",X"66",X"03",X"00",X"19",X"80",X"C0",X"06",X"67",X"F3",
X"99",X"99",X"FC",X"26",X"06",X"00",X"09",X"81",X"80",X"0E",X"67",X"FC",X"F0",X"19",X"FF",X"3C",
X"00",X"06",X"00",X"00",X"01",X"80",X"03",X"FE",X"67",X"F0",X"FF",X"99",X"FC",X"00",X"00",X"00",
X"00",X"00",X"00",X"03",X"FC",X"9C",X"F0",X"FF",X"27",X"3C",X"00",X"08",X"00",X"00",X"02",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"03",X"F3",X"FC",X"F0",X"FC",X"FF",X"3C",X"00",X"0C",
X"00",X"00",X"03",X"00",X"03",X"CC",X"CF",X"F0",X"F3",X"33",X"FC",X"3C",X"CC",X"00",X"00",X"03",
X"00",X"00",X"00",X"CF",X"F3",X"93",X"33",X"FC",X"24",X"C0",X"00",X"09",X"30",X"00",X"0E",X"4C",
X"CF",X"F0",X"00",X"33",X"FC",X"00",X"0C",X"FF",X"0F",X"FF",X"00",X"03",X"FF",X"C0",X"00",X"00",
X"33",X"9C",X"00",X"0C",X"E7",X"0F",X"33",X"39",X"C3",X"CC",X"CE",X"70",X"F3",X"33",X"9C",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"03",X"80",X"00",X"00",X"20",X"00",X"00",
X"08",X"00",X"00",X"0E",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"18",X"00",X"00",X"06",
X"00",X"03",X"F8",X"1F",X"F0",X"FE",X"07",X"FC",X"00",X"18",X"00",X"00",X"06",X"00",X"03",X"F9",
X"9F",X"F0",X"FE",X"67",X"FC",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"7E",X"67",X"F3",X"9F",
X"99",X"FC",X"20",X"06",X"00",X"08",X"01",X"80",X"0E",X"7E",X"67",X"F0",X"1F",X"99",X"FC",X"00",
X"00",X"00",X"00",X"00",X"00",X"03",X"F9",X"9F",X"F0",X"FE",X"67",X"FC",X"00",X"18",X"00",X"00",
X"06",X"00",X"03",X"F8",X"1F",X"F0",X"FE",X"07",X"FC",X"00",X"18",X"00",X"00",X"06",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"03",X"FF",X"F8",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"0C",X"FF",X"F8",X"01",X"00",X"00",X"00",X"40",X"00",X"00",X"1C",X"FF",X"86",X"00",X"00",X"01",
X"40",X"00",X"00",X"73",X"9F",X"FE",X"7C",X"20",X"08",X"00",X"08",X"02",X"00",X"0E",X"7F",X"F9",
X"F0",X"00",X"00",X"1C",X"00",X"00",X"05",X"07",X"3F",X"E1",X"81",X"00",X"00",X"00",X"40",X"00",
X"00",X"33",X"FF",X"E0",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"FF",X"FE",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"03",X"CF",X"3C",X"F0",X"F3",
X"CF",X"3C",X"00",X"00",X"00",X"00",X"00",X"00",X"03",X"CF",X"3C",X"F0",X"F3",X"CF",X"3C",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"4F",X"3C",X"F3",X"93",X"CF",X"3C",X"24",X"00",X"00",X"09",
X"00",X"00",X"0E",X"4F",X"3C",X"F0",X"13",X"CF",X"3C",X"00",X"00",X"00",X"00",X"00",X"00",X"03",
X"CF",X"3C",X"F0",X"F3",X"CF",X"3C",X"00",X"00",X"00",X"00",X"00",X"00",X"03",X"CF",X"3C",X"F0",
X"F3",X"CF",X"3C",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"03",X"CC",X"F3",X"30",X"F3",X"3C",X"CC",X"00",X"C0",X"33",X"00",X"30",X"0C",X"C3",X"FC",X"CF",
X"30",X"FF",X"33",X"CC",X"00",X"0C",X"00",X"00",X"03",X"00",X"00",X"7F",X"CF",X"F3",X"9F",X"F3",
X"FC",X"20",X"00",X"00",X"08",X"00",X"00",X"0E",X"7F",X"F3",X"F0",X"1F",X"FC",X"FC",X"00",X"03",
X"00",X"00",X"00",X"C0",X"03",X"FF",X"33",X"F0",X"FF",X"CC",X"FC",X"00",X"30",X"00",X"00",X"0C",
X"00",X"03",X"33",X"3C",X"F0",X"CC",X"CF",X"3C",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"03",X"00",X"01",X"01",X"00",X"00",X"00",X"02",
X"03",X"02",X"00",X"03",X"00",X"00",X"00",X"00",X"01",X"01",X"02",X"03",X"01",X"00",X"00",X"00",
X"01",X"01",X"02",X"03",X"01",X"00",X"00",X"02",X"01",X"02",X"01",X"03",X"01",X"00",X"00",X"01",
X"02",X"02",X"02",X"02",X"02",X"00",X"00",X"01",X"02",X"02",X"02",X"02",X"02",X"00",X"00",X"02",
X"02",X"03",X"03",X"02",X"02",X"00",X"00",X"02",X"02",X"03",X"02",X"02",X"03",X"00",X"00",X"00",
X"01",X"01",X"02",X"03",X"01",X"00",X"00",X"00",X"01",X"01",X"02",X"03",X"01",X"00",X"00",X"02",
X"01",X"02",X"01",X"03",X"01",X"00",X"00",X"00",X"02",X"02",X"02",X"02",X"02",X"00",X"00",X"00",
X"02",X"02",X"02",X"02",X"02",X"00",X"00",X"02",X"02",X"03",X"03",X"02",X"02",X"00",X"00",X"01",
X"02",X"02",X"02",X"02",X"02",X"00",X"00",X"01",X"02",X"02",X"02",X"02",X"02",X"00",X"00",X"02",
X"02",X"03",X"03",X"02",X"02",X"00",X"00",X"01",X"02",X"03",X"02",X"02",X"03",X"00",X"00",X"03",
X"04",X"05",X"05",X"04",X"05",X"06",X"06",X"05",X"06",X"07",X"07",X"07",X"07",X"07",X"07",X"03",
X"02",X"02",X"01",X"02",X"02",X"01",X"01",X"01",X"01",X"01",X"01",X"02",X"01",X"02",X"01",X"20",
X"20",X"30",X"60",X"50",X"30",X"30",X"50",X"40",X"80",X"60",X"A0",X"50",X"80",X"80",X"A0",X"20",
X"40",X"40",X"60",X"40",X"60",X"70",X"90",X"60",X"70",X"90",X"B0",X"80",X"A8",X"C8",X"F4",X"03",
X"02",X"02",X"01",X"01",X"03",X"01",X"03",X"01",X"02",X"03",X"04",X"02",X"02",X"02",X"02",X"F0",
X"F0",X"F0",X"F0",X"F4",X"F0",X"E8",X"E0",X"F0",X"C8",X"F0",X"C8",X"01",X"00",X"01",X"01",X"01",
X"00",X"00",X"01",X"01",X"01",X"01",X"00",X"01",X"01",X"01",X"01",X"00",X"00",X"01",X"01",X"01",
X"00",X"01",X"01",X"00",X"01",X"00",X"01",X"01",X"01",X"01",X"00",X"00",X"01",X"00",X"01",X"02",
X"02",X"00",X"07",X"06",X"06",X"07",X"00",X"00",X"03",X"00",X"03",X"09",X"08",X"00",X"00",X"08",
X"09",X"04",X"07",X"09",X"04",X"00",X"00",X"07",X"00",X"09",X"05",X"06",X"08",X"00",X"05",X"06",
X"00",X"08",X"00",X"80",X"05",X"06",X"08",X"80",X"04",X"07",X"09",X"80",X"02",X"06",X"07",X"80",
X"03",X"08",X"09",X"A9",X"B5",X"84",X"08",X"64",X"0B",X"01",X"02",X"00",X"02",X"FB",X"09",X"03",
X"58",X"0A",X"A9",X"B5",X"7B",X"0B",X"9B",X"08",X"00",X"03",X"01",X"03",X"E3",X"09",X"02",X"86",
X"09",X"09",X"49",X"59",X"3A",X"4D",X"42",X"55",X"46",X"41",X"44",X"4C",X"0D",X"09",X"52",X"54",
X"53",X"0D",X"3B",X"0D",X"4D",X"53",X"54",X"45",X"4E",X"30",X"09",X"4C",X"44",X"41",X"09",X"5A",
X"20",X"3A",X"4D",X"42",X"55",X"46",X"41",X"44",X"48",X"0D",X"09",X"43",X"4D",X"50",X"09",X"49",
X"20",X"2F",X"42",X"48",X"0D",X"09",X"42",X"4E",X"45",X"09",X"52",X"20",X"3A",X"4D",X"53",X"54",
X"31",X"31",X"32",X"0D",X"09",X"4C",X"44",X"41",X"09",X"5A",X"20",X"3A",X"4D",X"42",X"55",X"46",
X"41",X"44",X"4C",X"0D",X"09",X"43",X"4D",X"50",X"09",X"49",X"20",X"2F",X"41",X"32",X"48",X"0D",
X"09",X"42",X"43",X"43",X"09",X"52",X"20",X"3A",X"4D",X"53",X"54",X"31",X"32",X"31",X"0D",X"09",
X"42",X"43",X"53",X"09",X"52",X"20",X"3A",X"4D",X"53",X"54",X"31",X"32",X"38",X"0D",X"4D",X"53",
X"54",X"31",X"31",X"32",X"09",X"43",X"4D",X"50",X"09",X"49",X"20",X"2F",X"38",X"0D",X"09",X"42",
X"4E",X"45",X"09",X"52",X"20",X"3A",X"4D",X"53",X"54",X"31",X"32",X"31",X"0D",X"09",X"4C",X"44",
X"41",X"09",X"5A",X"20",X"3A",X"4D",X"42",X"55",X"46",X"41",X"44",X"4C",X"0D",X"09",X"43",X"4D",
X"50",X"09",X"49",X"20",X"2F",X"35",X"45",X"48",X"0D",X"09",X"42",X"43",X"43",X"09",X"52",X"20",
X"3A",X"4D",X"53",X"54",X"31",X"32",X"38",X"0D",X"4D",X"53",X"54",X"31",X"32",X"31",X"09",X"54",
X"59",X"41",X"0D",X"09",X"43",X"4C",X"43",X"0D",X"09",X"41",X"44",X"43",X"09",X"5A",X"20",X"3A",
X"4D",X"42",X"55",X"46",X"41",X"44",X"4C",X"0D",X"09",X"41",X"4E",X"44",X"09",X"49",X"20",X"2F",
X"31",X"46",X"48",X"0D",X"09",X"43",X"4D",X"50",X"09",X"49",X"20",X"2F",X"32",X"0D",X"09",X"42",
X"45",X"51",X"09",X"52",X"20",X"3A",X"4D",X"53",X"54",X"31",X"32",X"38",X"0D",X"09",X"43",X"4D",
X"50",X"09",X"49",X"20",X"2F",X"31",X"44",X"48",X"0D",X"09",X"42",X"4E",X"45",X"09",X"52",X"20",
X"3A",X"4D",X"53",X"54",X"45",X"4E",X"31",X"0D",X"4D",X"53",X"54",X"31",X"32",X"38",X"09",X"4C",
X"44",X"41",X"09",X"49",X"20",X"2F",X"31",X"30",X"48",X"0D",X"09",X"52",X"54",X"53",X"0D",X"4D",
X"53",X"54",X"31",X"30",X"33",X"09",X"49",X"4E",X"59",X"0D",X"4D",X"53",X"54",X"31",X"30",X"34",
X"09",X"49",X"4E",X"58",X"0D",X"4D",X"53",X"54",X"45",X"4E",X"31",X"09",X"4C",X"44",X"41",X"09",
X"49",X"59",X"3A",X"4D",X"42",X"55",X"46",X"41",X"44",X"4C",X"0D",X"09",X"43",X"4D",X"50",X"09",
X"49",X"20",X"2F",X"31",X"31",X"48",X"0D",X"09",X"42",X"43",X"43",X"09",X"52",X"20",X"3A",X"4D",
X"53",X"54",X"31",X"30",X"32",X"0D",X"09",X"43",X"4D",X"50",X"09",X"49",X"20",X"2F",X"39",X"30",
X"48",X"0D",X"09",X"42",X"43",X"53",X"09",X"52",X"20",X"3A",X"4D",X"53",X"54",X"31",X"30",X"32",
X"0D",X"09",X"4C",X"44",X"41",X"09",X"49",X"20",X"2F",X"30",X"0D",X"4D",X"53",X"54",X"31",X"30",
X"32",X"09",X"52",X"54",X"53",X"0D",X"3B",X"0D",X"4D",X"53",X"31",X"30",X"58",X"09",X"54",X"58");
begin
process(clk)
begin
if rising_edge(clk) then
data <= rom_data(to_integer(unsigned(addr)));
end if;
end process;
end architecture;

View File

@@ -0,0 +1,150 @@
library ieee;
use ieee.std_logic_1164.all,ieee.numeric_std.all;
entity b1 is
port (
clk : in std_logic;
addr : in std_logic_vector(10 downto 0);
data : out std_logic_vector(7 downto 0)
);
end entity;
architecture prom of b1 is
type rom is array(0 to 2047) of std_logic_vector(7 downto 0);
signal rom_data: rom := (
X"20",X"A1",X"6F",X"20",X"B8",X"7B",X"2C",X"0F",X"0C",X"30",X"49",X"A9",X"01",X"8D",X"00",X"0C",
X"8D",X"01",X"0C",X"20",X"A2",X"79",X"20",X"F8",X"7C",X"90",X"25",X"A0",X"01",X"20",X"75",X"77",
X"F0",X"1E",X"A5",X"B5",X"30",X"04",X"C6",X"B5",X"D0",X"E1",X"A0",X"01",X"B9",X"0D",X"0C",X"10",
X"0F",X"B9",X"05",X"0C",X"10",X"0A",X"88",X"10",X"F3",X"A0",X"00",X"2C",X"07",X"0C",X"30",X"07",
X"98",X"29",X"01",X"A8",X"A9",X"01",X"2C",X"A9",X"00",X"99",X"08",X"0C",X"20",X"A1",X"7E",X"20",
X"82",X"70",X"F0",X"AC",X"20",X"96",X"6F",X"20",X"B2",X"6F",X"20",X"26",X"70",X"20",X"85",X"70",
X"2C",X"0F",X"0C",X"10",X"F5",X"60",X"20",X"96",X"6F",X"20",X"00",X"68",X"20",X"B2",X"6F",X"E6",
X"C7",X"A5",X"CA",X"85",X"A4",X"58",X"A5",X"CB",X"F0",X"08",X"20",X"45",X"6C",X"20",X"13",X"6E",
X"F0",X"09",X"20",X"45",X"6C",X"20",X"64",X"6E",X"20",X"23",X"6F",X"20",X"27",X"71",X"20",X"54",
X"73",X"20",X"C9",X"6F",X"20",X"78",X"6C",X"A5",X"B8",X"D0",X"06",X"20",X"2A",X"71",X"A2",X"01",
X"2C",X"A2",X"00",X"8E",X"0A",X"0C",X"A2",X"01",X"8E",X"0F",X"0C",X"A2",X"FF",X"86",X"5E",X"A5",
X"8B",X"C5",X"2C",X"F0",X"FA",X"85",X"2C",X"C6",X"59",X"C6",X"5A",X"A2",X"00",X"A5",X"59",X"D0",
X"03",X"8E",X"0D",X"0C",X"A5",X"5A",X"D0",X"03",X"8E",X"0C",X"0C",X"A5",X"5C",X"F0",X"0F",X"C6",
X"5C",X"A5",X"5C",X"A2",X"01",X"29",X"08",X"D0",X"02",X"A2",X"00",X"8E",X"09",X"0C",X"A9",X"00",
X"85",X"14",X"A2",X"0A",X"B5",X"3C",X"F0",X"37",X"E6",X"14",X"20",X"C4",X"73",X"B5",X"47",X"86",
X"24",X"10",X"70",X"29",X"7F",X"D0",X"36",X"8A",X"0A",X"AA",X"A0",X"00",X"20",X"57",X"74",X"9D",
X"60",X"02",X"20",X"55",X"74",X"9D",X"60",X"02",X"A0",X"20",X"20",X"56",X"74",X"9D",X"60",X"02",
X"20",X"55",X"74",X"9D",X"60",X"02",X"A9",X"14",X"20",X"16",X"74",X"A6",X"24",X"F6",X"47",X"CA",
X"CA",X"10",X"C1",X"4C",X"FC",X"6A",X"A9",X"18",X"AC",X"A9",X"1C",X"D0",X"EB",X"C9",X"09",X"F0",
X"F5",X"C9",X"12",X"F0",X"F4",X"C9",X"1B",X"D0",X"E4",X"8A",X"0A",X"AA",X"A0",X"00",X"BD",X"60",
X"02",X"91",X"28",X"E8",X"C8",X"BD",X"60",X"02",X"91",X"28",X"A0",X"20",X"E8",X"BD",X"60",X"02",
X"91",X"28",X"E8",X"C8",X"BD",X"60",X"02",X"91",X"28",X"A6",X"24",X"A0",X"00",X"94",X"3C",X"94",
X"47",X"F0",X"BC",X"D0",X"5E",X"38",X"B5",X"3B",X"E9",X"21",X"B0",X"02",X"D6",X"3C",X"95",X"3B",
X"20",X"C6",X"73",X"20",X"64",X"74",X"A0",X"03",X"20",X"2C",X"74",X"9D",X"00",X"02",X"E8",X"88",
X"10",X"F6",X"20",X"6E",X"74",X"C6",X"23",X"D0",X"ED",X"38",X"A5",X"28",X"E9",X"5F",X"B0",X"02",
X"C6",X"29",X"85",X"28",X"A9",X"18",X"4C",X"18",X"69",X"A2",X"20",X"2C",X"A2",X"30",X"A0",X"04",
X"84",X"23",X"A0",X"03",X"8A",X"91",X"28",X"AA",X"E8",X"88",X"10",X"F8",X"20",X"6E",X"74",X"C6",
X"23",X"D0",X"EF",X"4C",X"1B",X"69",X"A0",X"00",X"20",X"FE",X"6C",X"A0",X"20",X"20",X"FE",X"6C",
X"4C",X"59",X"69",X"C9",X"09",X"F0",X"D2",X"C9",X"12",X"F0",X"D1",X"C9",X"1B",X"F0",X"CA",X"C9",
X"24",X"F0",X"07",X"C9",X"60",X"F0",X"DF",X"4C",X"1D",X"69",X"20",X"64",X"74",X"A0",X"03",X"BD",
X"00",X"02",X"91",X"28",X"E8",X"88",X"10",X"F7",X"20",X"6E",X"74",X"C6",X"23",X"D0",X"EE",X"A6",
X"24",X"B5",X"48",X"10",X"0E",X"29",X"40",X"F0",X"07",X"A9",X"EC",X"85",X"2E",X"20",X"05",X"74",
X"4C",X"5B",X"69",X"18",X"B5",X"3B",X"69",X"21",X"90",X"02",X"F6",X"3C",X"95",X"3B",X"20",X"C6",
X"73",X"B5",X"48",X"AA",X"24",X"B5",X"10",X"03",X"09",X"70",X"2C",X"09",X"60",X"A0",X"00",X"91",
X"28",X"A0",X"20",X"18",X"69",X"01",X"91",X"28",X"E0",X"0A",X"D0",X"09",X"A9",X"80",X"20",X"34",
X"76",X"A9",X"80",X"D0",X"03",X"BD",X"25",X"6C",X"20",X"34",X"76",X"C6",X"A5",X"E6",X"A7",X"20",
X"76",X"6D",X"86",X"8E",X"4C",X"1B",X"69",X"20",X"0D",X"6D",X"A9",X"00",X"8D",X"0F",X"0C",X"A5",
X"B8",X"D0",X"0E",X"A0",X"D9",X"A2",X"61",X"20",X"9A",X"73",X"A0",X"E0",X"A2",X"61",X"20",X"9A",
X"73",X"20",X"94",X"70",X"A5",X"B8",X"F0",X"76",X"24",X"13",X"70",X"21",X"C6",X"A4",X"F0",X"1D",
X"A5",X"A7",X"85",X"A6",X"C9",X"14",X"90",X"07",X"20",X"22",X"71",X"A9",X"00",X"85",X"90",X"A9",
X"00",X"85",X"A5",X"A5",X"B4",X"F0",X"5F",X"20",X"57",X"6C",X"4C",X"A1",X"68",X"24",X"B5",X"10",
X"14",X"A0",X"69",X"A2",X"61",X"20",X"9A",X"73",X"A0",X"E7",X"A2",X"61",X"20",X"9A",X"73",X"A0",
X"EE",X"A2",X"61",X"D0",X"1D",X"A0",X"4A",X"A2",X"61",X"20",X"9A",X"73",X"A4",X"B5",X"F0",X"07",
X"A0",X"3C",X"A2",X"61",X"20",X"9A",X"73",X"A0",X"D9",X"A2",X"61",X"20",X"9A",X"73",X"A0",X"E0",
X"A2",X"61",X"20",X"9A",X"73",X"A9",X"80",X"A4",X"B5",X"F0",X"01",X"4A",X"05",X"B4",X"C9",X"C0",
X"D0",X"12",X"A5",X"B5",X"D0",X"05",X"20",X"C9",X"6F",X"30",X"03",X"20",X"CC",X"6F",X"20",X"9A",
X"70",X"4C",X"6C",X"68",X"85",X"B4",X"A2",X"00",X"A5",X"B5",X"D0",X"08",X"A2",X"7F",X"24",X"CD",
X"10",X"02",X"A2",X"FF",X"86",X"B5",X"20",X"6E",X"6C",X"4C",X"A1",X"68",X"A5",X"53",X"05",X"54",
X"F0",X"56",X"F8",X"18",X"A2",X"FD",X"B5",X"56",X"75",X"A3",X"95",X"A3",X"E8",X"D0",X"F7",X"D8",
X"A9",X"00",X"85",X"53",X"85",X"54",X"A5",X"9F",X"30",X"09",X"A5",X"A1",X"C5",X"CC",X"90",X"03",
X"20",X"94",X"6D",X"A2",X"03",X"CA",X"30",X"1B",X"B5",X"A0",X"D5",X"C3",X"90",X"15",X"F0",X"F5",
X"B5",X"A0",X"95",X"C3",X"CA",X"10",X"F9",X"24",X"B5",X"10",X"05",X"20",X"FA",X"71",X"D0",X"03",
X"20",X"E2",X"71",X"A2",X"02",X"A5",X"B5",X"F0",X"07",X"10",X"0A",X"20",X"EC",X"71",X"D0",X"08",
X"20",X"DC",X"71",X"D0",X"03",X"20",X"D4",X"71",X"A5",X"14",X"D0",X"22",X"A5",X"13",X"F0",X"03",
X"4C",X"47",X"6A",X"A5",X"A7",X"C9",X"14",X"90",X"15",X"20",X"0D",X"6D",X"A9",X"00",X"8D",X"0F",
X"0C",X"20",X"22",X"71",X"A9",X"00",X"85",X"90",X"20",X"57",X"6C",X"4C",X"A1",X"68",X"A5",X"8D",
X"C9",X"3C",X"90",X"0E",X"A9",X"00",X"85",X"8D",X"E6",X"8E",X"E6",X"8F",X"E6",X"91",X"D0",X"02",
X"E6",X"92",X"A5",X"92",X"D0",X"17",X"A0",X"01",X"A5",X"91",X"C9",X"14",X"F0",X"0A",X"C9",X"28",
X"F0",X"05",X"C9",X"3C",X"D0",X"07",X"C8",X"C8",X"84",X"26",X"20",X"53",X"71",X"A5",X"A6",X"C9",
X"14",X"B0",X"0E",X"A5",X"A5",X"C5",X"99",X"B0",X"08",X"A5",X"8E",X"C5",X"9A",X"90",X"02",X"66",
X"57",X"A5",X"13",X"D0",X"42",X"A0",X"04",X"A5",X"8B",X"29",X"20",X"F0",X"02",X"A0",X"00",X"84",
X"2E",X"20",X"05",X"74",X"2C",X"0F",X"0C",X"30",X"03",X"4C",X"43",X"7D",X"A5",X"B8",X"F0",X"2B",
X"A5",X"8B",X"29",X"10",X"F0",X"18",X"A5",X"B5",X"D0",X"06",X"A0",X"91",X"A2",X"60",X"D0",X"11",
X"30",X"06",X"A0",X"97",X"A2",X"60",X"D0",X"09",X"A0",X"9D",X"A2",X"60",X"D0",X"03",X"20",X"2E",
X"6C",X"20",X"9A",X"73",X"4C",X"AF",X"68",X"A5",X"B8",X"D0",X"F3",X"A0",X"D9",X"A2",X"61",X"20",
X"9A",X"73",X"A0",X"E0",X"A2",X"61",X"20",X"9A",X"73",X"A5",X"C0",X"F0",X"E1",X"A9",X"00",X"8D",
X"0F",X"0C",X"4C",X"6C",X"68",X"03",X"00",X"06",X"00",X"15",X"00",X"30",X"00",X"80",X"A5",X"B5",
X"D0",X"06",X"A0",X"A3",X"A2",X"60",X"D0",X"0C",X"30",X"06",X"A0",X"A9",X"A2",X"60",X"D0",X"04",
X"A0",X"AF",X"A2",X"60",X"60",X"20",X"06",X"70",X"20",X"EC",X"6D",X"4C",X"96",X"71",X"20",X"06",
X"70",X"20",X"FF",X"6D",X"4C",X"B6",X"71",X"20",X"9A",X"70",X"A5",X"B5",X"F0",X"08",X"20",X"CC",
X"6F",X"20",X"94",X"72",X"F0",X"62",X"20",X"C9",X"6F",X"20",X"8E",X"72",X"F0",X"0D",X"20",X"9A",
X"70",X"A5",X"B5",X"D0",X"4D",X"20",X"94",X"72",X"20",X"CC",X"6F",X"20",X"B5",X"6F",X"A5",X"B5",
X"D0",X"06",X"20",X"DC",X"6F",X"4C",X"8B",X"6C",X"20",X"DF",X"6F",X"A5",X"B8",X"F0",X"0D",X"20",
X"45",X"6C",X"20",X"8B",X"6E",X"24",X"90",X"30",X"0A",X"20",X"85",X"6E",X"20",X"0E",X"73",X"A9",
X"80",X"85",X"90",X"20",X"97",X"70",X"20",X"45",X"6C",X"20",X"EA",X"70",X"20",X"B1",X"6D",X"20",
X"49",X"6D",X"20",X"E8",X"6E",X"20",X"E9",X"6F",X"A5",X"B5",X"D0",X"03",X"4C",X"B8",X"72",X"4C",
X"BE",X"72",X"20",X"C9",X"6F",X"20",X"8E",X"72",X"24",X"B5",X"10",X"AF",X"20",X"B5",X"6F",X"20",
X"DF",X"6F",X"20",X"4E",X"6C",X"20",X"C3",X"6E",X"24",X"90",X"30",X"0A",X"20",X"A4",X"6E",X"20",
X"58",X"73",X"A9",X"80",X"85",X"90",X"20",X"97",X"70",X"20",X"4E",X"6C",X"20",X"EA",X"70",X"20",
X"A2",X"6D",X"20",X"40",X"6D",X"20",X"E3",X"6E",X"20",X"EF",X"6F",X"4C",X"BE",X"72",X"B1",X"28",
X"C9",X"11",X"90",X"04",X"C9",X"60",X"90",X"04",X"A9",X"00",X"91",X"28",X"60",X"A9",X"06",X"85",
X"8A",X"24",X"13",X"70",X"07",X"A9",X"00",X"85",X"2E",X"20",X"05",X"74",X"20",X"2E",X"6C",X"20",
X"9A",X"73",X"A5",X"8A",X"D0",X"FC",X"60",X"A2",X"09",X"A0",X"9E",X"86",X"29",X"84",X"28",X"A5",
X"A7",X"60",X"A2",X"0B",X"A0",X"80",X"86",X"29",X"84",X"28",X"A9",X"14",X"38",X"E5",X"A7",X"60",
X"20",X"32",X"6D",X"A2",X"FE",X"A0",X"FF",X"D0",X"07",X"20",X"27",X"6D",X"A2",X"CF",X"A0",X"CE",
X"85",X"26",X"84",X"24",X"86",X"25",X"A2",X"0A",X"A0",X"00",X"C6",X"26",X"30",X"03",X"A5",X"25",
X"2C",X"A5",X"24",X"91",X"28",X"C8",X"C0",X"02",X"90",X"F0",X"20",X"7A",X"74",X"CA",X"D0",X"E8",
X"60",X"20",X"32",X"6D",X"10",X"0A",X"24",X"B5",X"30",X"F7",X"20",X"27",X"6D",X"38",X"E9",X"01",
X"4A",X"A0",X"00",X"90",X"01",X"C8",X"AA",X"F0",X"06",X"20",X"7A",X"74",X"CA",X"D0",X"FA",X"A9",
X"CF",X"91",X"28",X"60",X"A9",X"80",X"85",X"9F",X"A9",X"49",X"85",X"5C",X"E6",X"A4",X"24",X"B5",
X"10",X"0F",X"A9",X"86",X"38",X"E5",X"A4",X"85",X"23",X"A0",X"60",X"A2",X"09",X"A9",X"48",X"D0",
X"0B",X"A6",X"A4",X"CA",X"86",X"23",X"A0",X"7E",X"A2",X"0B",X"A9",X"4C",X"84",X"28",X"86",X"29",
X"A2",X"05",X"86",X"24",X"85",X"25",X"A6",X"23",X"CA",X"30",X"10",X"A5",X"25",X"20",X"16",X"74",
X"20",X"7A",X"74",X"20",X"7A",X"74",X"C6",X"24",X"D0",X"EE",X"60",X"A9",X"00",X"A8",X"91",X"28",
X"C8",X"91",X"28",X"A0",X"20",X"91",X"28",X"C8",X"91",X"28",X"D0",X"E4",X"A2",X"60",X"A0",X"B5",
X"20",X"9A",X"73",X"A5",X"C9",X"D0",X"01",X"60",X"A2",X"60",X"A0",X"97",X"4C",X"9A",X"73",X"A2",
X"60",X"A0",X"CE",X"D0",X"F7",X"80",X"61",X"8A",X"61",X"A0",X"61",X"B1",X"61",X"B6",X"61",X"CA",
X"61",X"CF",X"61",X"A5",X"C0",X"D0",X"E0",X"A2",X"0C",X"86",X"5D",X"BC",X"05",X"6E",X"BD",X"06",
X"6E",X"AA",X"20",X"9A",X"73",X"A6",X"5D",X"CA",X"CA",X"10",X"EE",X"20",X"03",X"6F",X"A0",X"00",
X"84",X"2F",X"B9",X"25",X"6C",X"85",X"AB",X"A0",X"B5",X"A9",X"09",X"A2",X"0B",X"20",X"14",X"6F",
X"A9",X"A0",X"8D",X"95",X"09",X"20",X"94",X"70",X"8D",X"D5",X"09",X"8D",X"B5",X"09",X"8D",X"95",
X"09",X"20",X"A3",X"70",X"A4",X"2F",X"C8",X"C8",X"C0",X"0A",X"D0",X"D4",X"A9",X"AA",X"8D",X"B5",
X"09",X"A9",X"00",X"60",X"A2",X"60",X"A0",X"FC",X"20",X"9A",X"73",X"A6",X"CC",X"30",X"10",X"A2",
X"61",X"A0",X"10",X"20",X"9A",X"73",X"A0",X"72",X"A9",X"09",X"A2",X"2C",X"20",X"14",X"6F",X"A0",
X"2B",X"A2",X"61",X"D0",X"1C",X"A0",X"42",X"A2",X"61",X"D0",X"1D",X"A2",X"61",X"A0",X"4A",X"20",
X"9A",X"73",X"A5",X"B5",X"F0",X"07",X"A2",X"61",X"A0",X"3C",X"20",X"9A",X"73",X"A2",X"61",X"A0",
X"57",X"4C",X"9A",X"73",X"A2",X"61",X"A0",X"61",X"20",X"D0",X"6E",X"A5",X"B5",X"30",X"06",X"A0",
X"8E",X"A9",X"09",X"D0",X"5F",X"A0",X"51",X"A9",X"0A",X"84",X"2A",X"85",X"2B",X"A9",X"20",X"A0",
X"00",X"F0",X"59",X"A2",X"61",X"A0",X"69",X"20",X"9A",X"73",X"A0",X"76",X"A2",X"61",X"D0",X"D1",
X"20",X"9A",X"73",X"A5",X"B8",X"D0",X"03",X"A6",X"E3",X"2C",X"A6",X"A3",X"86",X"AA",X"A2",X"0A",
X"4C",X"A4",X"7B",X"20",X"E8",X"73",X"D0",X"03",X"20",X"D5",X"73",X"20",X"D3",X"6E",X"A5",X"B5",
X"10",X"06",X"A0",X"00",X"A9",X"0A",X"D0",X"C1",X"A0",X"DF",X"D0",X"B5",X"A2",X"60",X"A0",X"E7",
X"4C",X"9A",X"73",X"A5",X"CB",X"F0",X"F5",X"A2",X"60",X"A0",X"F3",X"20",X"9A",X"73",X"A2",X"20",
X"A0",X"7F",X"A9",X"0A",X"84",X"2A",X"85",X"2B",X"A9",X"E0",X"A0",X"20",X"85",X"25",X"A9",X"00",
X"4C",X"16",X"72",X"20",X"03",X"6F",X"A9",X"FF",X"85",X"B8",X"A5",X"CB",X"D0",X"0D",X"20",X"73",
X"77",X"D0",X"08",X"A2",X"03",X"20",X"A4",X"7B",X"20",X"E8",X"6E",X"A5",X"27",X"49",X"01",X"85",
X"27",X"A6",X"C0",X"E0",X"01",X"F0",X"03",X"8D",X"01",X"0C",X"8D",X"00",X"0C",X"A0",X"10",X"20",
X"B4",X"70",X"A6",X"C0",X"0E",X"0D",X"0C",X"6A",X"0E",X"0E",X"0C",X"6A",X"85",X"5F",X"24",X"5F",
X"50",X"0A",X"10",X"05",X"88",X"D0",X"E8",X"F0",X"BA",X"E0",X"02",X"AD",X"E0",X"01",X"A5",X"CB",
X"F0",X"02",X"90",X"F0",X"A0",X"00",X"70",X"02",X"A0",X"40",X"84",X"B4",X"84",X"C9",X"A5",X"CB",
X"F0",X"08",X"50",X"03",X"20",X"AE",X"7B",X"20",X"AE",X"7B",X"A2",X"FF",X"86",X"B8",X"E8",X"8E",
X"01",X"0C",X"8E",X"00",X"0C",X"60",X"A2",X"18",X"A9",X"00",X"9D",X"00",X"0C",X"CA",X"10",X"FA",
X"60",X"A2",X"F0",X"A9",X"00",X"CA",X"95",X"10",X"8D",X"18",X"0C",X"D0",X"F8",X"F0",X"12",X"A2",
X"00",X"2C",X"A2",X"C0",X"2C",X"A2",X"9F",X"A9",X"00",X"CA",X"95",X"00",X"8D",X"18",X"0C",X"D0",
X"F8",X"8E",X"09",X"0C",X"E8",X"8E",X"0A",X"0C",X"60",X"A9",X"87",X"2C",X"A9",X"9F",X"85",X"23",
X"A2",X"00",X"A9",X"90",X"A4",X"B8",X"F0",X"2D",X"A0",X"17",X"D0",X"1B",X"A9",X"D0",X"2C",X"A9",
X"E8",X"A2",X"00",X"A0",X"47",X"84",X"23",X"D0",X"EB",X"A2",X"66",X"A9",X"23",X"D0",X"04",X"A2",
X"66",X"A9",X"32",X"A0",X"0E",X"84",X"23",X"86",X"1F",X"85",X"1E",X"A6",X"23",X"B1",X"1E",X"95");
begin
process(clk)
begin
if rising_edge(clk) then
data <= rom_data(to_integer(unsigned(addr)));
end if;
end process;
end architecture;

View File

@@ -0,0 +1,150 @@
library ieee;
use ieee.std_logic_1164.all,ieee.numeric_std.all;
entity c1 is
port (
clk : in std_logic;
addr : in std_logic_vector(10 downto 0);
data : out std_logic_vector(7 downto 0)
);
end entity;
architecture prom of c1 is
type rom is array(0 to 2047) of std_logic_vector(7 downto 0);
signal rom_data: rom := (
X"60",X"CA",X"88",X"10",X"F8",X"60",X"A9",X"00",X"A2",X"0F",X"95",X"00",X"CA",X"10",X"FB",X"A9",
X"00",X"A0",X"0B",X"84",X"1F",X"A0",X"00",X"84",X"1E",X"A2",X"04",X"88",X"91",X"1E",X"D0",X"FB",
X"C6",X"1F",X"CA",X"D0",X"F6",X"60",X"A0",X"40",X"A2",X"08",X"84",X"28",X"86",X"29",X"A0",X"FF",
X"C8",X"A5",X"28",X"29",X"20",X"F0",X"03",X"A9",X"EA",X"2C",X"A9",X"DA",X"18",X"20",X"24",X"74",
X"C0",X"1F",X"90",X"EC",X"20",X"6E",X"74",X"A5",X"29",X"C9",X"0B",X"D0",X"E1",X"A5",X"28",X"C9",
X"C0",X"90",X"DB",X"60",X"20",X"5E",X"70",X"24",X"B5",X"10",X"02",X"49",X"FF",X"60",X"A9",X"02",
X"25",X"60",X"18",X"F0",X"01",X"38",X"A9",X"01",X"25",X"61",X"69",X"00",X"4A",X"66",X"61",X"66",
X"60",X"A9",X"4A",X"25",X"60",X"D0",X"06",X"A9",X"43",X"65",X"61",X"85",X"61",X"A5",X"60",X"85",
X"C2",X"60",X"A9",X"03",X"2C",X"A9",X"C0",X"85",X"1F",X"20",X"96",X"74",X"8D",X"18",X"0C",X"A5",
X"1F",X"D0",X"F6",X"60",X"A2",X"04",X"2C",X"A2",X"06",X"2C",X"A2",X"0D",X"20",X"A3",X"70",X"CA",
X"D0",X"FA",X"60",X"A9",X"01",X"8D",X"0A",X"0C",X"A9",X"00",X"8D",X"09",X"0C",X"8D",X"0C",X"0C",
X"8D",X"0D",X"0C",X"2C",X"A9",X"50",X"38",X"48",X"E9",X"01",X"D0",X"FC",X"68",X"E9",X"01",X"8D",
X"18",X"0C",X"08",X"48",X"AD",X"0F",X"0C",X"30",X"03",X"4C",X"43",X"7D",X"A5",X"B8",X"30",X"07",
X"A5",X"C0",X"F0",X"03",X"4C",X"1D",X"6C",X"68",X"28",X"D0",X"DC",X"60",X"A9",X"10",X"84",X"1E",
X"86",X"1F",X"A0",X"1B",X"91",X"1E",X"88",X"10",X"FB",X"60",X"A2",X"08",X"A0",X"42",X"20",X"DC",
X"70",X"A2",X"0B",X"A0",X"A2",X"20",X"DE",X"70",X"A0",X"82",X"20",X"FF",X"70",X"A0",X"9D",X"48",
X"84",X"1E",X"A0",X"0B",X"84",X"1F",X"A0",X"00",X"A2",X"1B",X"68",X"91",X"1E",X"48",X"20",X"AE",
X"74",X"CA",X"D0",X"F6",X"68",X"60",X"A5",X"A3",X"24",X"CE",X"30",X"05",X"F8",X"18",X"69",X"03",
X"D8",X"60",X"A2",X"03",X"20",X"A4",X"7B",X"20",X"B5",X"6F",X"85",X"26",X"20",X"16",X"71",X"C9",
X"0A",X"90",X"02",X"A9",X"09",X"0A",X"0A",X"0A",X"A8",X"A2",X"05",X"B9",X"CF",X"64",X"24",X"CF",
X"30",X"03",X"B9",X"1F",X"65",X"95",X"93",X"C8",X"CA",X"10",X"F0",X"A9",X"00",X"85",X"A5",X"85",
X"A6",X"85",X"A7",X"A5",X"93",X"20",X"90",X"71",X"BD",X"6F",X"65",X"85",X"99",X"A5",X"94",X"20",
X"90",X"71",X"BD",X"7F",X"65",X"85",X"9A",X"A5",X"96",X"20",X"90",X"71",X"BD",X"9F",X"65",X"85",
X"9C",X"A5",X"97",X"20",X"90",X"71",X"BD",X"AF",X"65",X"85",X"9D",X"A5",X"98",X"20",X"90",X"71",
X"BD",X"BF",X"65",X"85",X"9E",X"A5",X"95",X"20",X"90",X"71",X"BD",X"8F",X"65",X"85",X"9B",X"60",
X"0A",X"0A",X"65",X"26",X"AA",X"60",X"A9",X"A0",X"8D",X"A1",X"09",X"8D",X"C1",X"09",X"8D",X"E1",
X"0A",X"8D",X"01",X"0B",X"A4",X"C9",X"D0",X"09",X"8D",X"81",X"08",X"8D",X"A1",X"08",X"20",X"D2",
X"71",X"20",X"DA",X"71",X"30",X"2C",X"A9",X"D0",X"8D",X"3E",X"0A",X"8D",X"5E",X"0A",X"8D",X"FE",
X"08",X"8D",X"1E",X"09",X"8D",X"5E",X"0B",X"8D",X"7E",X"0B",X"20",X"EA",X"71",X"20",X"F2",X"71",
X"30",X"28",X"A2",X"5A",X"A9",X"A1",X"A0",X"08",X"D0",X"30",X"A2",X"42",X"A9",X"01",X"A0",X"0B",
X"D0",X"28",X"A2",X"25",X"A9",X"C1",X"A0",X"09",X"D0",X"20",X"A2",X"5A",X"A9",X"BE",X"A0",X"0A",
X"D0",X"0E",X"A2",X"42",X"A9",X"5E",X"A0",X"08",X"D0",X"06",X"A2",X"25",X"A9",X"9E",X"A0",X"09",
X"84",X"2B",X"A0",X"20",X"84",X"25",X"A0",X"00",X"F0",X"08",X"84",X"2B",X"A0",X"E0",X"84",X"25",
X"A0",X"A0",X"85",X"2A",X"A9",X"02",X"85",X"2D",X"A9",X"00",X"85",X"26",X"B5",X"A0",X"48",X"4A",
X"4A",X"4A",X"4A",X"20",X"38",X"72",X"A5",X"2D",X"D0",X"02",X"C6",X"26",X"68",X"29",X"0F",X"20",
X"38",X"72",X"CA",X"C6",X"2D",X"10",X"E5",X"60",X"F0",X"02",X"C6",X"26",X"24",X"B5",X"10",X"03",
X"09",X"D0",X"2C",X"09",X"A0",X"24",X"26",X"30",X"02",X"A9",X"00",X"91",X"2A",X"98",X"18",X"65",
X"25",X"A8",X"60",X"A5",X"1E",X"95",X"6D",X"A5",X"1F",X"95",X"6E",X"A5",X"1D",X"95",X"6C",X"60",
X"86",X"1F",X"84",X"1E",X"85",X"1D",X"A5",X"1D",X"0A",X"0A",X"65",X"18",X"A0",X"00",X"91",X"1E",
X"69",X"01",X"C8",X"91",X"1E",X"69",X"01",X"A0",X"20",X"91",X"1E",X"C8",X"69",X"01",X"91",X"1E",
X"60",X"84",X"21",X"86",X"22",X"A0",X"82",X"A2",X"0B",X"84",X"1E",X"86",X"1F",X"60",X"A0",X"80",
X"A2",X"02",X"D0",X"04",X"A0",X"40",X"A2",X"05",X"20",X"81",X"72",X"A0",X"1A",X"84",X"24",X"A4",
X"24",X"B1",X"1E",X"C9",X"11",X"90",X"02",X"A9",X"00",X"A0",X"00",X"20",X"8D",X"74",X"C6",X"24",
X"D0",X"ED",X"20",X"DE",X"72",X"D0",X"E4",X"60",X"A0",X"80",X"A2",X"02",X"D0",X"04",X"A0",X"40",
X"A2",X"05",X"20",X"81",X"72",X"A0",X"1A",X"84",X"24",X"A0",X"00",X"B1",X"21",X"A4",X"24",X"91",
X"1E",X"20",X"8F",X"74",X"C6",X"24",X"D0",X"F1",X"20",X"DE",X"72",X"D0",X"E8",X"60",X"20",X"AE",
X"74",X"C9",X"42",X"D0",X"04",X"A5",X"1F",X"C9",X"08",X"60",X"A5",X"C7",X"4C",X"FB",X"72",X"A5",
X"B8",X"F0",X"F7",X"A6",X"A3",X"E0",X"09",X"90",X"06",X"A5",X"C2",X"29",X"07",X"10",X"0A",X"BD",
X"F5",X"61",X"24",X"CF",X"30",X"03",X"BD",X"FE",X"61",X"0A",X"AA",X"60",X"C6",X"BA",X"20",X"EF",
X"72",X"BD",X"07",X"62",X"A8",X"BD",X"08",X"62",X"85",X"1F",X"84",X"1E",X"A0",X"80",X"A2",X"02",
X"A5",X"B5",X"D0",X"04",X"A5",X"BA",X"F0",X"04",X"A0",X"40",X"A2",X"05",X"84",X"21",X"86",X"22",
X"A0",X"00",X"A2",X"55",X"86",X"23",X"A2",X"08",X"B1",X"1E",X"85",X"24",X"06",X"24",X"A9",X"00",
X"90",X"02",X"A9",X"01",X"20",X"8D",X"74",X"CA",X"D0",X"F2",X"20",X"86",X"74",X"C6",X"23",X"D0",
X"E5",X"86",X"BA",X"60",X"24",X"CD",X"10",X"B4",X"20",X"EF",X"72",X"BD",X"17",X"62",X"A8",X"BD",
X"18",X"62",X"84",X"1E",X"85",X"1F",X"A0",X"40",X"A2",X"05",X"84",X"21",X"86",X"22",X"A0",X"00",
X"A2",X"55",X"86",X"23",X"A2",X"04",X"B1",X"1E",X"4A",X"4A",X"4A",X"4A",X"10",X"04",X"A2",X"08",
X"B1",X"1E",X"85",X"24",X"46",X"24",X"A9",X"00",X"90",X"02",X"A9",X"01",X"20",X"8D",X"74",X"CA",
X"D0",X"F2",X"20",X"96",X"74",X"C6",X"23",X"D0",X"E5",X"60",X"86",X"2B",X"84",X"2A",X"A0",X"00",
X"B1",X"2A",X"85",X"28",X"E6",X"2A",X"D0",X"02",X"E6",X"2B",X"B1",X"2A",X"85",X"29",X"E6",X"2A",
X"D0",X"02",X"E6",X"2B",X"B1",X"2A",X"A8",X"A2",X"00",X"B1",X"2A",X"81",X"28",X"20",X"7A",X"74",
X"88",X"D0",X"F6",X"60",X"B5",X"3B",X"85",X"28",X"B5",X"3C",X"85",X"29",X"60",X"A2",X"00",X"A9",
X"80",X"A0",X"0C",X"D0",X"26",X"A2",X"8A",X"8E",X"5E",X"0A",X"E8",X"8E",X"5F",X"0A",X"A0",X"1E",
X"84",X"28",X"A0",X"0A",X"A9",X"80",X"D0",X"11",X"A2",X"9A",X"8E",X"A0",X"09",X"E8",X"8E",X"A1",
X"09",X"A0",X"C0",X"84",X"28",X"A0",X"09",X"A9",X"90",X"A2",X"0C",X"86",X"2E",X"D0",X"12",X"A9",
X"90",X"A0",X"E3",X"D0",X"08",X"24",X"B5",X"30",X"F6",X"A9",X"80",X"A0",X"FB",X"84",X"28",X"A0",
X"09",X"84",X"29",X"18",X"65",X"2E",X"A0",X"00",X"18",X"91",X"28",X"C8",X"69",X"01",X"91",X"28",
X"A0",X"20",X"69",X"01",X"91",X"28",X"C8",X"69",X"01",X"91",X"28",X"60",X"A5",X"29",X"C9",X"0B",
X"D0",X"08",X"A5",X"28",X"C9",X"A2",X"90",X"0C",X"B0",X"18",X"C9",X"08",X"D0",X"06",X"A5",X"28",
X"C9",X"5E",X"90",X"0E",X"98",X"18",X"65",X"28",X"29",X"1F",X"C9",X"02",X"F0",X"04",X"C9",X"1D",
X"D0",X"05",X"A9",X"10",X"60",X"C8",X"E8",X"B1",X"28",X"C9",X"11",X"90",X"06",X"C9",X"90",X"B0",
X"02",X"A9",X"00",X"60",X"8A",X"0A",X"0A",X"0A",X"AA",X"A9",X"04",X"85",X"23",X"60",X"18",X"A5",
X"28",X"69",X"20",X"90",X"02",X"E6",X"29",X"85",X"28",X"60",X"38",X"A5",X"28",X"E9",X"20",X"B0",
X"02",X"C6",X"29",X"85",X"28",X"60",X"E6",X"1E",X"D0",X"02",X"E6",X"1F",X"60",X"91",X"21",X"E6",
X"21",X"D0",X"02",X"E6",X"22",X"60",X"38",X"A5",X"1E",X"E9",X"01",X"B0",X"02",X"C6",X"1F",X"85",
X"1E",X"60",X"18",X"A5",X"1E",X"69",X"20",X"90",X"02",X"E6",X"1F",X"85",X"1E",X"60",X"38",X"A5",
X"1E",X"E9",X"20",X"B0",X"02",X"C6",X"1F",X"85",X"1E",X"60",X"86",X"1F",X"84",X"1E",X"85",X"1D",
X"A8",X"F0",X"34",X"88",X"88",X"30",X"3A",X"F0",X"40",X"A0",X"00",X"20",X"96",X"74",X"B1",X"1E",
X"85",X"1B",X"A0",X"20",X"B1",X"1E",X"85",X"1C",X"05",X"1B",X"8A",X"A2",X"01",X"B4",X"1B",X"F0",
X"0C",X"C0",X"60",X"90",X"0D",X"C0",X"80",X"90",X"04",X"C0",X"A0",X"90",X"05",X"CA",X"10",X"ED",
X"18",X"60",X"38",X"AA",X"60",X"A0",X"00",X"20",X"AE",X"74",X"B1",X"1E",X"85",X"1B",X"C8",X"D0",
X"D3",X"A0",X"20",X"20",X"A2",X"74",X"4C",X"FA",X"74",X"20",X"86",X"74",X"A0",X"01",X"B1",X"1E",
X"85",X"1B",X"A0",X"21",X"D0",X"BE",X"A8",X"F0",X"0F",X"88",X"88",X"30",X"14",X"F0",X"1B",X"20",
X"C9",X"74",X"20",X"46",X"75",X"F0",X"F8",X"60",X"20",X"F5",X"74",X"20",X"46",X"75",X"F0",X"F8",
X"60",X"20",X"01",X"75",X"20",X"46",X"75",X"F0",X"F8",X"60",X"20",X"09",X"75",X"20",X"46",X"75",
X"F0",X"F8",X"60",X"A9",X"00",X"60",X"F0",X"FB",X"A2",X"01",X"B5",X"1B",X"C9",X"10",X"F0",X"13",
X"90",X"F1",X"29",X"F0",X"C9",X"90",X"F0",X"12",X"C9",X"80",X"F0",X"0E",X"C9",X"40",X"F0",X"0A",
X"CA",X"10",X"E7",X"A5",X"9D",X"C5",X"8F",X"A9",X"01",X"60",X"A5",X"60",X"C5",X"9C",X"A9",X"01",
X"60",X"A4",X"6D",X"84",X"1E",X"A4",X"6E",X"84",X"1F",X"A4",X"6C",X"84",X"1D",X"F0",X"0F",X"88",
X"88",X"30",X"14",X"F0",X"1B",X"20",X"C9",X"74",X"20",X"AC",X"75",X"F0",X"F8",X"60",X"20",X"F5",
X"74",X"20",X"AC",X"75",X"F0",X"F8",X"60",X"20",X"01",X"75",X"20",X"AC",X"75",X"F0",X"F8",X"60",
X"20",X"09",X"75",X"20",X"AC",X"75",X"F0",X"F8",X"60",X"A9",X"00",X"60",X"F0",X"FB",X"A2",X"01",
X"B5",X"1B",X"C9",X"10",X"F0",X"0B",X"90",X"F1",X"29",X"F0",X"C9",X"50",X"F0",X"04",X"CA",X"10",
X"EF",X"18",X"A9",X"01",X"60",X"B5",X"00",X"18",X"69",X"03",X"49",X"F8",X"29",X"F8",X"85",X"1E",
X"A9",X"02",X"06",X"1E",X"2A",X"06",X"1E",X"2A",X"95",X"31",X"B5",X"01",X"4A",X"4A",X"4A",X"18",
X"65",X"1E",X"95",X"30",X"60",X"B5",X"31",X"85",X"1E",X"B5",X"30",X"46",X"1E",X"6A",X"46",X"1E",
X"6A",X"29",X"F8",X"49",X"F8",X"38",X"E9",X"01",X"95",X"00",X"B5",X"30",X"0A",X"0A",X"0A",X"18",
X"69",X"06",X"95",X"01",X"60",X"B5",X"6C",X"49",X"01",X"C5",X"1D",X"18",X"08",X"A5",X"37",X"69",
X"0B",X"4A",X"4A",X"4A",X"29",X"06",X"49",X"06",X"28",X"D0",X"10",X"69",X"02",X"C9",X"08",X"D0",
X"0A",X"A4",X"A7",X"C0",X"06",X"F0",X"09",X"C0",X"0C",X"F0",X"05",X"A6",X"58",X"95",X"48",X"60",
X"A9",X"0A",X"D0",X"F7",X"A4",X"B8",X"F0",X"0D",X"F8",X"18",X"65",X"53",X"85",X"53",X"A5",X"54",
X"69",X"00",X"85",X"54",X"D8",X"60",X"D5",X"01",X"D0",X"0F",X"98",X"D5",X"00",X"D0",X"0A",X"A9",
X"00",X"95",X"31",X"95",X"01",X"95",X"00",X"85",X"19",X"60",X"A9",X"08",X"A8",X"D0",X"03",X"A9",
X"04",X"A8",X"85",X"19",X"84",X"1A",X"B5",X"36",X"C9",X"02",X"90",X"01",X"E8",X"29",X"01",X"F0",
X"08",X"B5",X"00",X"38",X"E5",X"1A",X"95",X"00",X"60",X"A5",X"19",X"18",X"75",X"00",X"95",X"00",
X"60",X"B5",X"30",X"85",X"1E",X"B5",X"31",X"85",X"1F",X"B5",X"36",X"85",X"1D",X"29",X"02",X"D0",
X"03",X"A0",X"01",X"2C",X"A0",X"20",X"B1",X"1E",X"84",X"1A",X"85",X"1C",X"A0",X"00",X"84",X"19",
X"B1",X"1E",X"85",X"1B",X"A8",X"25",X"1C",X"29",X"F0",X"AA",X"98",X"05",X"1C",X"60",X"38",X"60",
X"B5",X"1B",X"F0",X"FA",X"C9",X"10",X"B0",X"F7",X"A4",X"1D",X"F0",X"0F",X"88",X"88",X"30",X"08",
X"F0",X"03",X"A9",X"1A",X"2C",X"A9",X"11",X"2C",X"A9",X"08",X"2C",X"A9",X"FF",X"18",X"75",X"1B",
X"A8",X"B9",X"EF",X"65",X"BE",X"CB",X"65",X"D0",X"02",X"49",X"FF",X"18",X"60",X"A5",X"1D",X"29",
X"02",X"D0",X"03",X"A9",X"08",X"2C",X"A9",X"10",X"E0",X"00",X"F0",X"03",X"38",X"E9",X"04",X"A8",
X"8A",X"49",X"01",X"AA",X"B5",X"1B",X"85",X"20",X"88",X"B9",X"13",X"66",X"30",X"06",X"C5",X"20",
X"D0",X"F6",X"18",X"60",X"38",X"60",X"A5",X"1B",X"29",X"03",X"85",X"1B",X"A5",X"1C",X"29",X"03",
X"85",X"1C",X"A5",X"1D",X"A0",X"00",X"29",X"02",X"D0",X"0E",X"C4",X"1B",X"F0",X"06",X"A0",X"02",
X"C4",X"1B",X"D0",X"03",X"C8",X"C4",X"1C",X"60",X"C4",X"1B",X"F0",X"06",X"A0",X"01",X"C4",X"1B",
X"D0",X"F5",X"C8",X"C8",X"C4",X"1C",X"60",X"A4",X"1B",X"F0",X"12",X"88",X"88",X"30",X"05",X"F0",
X"09",X"20",X"AE",X"74",X"20",X"96",X"74",X"4C",X"4D",X"77",X"20",X"AE",X"74",X"A2",X"18",X"CA",
X"CA",X"CA",X"30",X"1A",X"B5",X"6E",X"F0",X"F7",X"C5",X"1F",X"D0",X"F3",X"B5",X"6D",X"C5",X"1E",
X"D0",X"ED",X"86",X"19",X"A2",X"0A",X"B5",X"3C",X"F0",X"04",X"CA",X"CA",X"10",X"F8",X"60",X"A5",
X"B8",X"F0",X"0E",X"A2",X"00",X"24",X"B5",X"10",X"02",X"A2",X"08",X"BD",X"04",X"0C",X"29",X"80",
X"60",X"20",X"71",X"75",X"90",X"09",X"20",X"5E",X"70",X"C9",X"D0",X"90",X"02",X"A9",X"00",X"60",
X"A4",X"1D",X"C0",X"01",X"D0",X"03",X"20",X"AE",X"74",X"C0",X"02",X"D0",X"03",X"20",X"96",X"74",
X"A5",X"1E",X"95",X"3B",X"A5",X"1F",X"95",X"3C",X"60",X"A5",X"B8",X"F0",X"07",X"A9",X"1F",X"85",
X"59",X"8D",X"0D",X"0C",X"60",X"20",X"06",X"77",X"F0",X"03",X"4C",X"41",X"78",X"20",X"37",X"77",
X"30",X"26",X"20",X"A0",X"77",X"86",X"58",X"A6",X"19",X"D0",X"0C",X"A9",X"80",X"A6",X"58",X"95",
X"48",X"05",X"13",X"85",X"13",X"D0",X"03",X"20",X"05",X"76",X"20",X"A9",X"77",X"A9",X"00",X"A6",
X"19",X"95",X"6E",X"10",X"7A",X"20",X"64",X"77",X"30",X"75",X"A9",X"C0",X"95",X"48",X"85",X"13",
X"20",X"A9",X"77",X"A5",X"6A",X"95",X"3B",X"A5",X"6B",X"95",X"3C",X"D0",X"62",X"A6",X"16",X"4C");
begin
process(clk)
begin
if rising_edge(clk) then
data <= rom_data(to_integer(unsigned(addr)));
end if;
end process;
end architecture;

View File

@@ -0,0 +1,150 @@
library ieee;
use ieee.std_logic_1164.all,ieee.numeric_std.all;
entity d1 is
port (
clk : in std_logic;
addr : in std_logic_vector(10 downto 0);
data : out std_logic_vector(7 downto 0)
);
end entity;
architecture prom of d1 is
type rom is array(0 to 2047) of std_logic_vector(7 downto 0);
signal rom_data: rom := (
X"5F",X"76",X"A6",X"16",X"20",X"C5",X"75",X"20",X"81",X"76",X"F0",X"35",X"29",X"F0",X"A4",X"16",
X"F0",X"0A",X"E0",X"40",X"D0",X"0E",X"C9",X"40",X"D0",X"0A",X"F0",X"99",X"E0",X"50",X"D0",X"04",
X"C9",X"50",X"F0",X"91",X"C9",X"A0",X"B0",X"08",X"E0",X"90",X"F0",X"B9",X"E0",X"80",X"F0",X"B5",
X"A2",X"01",X"B5",X"1B",X"F0",X"08",X"C9",X"10",X"90",X"2B",X"C9",X"40",X"90",X"21",X"CA",X"10",
X"F1",X"A9",X"FF",X"85",X"19",X"A6",X"16",X"B5",X"01",X"B4",X"00",X"A6",X"17",X"20",X"46",X"76",
X"A6",X"16",X"B5",X"01",X"B4",X"00",X"A6",X"18",X"20",X"46",X"76",X"A5",X"19",X"D0",X"9E",X"A6",
X"16",X"20",X"4F",X"76",X"60",X"A2",X"01",X"20",X"B0",X"76",X"B0",X"39",X"85",X"21",X"A2",X"00",
X"20",X"B0",X"76",X"B0",X"30",X"A8",X"10",X"1C",X"A5",X"21",X"10",X"18",X"A9",X"00",X"A8",X"91",
X"1E",X"98",X"A4",X"1A",X"91",X"1E",X"20",X"64",X"77",X"30",X"D4",X"20",X"90",X"77",X"A9",X"80",
X"95",X"47",X"D0",X"CB",X"98",X"10",X"02",X"49",X"FF",X"A0",X"00",X"91",X"1E",X"A5",X"21",X"10",
X"02",X"49",X"FF",X"10",X"DD",X"20",X"DD",X"76",X"B0",X"03",X"4C",X"41",X"78",X"86",X"21",X"20",
X"B0",X"76",X"10",X"02",X"A9",X"00",X"A6",X"21",X"B4",X"19",X"10",X"C8",X"B5",X"6C",X"85",X"1D",
X"85",X"20",X"B5",X"6D",X"85",X"1E",X"85",X"21",X"B4",X"6E",X"84",X"1F",X"84",X"22",X"60",X"A5",
X"22",X"C5",X"1C",X"F0",X"04",X"B0",X"17",X"90",X"12",X"A2",X"80",X"A5",X"1B",X"29",X"E0",X"85",
X"17",X"A5",X"21",X"29",X"E0",X"C5",X"17",X"F0",X"07",X"B0",X"03",X"A2",X"01",X"2C",X"A2",X"00",
X"86",X"17",X"A2",X"80",X"A5",X"1B",X"29",X"1F",X"85",X"18",X"A5",X"21",X"29",X"1F",X"C5",X"18",
X"F0",X"07",X"B0",X"03",X"A2",X"02",X"2C",X"A2",X"03",X"86",X"18",X"20",X"54",X"70",X"29",X"01",
X"AA",X"B5",X"17",X"30",X"09",X"C5",X"20",X"F0",X"1A",X"20",X"BE",X"74",X"90",X"28",X"8A",X"49",
X"01",X"AA",X"B5",X"17",X"30",X"0D",X"C5",X"20",X"F0",X"09",X"A6",X"22",X"A4",X"21",X"20",X"BA",
X"74",X"90",X"13",X"A5",X"20",X"A6",X"22",X"A4",X"21",X"20",X"BA",X"74",X"B0",X"11",X"A5",X"61",
X"C5",X"9E",X"B0",X"0B",X"90",X"46",X"20",X"5E",X"70",X"C5",X"9B",X"B0",X"E6",X"90",X"40",X"20",
X"54",X"70",X"08",X"A5",X"20",X"28",X"30",X"03",X"49",X"03",X"2C",X"49",X"02",X"A6",X"22",X"A4",
X"21",X"20",X"BA",X"74",X"90",X"29",X"A5",X"1D",X"49",X"01",X"A6",X"22",X"A4",X"21",X"20",X"BA",
X"74",X"90",X"1C",X"A5",X"20",X"49",X"01",X"A6",X"22",X"A4",X"21",X"20",X"BA",X"74",X"90",X"0F",
X"A5",X"20",X"A6",X"22",X"A4",X"21",X"85",X"1D",X"84",X"1E",X"86",X"1F",X"A9",X"80",X"2C",X"A9",
X"00",X"85",X"58",X"0A",X"A8",X"91",X"21",X"C8",X"91",X"21",X"A0",X"20",X"91",X"21",X"C8",X"91",
X"21",X"60",X"A0",X"03",X"A2",X"04",X"24",X"B5",X"10",X"02",X"A2",X"0C",X"CA",X"BD",X"00",X"0C",
X"0A",X"90",X"04",X"88",X"10",X"F6",X"60",X"BD",X"BC",X"79",X"A8",X"60",X"03",X"01",X"02",X"00",
X"FF",X"FF",X"FF",X"FF",X"02",X"00",X"03",X"01",X"A2",X"00",X"20",X"BC",X"78",X"A9",X"E3",X"85",
X"1B",X"A9",X"09",X"85",X"1C",X"20",X"CF",X"78",X"4C",X"48",X"7A",X"48",X"98",X"48",X"8A",X"48",
X"E6",X"8D",X"E6",X"8B",X"20",X"A2",X"79",X"B0",X"02",X"84",X"5E",X"A5",X"8B",X"29",X"07",X"D0",
X"66",X"A5",X"6E",X"F0",X"5F",X"A5",X"B8",X"F0",X"CF",X"20",X"A2",X"79",X"90",X"0C",X"A9",X"FF",
X"A4",X"5E",X"85",X"5E",X"30",X"12",X"C4",X"6C",X"F0",X"0E",X"C4",X"6C",X"D0",X"0C",X"98",X"A6",
X"6E",X"A4",X"6D",X"20",X"BA",X"74",X"90",X"18",X"A4",X"6C",X"A6",X"6D",X"A5",X"6E",X"84",X"1D",
X"86",X"1E",X"85",X"1F",X"A5",X"5B",X"F0",X"04",X"C6",X"5B",X"10",X"0D",X"A9",X"00",X"F0",X"06",
X"A9",X"04",X"85",X"5B",X"A9",X"01",X"8D",X"0B",X"0C",X"A9",X"00",X"A8",X"91",X"6D",X"C8",X"91",
X"6D",X"A0",X"20",X"91",X"6D",X"C8",X"91",X"6D",X"A2",X"00",X"A0",X"40",X"84",X"18",X"20",X"66",
X"72",X"20",X"53",X"72",X"4C",X"21",X"7B",X"85",X"1D",X"0A",X"18",X"65",X"1D",X"AA",X"85",X"16",
X"B5",X"6E",X"D0",X"41",X"24",X"57",X"10",X"EC",X"20",X"5E",X"70",X"29",X"01",X"0A",X"AA",X"A1",
X"62",X"F0",X"08",X"8A",X"49",X"02",X"AA",X"A1",X"62",X"D0",X"D9",X"E6",X"A6",X"E6",X"A5",X"A9",
X"00",X"85",X"57",X"85",X"8E",X"B5",X"63",X"85",X"1F",X"A9",X"63",X"24",X"B5",X"10",X"02",X"A9",
X"7B",X"85",X"1E",X"20",X"5E",X"70",X"29",X"01",X"F0",X"01",X"E8",X"B5",X"66",X"85",X"1D",X"A6",
X"16",X"A0",X"50",X"D0",X"A7",X"A5",X"8B",X"29",X"08",X"D0",X"76",X"20",X"BC",X"78",X"F0",X"05",
X"8A",X"29",X"01",X"F0",X"0A",X"A4",X"6A",X"84",X"1B",X"A4",X"6B",X"84",X"1C",X"D0",X"06",X"84",
X"1C",X"A4",X"6D",X"84",X"1B",X"20",X"CF",X"78",X"A6",X"16",X"A0",X"50",X"84",X"18",X"20",X"66",
X"72",X"20",X"53",X"72",X"48",X"20",X"16",X"71",X"A8",X"68",X"C0",X"12",X"B0",X"0C",X"24",X"CF",
X"30",X"04",X"C0",X"06",X"B0",X"04",X"24",X"58",X"10",X"37",X"A4",X"8A",X"D0",X"33",X"20",X"16",
X"75",X"B0",X"2E",X"A5",X"33",X"F0",X"07",X"A5",X"35",X"D0",X"26",X"A0",X"04",X"2C",X"A0",X"02",
X"A6",X"16",X"B5",X"6C",X"AA",X"96",X"36",X"A6",X"16",X"B5",X"6D",X"AA",X"96",X"30",X"A6",X"16",
X"B5",X"6E",X"AA",X"96",X"31",X"98",X"AA",X"20",X"E5",X"75",X"20",X"5A",X"76",X"A9",X"00",X"85",
X"8F",X"A5",X"8A",X"F0",X"04",X"C6",X"8A",X"10",X"75",X"A5",X"8B",X"29",X"01",X"F0",X"52",X"A5",
X"31",X"D0",X"3B",X"24",X"12",X"30",X"2D",X"20",X"6F",X"77",X"D0",X"62",X"38",X"66",X"12",X"A5",
X"6E",X"F0",X"5B",X"85",X"31",X"A5",X"6D",X"85",X"30",X"A5",X"6C",X"85",X"36",X"A2",X"00",X"86",
X"37",X"A5",X"B8",X"F0",X"07",X"A9",X"11",X"85",X"5A",X"8D",X"0C",X"0C",X"20",X"E5",X"75",X"20",
X"5A",X"76",X"D0",X"3A",X"20",X"6F",X"77",X"F0",X"02",X"46",X"12",X"4C",X"9E",X"7B",X"A2",X"00",
X"86",X"16",X"A9",X"02",X"85",X"17",X"0A",X"85",X"18",X"20",X"02",X"78",X"E6",X"37",X"4C",X"9E",
X"7B",X"A5",X"8B",X"29",X"02",X"F0",X"03",X"A2",X"02",X"2C",X"A2",X"04",X"B5",X"31",X"F0",X"0E",
X"86",X"16",X"8A",X"49",X"06",X"85",X"17",X"A9",X"00",X"85",X"18",X"20",X"02",X"78",X"68",X"AA",
X"68",X"A8",X"68",X"40",X"F8",X"18",X"A9",X"01",X"75",X"A0",X"95",X"A0",X"D8",X"60",X"F8",X"38",
X"A5",X"C0",X"E9",X"01",X"85",X"C0",X"D8",X"60",X"AD",X"1E",X"0C",X"85",X"CE",X"AD",X"1F",X"0C",
X"85",X"CF",X"A0",X"73",X"A2",X"60",X"20",X"9A",X"73",X"A9",X"02",X"2C",X"1D",X"0C",X"30",X"02",
X"A9",X"03",X"85",X"CA",X"A0",X"CC",X"A2",X"09",X"20",X"61",X"7C",X"A0",X"10",X"AD",X"1B",X"0C",
X"30",X"09",X"2C",X"1C",X"0C",X"10",X"0D",X"A0",X"15",X"D0",X"09",X"A0",X"20",X"2C",X"1C",X"0C",
X"10",X"02",X"A0",X"FF",X"84",X"CC",X"A0",X"59",X"A2",X"60",X"20",X"9A",X"73",X"A5",X"CC",X"30",
X"0E",X"A0",X"61",X"A2",X"60",X"20",X"9A",X"73",X"A0",X"AA",X"20",X"78",X"6E",X"F0",X"07",X"A0",
X"69",X"A2",X"60",X"20",X"9A",X"73",X"20",X"68",X"7F",X"85",X"CD",X"10",X"06",X"A0",X"00",X"A2",
X"60",X"D0",X"04",X"A0",X"0A",X"A2",X"60",X"20",X"9A",X"73",X"0E",X"1A",X"0C",X"6A",X"0E",X"19",
X"0C",X"6A",X"29",X"C0",X"85",X"CB",X"D0",X"07",X"A0",X"44",X"A2",X"60",X"4C",X"9A",X"73",X"30",
X"09",X"A0",X"20",X"A2",X"60",X"20",X"9A",X"73",X"F0",X"07",X"A0",X"14",X"A2",X"60",X"20",X"9A",
X"73",X"24",X"CB",X"70",X"06",X"A0",X"38",X"A2",X"60",X"D0",X"E1",X"A0",X"2C",X"A2",X"60",X"D0",
X"DB",X"84",X"2A",X"86",X"2B",X"09",X"A0",X"A0",X"00",X"91",X"2A",X"60",X"48",X"8A",X"48",X"8D",
X"18",X"0C",X"A6",X"C8",X"F0",X"08",X"CA",X"86",X"C8",X"D0",X"03",X"8E",X"08",X"0C",X"A9",X"00",
X"2C",X"05",X"0C",X"10",X"0C",X"2C",X"06",X"0C",X"10",X"07",X"2C",X"07",X"0C",X"30",X"40",X"A9",
X"80",X"85",X"C6",X"20",X"B4",X"70",X"AD",X"05",X"0C",X"10",X"F8",X"AD",X"06",X"0C",X"10",X"F3",
X"AD",X"07",X"0C",X"10",X"EE",X"A9",X"01",X"8D",X"08",X"0C",X"A2",X"20",X"24",X"C6",X"30",X"14",
X"8D",X"03",X"0C",X"20",X"B4",X"70",X"8D",X"03",X"0C",X"E6",X"C1",X"24",X"CB",X"10",X"24",X"70",
X"03",X"20",X"A4",X"7B",X"A9",X"00",X"85",X"C1",X"20",X"A4",X"7B",X"A9",X"30",X"85",X"C8",X"A2",
X"00",X"A5",X"C0",X"C9",X"98",X"B0",X"02",X"A2",X"01",X"8E",X"02",X"0C",X"68",X"AA",X"68",X"8D",
X"10",X"0C",X"40",X"A5",X"C1",X"C9",X"02",X"F0",X"DB",X"D0",X"E0",X"E0",X"04",X"B0",X"06",X"38",
X"A9",X"00",X"8D",X"0F",X"02",X"60",X"18",X"60",X"B0",X"F1",X"2C",X"07",X"0C",X"30",X"F7",X"2C",
X"0F",X"02",X"30",X"F2",X"A9",X"80",X"8D",X"0F",X"02",X"98",X"A2",X"02",X"8E",X"0B",X"02",X"A2",
X"02",X"4A",X"3E",X"08",X"02",X"CA",X"10",X"FA",X"CE",X"0B",X"02",X"D0",X"F2",X"AD",X"08",X"02",
X"29",X"0F",X"C9",X"0F",X"D0",X"D0",X"AD",X"09",X"02",X"C9",X"00",X"D0",X"C9",X"AD",X"0A",X"02",
X"C9",X"1A",X"D0",X"C2",X"8C",X"0B",X"02",X"A0",X"7A",X"A2",X"60",X"20",X"9A",X"73",X"AC",X"0B",
X"02",X"18",X"60",X"78",X"A9",X"0C",X"D8",X"85",X"01",X"A9",X"00",X"85",X"00",X"A8",X"91",X"00",
X"C8",X"D0",X"FB",X"C8",X"8C",X"0A",X"0C",X"A2",X"00",X"A9",X"00",X"85",X"00",X"85",X"01",X"A0",
X"02",X"8D",X"18",X"0C",X"8A",X"91",X"00",X"18",X"69",X"11",X"C8",X"D0",X"F8",X"AA",X"E8",X"E6",
X"01",X"A5",X"01",X"C9",X"0C",X"D0",X"EA",X"A9",X"00",X"85",X"01",X"A0",X"02",X"A6",X"02",X"8D",
X"18",X"0C",X"8A",X"D1",X"00",X"D0",X"22",X"18",X"69",X"11",X"C8",X"D0",X"F6",X"AA",X"E8",X"E6",
X"01",X"A5",X"01",X"C9",X"0C",X"D0",X"E8",X"A6",X"02",X"E8",X"E0",X"10",X"D0",X"BB",X"A9",X"BB",
X"85",X"00",X"A9",X"BF",X"85",X"01",X"4C",X"BE",X"7D",X"51",X"00",X"A2",X"BC",X"29",X"0F",X"D0",
X"02",X"A2",X"B8",X"86",X"00",X"A5",X"01",X"4A",X"4A",X"18",X"69",X"A1",X"85",X"01",X"A9",X"08",
X"85",X"03",X"A9",X"00",X"85",X"02",X"A8",X"A9",X"B0",X"8D",X"18",X"0C",X"91",X"02",X"C8",X"D0",
X"FB",X"E6",X"03",X"A5",X"03",X"C9",X"0C",X"D0",X"EE",X"A5",X"00",X"8D",X"E4",X"09",X"A5",X"01",
X"8D",X"04",X"0A",X"A9",X"BD",X"8D",X"A4",X"0A",X"A9",X"B1",X"8D",X"C4",X"0A",X"A9",X"C2",X"8D",
X"E4",X"0A",X"A5",X"01",X"C9",X"BF",X"F0",X"0B",X"8D",X"18",X"0C",X"AD",X"0F",X"0C",X"10",X"F8",
X"4C",X"43",X"7D",X"A9",X"00",X"85",X"00",X"A9",X"60",X"85",X"01",X"A2",X"00",X"A0",X"00",X"8D",
X"18",X"0C",X"8A",X"18",X"71",X"00",X"C8",X"D0",X"FA",X"AA",X"E6",X"01",X"A5",X"01",X"29",X"07",
X"D0",X"ED",X"A5",X"01",X"18",X"E9",X"60",X"4A",X"4A",X"4A",X"A8",X"8A",X"D9",X"F5",X"7F",X"D0",
X"0E",X"C0",X"03",X"D0",X"D6",X"A9",X"BB",X"8D",X"E2",X"09",X"A9",X"BF",X"4C",X"48",X"7E",X"A9",
X"B0",X"8D",X"E2",X"09",X"98",X"18",X"69",X"A1",X"8D",X"02",X"0A",X"A9",X"BD",X"8D",X"A2",X"0A",
X"A9",X"BF",X"8D",X"C2",X"0A",X"A9",X"C2",X"8D",X"E2",X"0A",X"AD",X"02",X"0A",X"C9",X"BF",X"D0",
X"35",X"A9",X"80",X"85",X"01",X"85",X"03",X"85",X"05",X"85",X"07",X"85",X"09",X"85",X"0B",X"85",
X"0D",X"85",X"0F",X"A9",X"48",X"85",X"00",X"A9",X"58",X"85",X"02",X"A9",X"68",X"85",X"04",X"A9",
X"78",X"85",X"06",X"A9",X"88",X"85",X"08",X"A9",X"97",X"85",X"0A",X"A9",X"A7",X"85",X"0C",X"A9",
X"B7",X"85",X"0E",X"4C",X"66",X"68",X"8D",X"18",X"0C",X"AD",X"0F",X"0C",X"10",X"F8",X"4C",X"43",
X"7D",X"20",X"BF",X"7E",X"20",X"E7",X"7E",X"AD",X"07",X"0C",X"0A",X"AD",X"01",X"08",X"2A",X"8D",
X"01",X"08",X"29",X"0F",X"C9",X"0C",X"D0",X"06",X"EE",X"00",X"08",X"EE",X"00",X"08",X"60",X"AD",
X"00",X"08",X"29",X"0E",X"AA",X"20",X"D7",X"7E",X"B0",X"0C",X"6A",X"6A",X"30",X"01",X"E8",X"B0",
X"03",X"D6",X"00",X"60",X"F6",X"00",X"60",X"A0",X"00",X"B9",X"00",X"0C",X"10",X"06",X"C8",X"C0",
X"04",X"D0",X"F6",X"60",X"98",X"18",X"60",X"A2",X"00",X"B4",X"00",X"E0",X"0A",X"90",X"01",X"C8",
X"C0",X"57",X"90",X"4C",X"C0",X"5F",X"B0",X"48",X"E8",X"B4",X"00",X"C0",X"4F",X"90",X"41",X"C0",
X"57",X"B0",X"3D",X"E8",X"E0",X"10",X"D0",X"E1",X"A9",X"A0",X"85",X"88",X"A2",X"00",X"BD",X"41",
X"7F",X"30",X"1E",X"0A",X"0A",X"0A",X"0A",X"0A",X"09",X"1A",X"A8",X"BD",X"41",X"7F",X"4A",X"4A",
X"4A",X"29",X"03",X"09",X"08",X"85",X"89",X"A5",X"88",X"84",X"88",X"A0",X"00",X"91",X"88",X"85",
X"88",X"BD",X"41",X"7F",X"0A",X"30",X"02",X"E6",X"88",X"E8",X"A5",X"88",X"C9",X"C5",X"D0",X"CE",
X"60",X"06",X"09",X"80",X"80",X"80",X"80",X"80",X"80",X"07",X"08",X"80",X"80",X"19",X"80",X"80",
X"80",X"80",X"16",X"80",X"14",X"0B",X"0C",X"80",X"80",X"80",X"4E",X"10",X"80",X"80",X"11",X"4F",
X"15",X"17",X"13",X"80",X"80",X"80",X"80",X"0D",X"AD",X"18",X"0C",X"49",X"FF",X"60",X"41",X"4E",
X"4B",X"20",X"53",X"45",X"41",X"52",X"43",X"48",X"0D",X"53",X"54",X"4E",X"4B",X"50",X"53",X"31",
X"09",X"4C",X"44",X"59",X"09",X"5A",X"20",X"3A",X"42",X"55",X"46",X"44",X"41",X"54",X"41",X"31",
X"0D",X"09",X"42",X"45",X"51",X"09",X"52",X"20",X"3A",X"53",X"54",X"50",X"31",X"31",X"30",X"09",
X"09",X"53",X"4F",X"4E",X"4F",X"20",X"4D",X"41",X"4D",X"41",X"0D",X"09",X"44",X"45",X"59",X"0D",
X"09",X"44",X"45",X"59",X"0D",X"09",X"42",X"4D",X"49",X"09",X"52",X"20",X"3A",X"53",X"54",X"50",
X"31",X"30",X"32",X"0D",X"09",X"42",X"45",X"51",X"09",X"52",X"20",X"3A",X"53",X"54",X"50",X"31",
X"30",X"35",X"0D",X"09",X"4A",X"53",X"52",X"09",X"41",X"20",X"3A",X"53",X"42",X"32",X"30",X"41",
X"44",X"31",X"0D",X"53",X"54",X"50",X"31",X"30",X"32",X"09",X"4A",X"53",X"52",X"09",X"41",X"20",
X"3A",X"44",X"45",X"43",X"41",X"86",X"09",X"49",X"1E",X"0A",X"DB",X"79",X"43",X"7D",X"6C",X"7C");
begin
process(clk)
begin
if rising_edge(clk) then
data <= rom_data(to_integer(unsigned(addr)));
end if;
end process;
end architecture;

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,150 @@
library ieee;
use ieee.std_logic_1164.all,ieee.numeric_std.all;
entity k3 is
port (
clk : in std_logic;
addr : in std_logic_vector(10 downto 0);
data : out std_logic_vector(7 downto 0)
);
end entity;
architecture prom of k3 is
type rom is array(0 to 2047) of std_logic_vector(7 downto 0);
signal rom_data: rom := (
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"EE",X"E0",X"EE",X"EE",X"EE",X"0E",X"EE",X"EE",
X"EE",X"E0",X"EE",X"EE",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"EE",X"0E",X"EE",X"EE",
X"0E",X"00",X"0E",X"0E",X"0E",X"0E",X"0E",X"0E",X"E0",X"E0",X"E0",X"E0",X"E0",X"00",X"E0",X"E0",
X"E0",X"E0",X"E0",X"E0",X"00",X"00",X"00",X"00",X"0E",X"00",X"0E",X"0E",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"E0",X"00",X"E0",X"E0",X"00",X"00",X"00",X"00",X"0E",X"0E",X"0E",X"0E",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"02",X"02",X"FE",X"FE",X"42",X"02",X"00",X"00",X"78",X"FC",X"96",X"92",X"92",X"F2",X"60",X"00",
X"0C",X"6E",X"9A",X"9A",X"B2",X"F2",X"6C",X"00",X"38",X"7C",X"C2",X"82",X"86",X"7C",X"38",X"00",
X"AA",X"55",X"AA",X"55",X"AA",X"55",X"AA",X"55",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"02",X"22",X"3B",X"1F",X"09",X"1E",X"00",X"00",X"08",X"50",X"70",X"E0",X"78",X"30",
X"06",X"0D",X"1F",X"32",X"04",X"00",X"00",X"00",X"60",X"F0",X"B8",X"E8",X"44",X"00",X"00",X"00",
X"40",X"70",X"3B",X"1F",X"1D",X"0B",X"0E",X"7C",X"00",X"02",X"4E",X"FC",X"C8",X"7C",X"38",X"30",
X"0E",X"1F",X"1D",X"0B",X"1F",X"32",X"60",X"00",X"78",X"38",X"EC",X"F8",X"6C",X"66",X"02",X"00",
X"8E",X"64",X"79",X"3F",X"97",X"9D",X"38",X"75",X"53",X"86",X"8C",X"DD",X"FD",X"69",X"10",X"BF",
X"FC",X"19",X"DF",X"BB",X"7F",X"64",X"C0",X"9C",X"B8",X"3C",X"5E",X"F0",X"F9",X"DC",X"B6",X"B3",
X"00",X"00",X"04",X"04",X"08",X"10",X"A0",X"C0",X"00",X"00",X"00",X"08",X"02",X"78",X"FE",X"D6",
X"00",X"00",X"28",X"38",X"24",X"00",X"1C",X"7F",X"00",X"00",X"20",X"30",X"18",X"09",X"0D",X"03",
X"00",X"08",X"E4",X"F0",X"B0",X"60",X"E0",X"C0",X"AB",X"FD",X"FE",X"7F",X"77",X"2F",X"4F",X"E3",
X"67",X"DB",X"FE",X"FE",X"FD",X"6D",X"F1",X"D7",X"04",X"04",X"09",X"11",X"01",X"07",X"0F",X"1B",
X"B0",X"F4",X"66",X"B4",X"B6",X"61",X"C0",X"80",X"CF",X"AF",X"17",X"A7",X"F3",X"DF",X"FF",X"E7",
X"7B",X"F6",X"E8",X"E6",X"FE",X"B6",X"6D",X"FF",X"1D",X"1B",X"0D",X"1E",X"1D",X"0F",X"03",X"00",
X"30",X"40",X"A0",X"90",X"48",X"04",X"00",X"00",X"FA",X"BC",X"7C",X"F8",X"E2",X"04",X"00",X"00",
X"6F",X"36",X"39",X"1F",X"4E",X"20",X"20",X"00",X"04",X"02",X"0D",X"09",X"10",X"20",X"20",X"00",
X"00",X"02",X"0C",X"98",X"C8",X"C0",X"58",X"FC",X"00",X"1E",X"7F",X"73",X"6D",X"FE",X"FF",X"FF",
X"00",X"00",X"0F",X"DE",X"F7",X"DF",X"FF",X"FF",X"80",X"C4",X"62",X"30",X"19",X"13",X"03",X"0F",
X"FE",X"EE",X"F6",X"F7",X"EF",X"DE",X"F8",X"FF",X"FF",X"EF",X"CB",X"17",X"2F",X"5D",X"8B",X"EF",
X"BF",X"7D",X"DC",X"C5",X"D3",X"ED",X"E1",X"83",X"0F",X"06",X"19",X"3F",X"3D",X"1B",X"1B",X"5D",
X"FF",X"7F",X"EF",X"F7",X"FA",X"F7",X"FB",X"F7",X"87",X"D8",X"2F",X"0F",X"67",X"FB",X"FF",X"B7",
X"E7",X"AD",X"61",X"C1",X"9C",X"FD",X"FF",X"BF",X"7F",X"EF",X"FF",X"FB",X"FF",X"6F",X"07",X"0D",
X"EF",X"DE",X"3C",X"F0",X"84",X"94",X"0A",X"01",X"CF",X"FE",X"FF",X"7F",X"B5",X"CB",X"FF",X"74",
X"3F",X"FF",X"DE",X"9F",X"83",X"3D",X"48",X"50",X"0E",X"0F",X"0F",X"27",X"13",X"28",X"48",X"80",
X"00",X"03",X"03",X"01",X"01",X"01",X"73",X"77",X"00",X"80",X"80",X"00",X"00",X"00",X"9C",X"DC",
X"7F",X"7F",X"7F",X"7F",X"77",X"70",X"00",X"00",X"FC",X"FC",X"FC",X"FC",X"DC",X"1C",X"00",X"00",
X"00",X"70",X"77",X"7F",X"7F",X"7F",X"7F",X"77",X"00",X"1C",X"DC",X"FC",X"FC",X"FC",X"FC",X"DC",
X"73",X"01",X"01",X"01",X"03",X"03",X"00",X"00",X"9C",X"00",X"00",X"00",X"80",X"80",X"00",X"00",
X"00",X"7F",X"7F",X"7F",X"1E",X"3F",X"3F",X"3F",X"00",X"80",X"80",X"80",X"00",X"00",X"8C",X"FC",
X"3F",X"3F",X"1E",X"7F",X"7F",X"7F",X"00",X"00",X"8C",X"00",X"00",X"80",X"80",X"80",X"00",X"00",
X"00",X"03",X"03",X"03",X"00",X"01",X"63",X"7F",X"00",X"FC",X"FC",X"FC",X"F0",X"F8",X"F8",X"F8",
X"63",X"01",X"00",X"03",X"03",X"03",X"00",X"00",X"F8",X"F8",X"F0",X"FC",X"FC",X"FC",X"00",X"00",
X"00",X"03",X"03",X"01",X"71",X"77",X"7C",X"78",X"00",X"80",X"80",X"00",X"1C",X"DC",X"7C",X"3C",
X"78",X"7C",X"76",X"73",X"71",X"70",X"00",X"00",X"3C",X"7C",X"DC",X"9C",X"1C",X"1C",X"00",X"00",
X"00",X"70",X"71",X"73",X"76",X"7C",X"78",X"78",X"00",X"1C",X"1C",X"9C",X"DC",X"7C",X"3C",X"3C",
X"7C",X"77",X"71",X"01",X"03",X"03",X"00",X"00",X"7C",X"DC",X"1C",X"00",X"80",X"80",X"00",X"00",
X"00",X"7F",X"7F",X"7F",X"07",X"0C",X"18",X"30",X"00",X"E0",X"E0",X"E0",X"80",X"C0",X"4C",X"7C",
X"18",X"0C",X"07",X"7F",X"7F",X"7F",X"00",X"00",X"4C",X"C0",X"80",X"E0",X"E0",X"E0",X"00",X"00",
X"00",X"0F",X"0F",X"0F",X"03",X"06",X"64",X"7C",X"00",X"FC",X"FC",X"FC",X"C0",X"60",X"30",X"18",
X"64",X"06",X"03",X"0F",X"0F",X"0F",X"00",X"00",X"30",X"60",X"C0",X"FC",X"FC",X"FC",X"00",X"00",
X"00",X"00",X"00",X"7C",X"82",X"82",X"82",X"7C",X"00",X"8C",X"D2",X"A2",X"82",X"84",X"00",X"00",
X"00",X"00",X"00",X"7C",X"82",X"82",X"82",X"7C",X"00",X"0C",X"92",X"92",X"52",X"3C",X"00",X"00",
X"00",X"7C",X"82",X"82",X"7C",X"00",X"9C",X"A2",X"A2",X"A2",X"E4",X"00",X"02",X"FE",X"42",X"00",
X"00",X"7C",X"82",X"82",X"7C",X"00",X"7C",X"82",X"82",X"7C",X"00",X"8C",X"D2",X"A2",X"82",X"84",
X"00",X"7C",X"82",X"82",X"7C",X"00",X"7C",X"82",X"82",X"7C",X"00",X"6C",X"92",X"92",X"92",X"6C",
X"7C",X"82",X"82",X"7C",X"00",X"7C",X"82",X"82",X"7C",X"00",X"9C",X"92",X"92",X"7C",X"00",X"FE",
X"00",X"00",X"01",X"03",X"03",X"03",X"07",X"0F",X"00",X"60",X"F8",X"80",X"E0",X"C0",X"C0",X"E0",
X"1F",X"0F",X"37",X"19",X"06",X"03",X"00",X"00",X"F8",X"F0",X"F0",X"E0",X"20",X"80",X"FF",X"00",
X"00",X"00",X"21",X"41",X"45",X"4B",X"31",X"00",X"3E",X"41",X"41",X"41",X"3E",X"00",X"00",X"00",
X"00",X"00",X"3C",X"4A",X"49",X"49",X"30",X"00",X"3E",X"41",X"41",X"41",X"3E",X"00",X"00",X"00",
X"00",X"42",X"7F",X"40",X"00",X"27",X"45",X"45",X"45",X"39",X"00",X"3E",X"41",X"41",X"3E",X"00",
X"21",X"41",X"45",X"4B",X"31",X"00",X"3E",X"41",X"41",X"3E",X"00",X"3E",X"41",X"41",X"3E",X"00",
X"36",X"49",X"49",X"49",X"36",X"00",X"3E",X"41",X"41",X"3E",X"00",X"3E",X"41",X"41",X"3E",X"00",
X"7F",X"00",X"3E",X"49",X"49",X"39",X"00",X"3E",X"41",X"41",X"3E",X"00",X"3E",X"41",X"41",X"3E",
X"00",X"FF",X"01",X"04",X"07",X"0F",X"0F",X"1F",X"00",X"00",X"C0",X"60",X"98",X"EC",X"F0",X"F8",
X"07",X"03",X"03",X"07",X"01",X"1F",X"06",X"00",X"F0",X"E0",X"C0",X"C0",X"C0",X"80",X"00",X"00",
X"54",X"7D",X"3F",X"1D",X"06",X"07",X"13",X"2F",X"00",X"00",X"C0",X"E0",X"E6",X"E6",X"4C",X"FE",
X"3F",X"23",X"07",X"06",X"1D",X"3F",X"7D",X"54",X"FE",X"4C",X"E6",X"E6",X"E0",X"C0",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"7F",X"7F",X"00",X"00",X"00",X"00",X"00",X"00",X"FF",X"FF",X"00",X"00",X"00",X"00",X"00",X"00",
X"01",X"03",X"07",X"07",X"0F",X"0F",X"1F",X"1F",X"00",X"00",X"80",X"80",X"C0",X"C0",X"E0",X"E0",
X"31",X"21",X"2C",X"2E",X"6E",X"60",X"60",X"7F",X"B0",X"30",X"30",X"70",X"F8",X"38",X"38",X"F8",
X"00",X"00",X"03",X"07",X"67",X"67",X"32",X"7F",X"2A",X"BE",X"FC",X"B8",X"60",X"E0",X"C4",X"FC",
X"7F",X"32",X"67",X"67",X"07",X"03",X"00",X"00",X"F4",X"C8",X"E0",X"60",X"B8",X"FC",X"BE",X"2A",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"FF",X"FF",X"00",X"00",X"00",X"00",X"00",X"00",X"FE",X"FE",
X"1F",X"1C",X"1C",X"1F",X"0E",X"0C",X"0C",X"0C",X"FE",X"06",X"06",X"76",X"74",X"34",X"84",X"8C",
X"07",X"07",X"03",X"03",X"01",X"01",X"00",X"00",X"F8",X"F8",X"F0",X"F0",X"E0",X"E0",X"C0",X"80",
X"38",X"7C",X"C2",X"82",X"86",X"7C",X"38",X"00",X"02",X"02",X"FE",X"FE",X"42",X"02",X"00",X"00",
X"62",X"F2",X"BA",X"9A",X"9E",X"CE",X"46",X"00",X"8C",X"DE",X"F2",X"B2",X"92",X"86",X"04",X"00",
X"08",X"FE",X"FE",X"C8",X"68",X"38",X"18",X"00",X"1C",X"BE",X"A2",X"A2",X"A2",X"E6",X"E4",X"00",
X"0C",X"9E",X"92",X"92",X"D2",X"7E",X"3C",X"00",X"C0",X"E0",X"B0",X"9E",X"8E",X"C0",X"C0",X"00",
X"0C",X"6E",X"9A",X"9A",X"B2",X"F2",X"6C",X"00",X"78",X"FC",X"96",X"92",X"92",X"F2",X"60",X"00",
X"60",X"F0",X"DA",X"CA",X"CA",X"E0",X"60",X"00",X"6C",X"FE",X"92",X"92",X"92",X"FE",X"FE",X"00",
X"3C",X"42",X"81",X"A5",X"A5",X"99",X"42",X"3C",X"C0",X"C0",X"C0",X"C0",X"FF",X"FF",X"00",X"00",
X"DB",X"DB",X"DF",X"1F",X"00",X"00",X"7F",X"FF",X"FF",X"00",X"00",X"7F",X"FF",X"FF",X"DB",X"DB",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"3E",X"7E",X"C8",X"88",X"C8",X"7E",X"3E",X"00",
X"6C",X"FE",X"92",X"92",X"92",X"FE",X"FE",X"00",X"44",X"C6",X"82",X"82",X"C6",X"7C",X"38",X"00",
X"38",X"7C",X"C6",X"82",X"82",X"FE",X"FE",X"00",X"82",X"92",X"92",X"92",X"FE",X"FE",X"00",X"00",
X"80",X"90",X"90",X"90",X"90",X"FE",X"FE",X"00",X"9E",X"9E",X"92",X"82",X"C6",X"7C",X"38",X"00",
X"FE",X"FE",X"10",X"10",X"10",X"FE",X"FE",X"00",X"82",X"82",X"FE",X"FE",X"82",X"82",X"00",X"00",
X"FC",X"FE",X"02",X"02",X"02",X"06",X"04",X"00",X"82",X"C6",X"6E",X"3C",X"18",X"FE",X"FE",X"00",
X"02",X"02",X"02",X"02",X"FE",X"FE",X"00",X"00",X"FE",X"FE",X"70",X"38",X"70",X"FE",X"FE",X"00",
X"FE",X"FE",X"1C",X"38",X"70",X"FE",X"FE",X"00",X"7C",X"FE",X"82",X"82",X"82",X"FE",X"7C",X"00",
X"70",X"F8",X"88",X"88",X"88",X"FE",X"FE",X"00",X"7A",X"FC",X"8E",X"8A",X"82",X"FE",X"7C",X"00",
X"72",X"F6",X"9E",X"8C",X"88",X"FE",X"FE",X"00",X"0C",X"5E",X"D2",X"92",X"92",X"F6",X"64",X"00",
X"80",X"80",X"FE",X"FE",X"80",X"80",X"00",X"00",X"FC",X"FE",X"02",X"02",X"02",X"FE",X"FC",X"00",
X"F0",X"F8",X"1C",X"0E",X"1C",X"F8",X"F0",X"00",X"FE",X"FE",X"1C",X"38",X"1C",X"FE",X"FE",X"00",
X"C6",X"EE",X"7C",X"38",X"7C",X"EE",X"C6",X"00",X"E0",X"F0",X"1E",X"1E",X"F0",X"E0",X"00",X"00",
X"C2",X"E2",X"F2",X"BA",X"9E",X"8E",X"86",X"00",X"00",X"00",X"E0",X"FA",X"FA",X"00",X"00",X"00",
X"60",X"F0",X"9A",X"8A",X"C0",X"40",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"1F",X"1F",X"4A",X"7A",X"4A",X"1F",X"1F",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"1C",X"3E",X"61",X"41",X"43",X"3E",X"1C",X"00",X"00",X"40",X"42",X"7F",X"7F",X"40",X"40",
X"00",X"62",X"73",X"79",X"59",X"5D",X"4F",X"46",X"00",X"20",X"61",X"49",X"4D",X"4F",X"7B",X"31",
X"00",X"18",X"1C",X"16",X"13",X"7F",X"7F",X"10",X"00",X"27",X"67",X"45",X"45",X"45",X"7D",X"38",
X"00",X"3C",X"7E",X"4B",X"49",X"49",X"79",X"30",X"00",X"03",X"03",X"71",X"79",X"0D",X"07",X"03",
X"00",X"36",X"4F",X"4D",X"59",X"59",X"76",X"30",X"00",X"06",X"4F",X"49",X"49",X"69",X"3F",X"1E",
X"FF",X"80",X"80",X"80",X"80",X"80",X"80",X"80",X"FF",X"01",X"01",X"01",X"01",X"01",X"01",X"01",
X"FF",X"C0",X"C0",X"FF",X"FF",X"C0",X"C0",X"FF",X"C3",X"C3",X"C3",X"FF",X"7E",X"00",X"00",X"7F",
X"C3",X"FF",X"7E",X"00",X"00",X"C3",X"C3",X"C3",X"00",X"00",X"7E",X"FF",X"C3",X"C3",X"C3",X"C3",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"7C",X"7E",X"13",X"11",X"13",X"7E",X"7C",
X"00",X"7F",X"7F",X"49",X"49",X"49",X"7F",X"36",X"00",X"1C",X"3E",X"63",X"41",X"41",X"63",X"22",
X"00",X"7F",X"7F",X"41",X"41",X"63",X"3E",X"1C",X"00",X"00",X"7F",X"7F",X"49",X"49",X"49",X"41",
X"00",X"7F",X"7F",X"09",X"09",X"09",X"09",X"01",X"00",X"1C",X"3E",X"63",X"41",X"49",X"79",X"79",
X"00",X"7F",X"7F",X"08",X"08",X"08",X"7F",X"7F",X"00",X"00",X"41",X"41",X"7F",X"7F",X"41",X"41",
X"80",X"80",X"80",X"80",X"80",X"80",X"80",X"FF",X"01",X"01",X"01",X"01",X"01",X"01",X"01",X"FF",
X"00",X"00",X"7F",X"7F",X"40",X"40",X"40",X"40",X"00",X"7F",X"7F",X"0E",X"1C",X"0E",X"7F",X"7F",
X"00",X"7F",X"7F",X"0E",X"1C",X"38",X"7F",X"7F",X"00",X"3E",X"7F",X"41",X"41",X"41",X"7F",X"3E",
X"00",X"7F",X"7F",X"11",X"11",X"11",X"1F",X"0E",X"00",X"3E",X"7F",X"41",X"51",X"71",X"3F",X"5E",
X"00",X"7F",X"7F",X"11",X"31",X"79",X"6F",X"4E",X"00",X"26",X"6F",X"49",X"49",X"4B",X"7A",X"30",
X"00",X"00",X"01",X"01",X"7F",X"7F",X"01",X"01",X"00",X"3F",X"7F",X"40",X"40",X"40",X"7F",X"3F",
X"00",X"0F",X"1F",X"38",X"70",X"38",X"1F",X"0F",X"00",X"7F",X"7F",X"38",X"1C",X"38",X"7F",X"7F",
X"00",X"63",X"77",X"3E",X"1C",X"3E",X"77",X"63",X"00",X"00",X"07",X"0F",X"78",X"78",X"0F",X"07",
X"00",X"61",X"71",X"79",X"5D",X"4F",X"47",X"43",X"00",X"00",X"00",X"5F",X"5F",X"07",X"00",X"00",
X"00",X"00",X"02",X"03",X"51",X"59",X"0F",X"06",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"F8",X"F8",X"52",X"5E",X"52",X"F8",X"F8",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00");
begin
process(clk)
begin
if rising_edge(clk) then
data <= rom_data(to_integer(unsigned(addr)));
end if;
end process;
end architecture;

View File

@@ -0,0 +1,38 @@
library ieee;
use ieee.std_logic_1164.all,ieee.numeric_std.all;
entity l3 is
port (
clk : in std_logic;
addr : in std_logic_vector(7 downto 0);
data : out std_logic_vector(3 downto 0)
);
end entity;
architecture prom of l3 is
type rom is array(0 to 255) of std_logic_vector(3 downto 0);
signal rom_data: rom := (
X"0",X"2",X"E",X"2",X"0",X"2",X"E",X"2",X"0",X"2",X"E",X"2",X"0",X"3",X"E",X"3",
X"0",X"5",X"0",X"5",X"0",X"3",X"E",X"3",X"0",X"7",X"E",X"7",X"0",X"F",X"E",X"F",
X"0",X"3",X"E",X"3",X"0",X"3",X"E",X"3",X"0",X"3",X"E",X"3",X"0",X"3",X"E",X"3",
X"0",X"F",X"E",X"F",X"0",X"F",X"E",X"F",X"0",X"F",X"E",X"F",X"0",X"F",X"E",X"F",
X"0",X"7",X"E",X"7",X"0",X"7",X"E",X"7",X"0",X"7",X"E",X"7",X"0",X"7",X"E",X"7",
X"0",X"C",X"E",X"C",X"0",X"C",X"E",X"C",X"0",X"C",X"E",X"C",X"0",X"C",X"E",X"C",
X"0",X"E",X"E",X"E",X"0",X"E",X"E",X"E",X"0",X"E",X"E",X"E",X"0",X"E",X"E",X"E",
X"0",X"E",X"E",X"E",X"0",X"E",X"E",X"E",X"0",X"E",X"E",X"E",X"0",X"E",X"E",X"E",
X"0",X"7",X"E",X"7",X"0",X"7",X"E",X"7",X"0",X"7",X"E",X"7",X"0",X"A",X"E",X"A",
X"0",X"B",X"E",X"B",X"0",X"B",X"E",X"B",X"0",X"7",X"E",X"7",X"0",X"A",X"E",X"A",
X"0",X"E",X"E",X"E",X"0",X"E",X"E",X"E",X"0",X"E",X"E",X"E",X"0",X"3",X"E",X"3",
X"0",X"E",X"E",X"E",X"0",X"E",X"E",X"E",X"0",X"E",X"E",X"E",X"0",X"E",X"E",X"E",
X"0",X"E",X"E",X"E",X"0",X"E",X"E",X"E",X"0",X"E",X"E",X"E",X"0",X"C",X"E",X"C",
X"0",X"E",X"E",X"E",X"0",X"E",X"E",X"E",X"0",X"E",X"E",X"E",X"0",X"3",X"E",X"3",
X"0",X"E",X"E",X"E",X"0",X"E",X"E",X"E",X"0",X"E",X"E",X"E",X"0",X"E",X"E",X"E",
X"0",X"E",X"E",X"E",X"0",X"E",X"E",X"E",X"0",X"E",X"E",X"E",X"0",X"C",X"E",X"C");
begin
process(clk)
begin
if rising_edge(clk) then
data <= rom_data(to_integer(unsigned(addr)));
end if;
end process;
end architecture;

View File

@@ -0,0 +1,98 @@
module sound # (
parameter wav_length= 16'd38174;
parameter init_file= ""
)
(
input clk,
input trigger,
input RESET_n,
output signed [15:0] sound_out
);
reg sndclk = 1'b0;
always @(posedge clk) begin
sndclk <= ~sndclk;
end
reg wav_playing = 1'b0;
wire wav_play;
reg [WAV_COUNTER_SIZE-1:0] wav_counter;
localparam WAV_COUNTER_SIZE = 10;//10
localparam WAV_COUNTER_MAX = 100;//1000
reg signed [7:0] wav_signed;
// Wave player
reg [15:0] wave_rom_addr;
wire [7:0] wave_rom_data_out;
reg [15:0] wave_rom_length = wav_length;
spram #(14,8,init_file) wave_rom //should be 64k here not enough BRAM but it works
(
.clk(clk),
.address(wave_rom_addr),
.wren(1'b0),
.data(),
.q(wave_rom_data_out)
);
clock trig1(
.clk(sndclk),
.rst_n(),
.Phi2(trigger),
.cpu_clken(wav_play)
);
// States
localparam STOP = 0, START = 1, PLAY = 2;
reg [1:0] state = STOP;
always @(posedge clk)
begin
case (state)
STOP : begin
wav_signed <= 8'b0;
wave_rom_addr <= 16'b0; //reset the rom address
wav_counter <= WAV_COUNTER_MAX; // put the wav counter to the maximum
if(wav_play)
begin//wav_play is trigger to play it
state <= START;
//wav_play <= 1'b0;
end
end
START : begin
wav_signed <= 8'b0;
wave_rom_addr <= 16'b0; //reset the rom address
wav_counter <= WAV_COUNTER_MAX; // put the wav counter to the maximum
wav_playing <= 1'b1; //make wav_playing 1
state <= PLAY;
end
PLAY : begin
wav_counter <= wav_counter - 1'b1; //reduce the wav counter by one bit.
if(wav_play)
begin//wav_play is trigger to play it
state <= START;
//wav_play <= 1'b0;
end
if(wav_counter == {WAV_COUNTER_SIZE{1'b0}})// if wav counter is zero.
begin
if(wave_rom_addr < wave_rom_length) // if wave rom address is below wave rom length (38174)
begin
wav_signed <= wave_rom_data_out; //wav signed is wave rom data out
wave_rom_addr <= wave_rom_addr + 16'b1; //wave rom address is incremented by 1 bit
wav_counter <= {WAV_COUNTER_SIZE{1'b1}}; //wav counter is? check this!
end
else //if wave rom address in NOT below wave rom length
begin
state <= STOP;
end
end
end
endcase
end
wire signed [15:0] wav_amplified = { wav_signed[7], {1{wav_signed[7]}}, wav_signed[6:0], {7{wav_signed[7]}} }; //create 16 bit from 8 bit wav
assign sound_out = wav_amplified;
endmodule

View File

@@ -0,0 +1,621 @@
//74LS74 Chip pinout:
/* _____________
_| |_
n_clr1 |_|1 14|_| VCC
_| |_
d1 |_|2 13|_| n_clr2
_| |_
clk1 |_|3 12|_| d2
_| |_
n_pre1 |_|4 11|_| clk2
_| |_
q1 |_|5 10|_| n_pre2
_| |_
n_q1 |_|6 9|_| q2
_| |_
GND |_|7 8|_| n_q2
|_____________|
*/
module ls74
(
input n_pre1, n_pre2,
input n_clr1, n_clr2,
input clk1, clk2,
input d1, d2,
output reg q1, q2,
output n_q1, n_q2
);
always @(posedge clk1 or negedge n_pre1 or negedge n_clr1) begin
if(!n_pre1)
q1 <= 1;
else if(!n_clr1)
q1 <= 0;
else
q1 <= d1;
end
assign n_q1 = ~q1;
always @(posedge clk2 or negedge n_pre2 or negedge n_clr2) begin
if(!n_pre2)
q2 <= 1;
else if(!n_clr2)
q2 <= 0;
else
q2 <= d2;
end
assign n_q2 = ~q2;
endmodule
//74LS107 Chip pinout:
/* _____________
_| |_
1J |_|1 14|_| VCC
_| |_
1nQ |_|2 13|_| 1nCLR
_| |_
1Q |_|3 12|_| 1CK
_| |_
1K |_|4 11|_| 2K
_| |_
2Q |_|5 10|_| 2nCLR
_| |_
2nQ |_|6 9|_| 2CK
_| |_
GND |_|7 8|_| 2J
|_____________|
*/
module ls107(
input clear,
input clk,
input j,
input k,
output reg q,
output qnot
);
assign qnot=~q;
always @(negedge clk or negedge clear) begin
if (!clear) q<=1'b0; else
case ({j, k})
2'b00: q<=q;
2'b01: q<=1'b0;
2'b10: q<=1'b1;
2'b11: q<=~q;
endcase
end
endmodule
//74LS161 Chip pinout:
/* _____________
_| |_
n_clr |_|1 16|_| VCC
_| |_
clk |_|2 15|_| rco
_| |_
din(0) |_|3 14|_| q(0)
_| |_
din(1) |_|4 13|_| q(1)
_| |_
din(2) |_|5 12|_| q(2)
_| |_
din(3) |_|6 11|_| q(3)
_| |_
enp |_|7 10|_| ent
_| |_
GND |_|8 9|_| n_load
|_____________|
*/
module ls161 //asynchronous reset/clear
(
input n_clr,
input clk,
input [3:0] din,
input enp, ent,
input n_load,
output [3:0] q,
output rco
);
reg [3:0] data = 4'b0;
always @(posedge clk or negedge n_clr) begin
if(!n_clr)
data <= 4'd0;
else
if(!n_load)
data <= din;
else if(enp && ent)
data <= data + 4'd1;
end
assign q = data;
assign rco = data[0] & data[1] & data[2] & data[3] & ent;
endmodule
//74LS273 Chip pinout:
/* _____________
_| |_
res |_|1 20|_| VCC
_| |_
q(0) |_|2 19|_| q(7)
_| |_
d(0) |_|3 18|_| d(7)
_| |_
d(1) |_|4 17|_| d(6)
_| |_
q(1) |_|5 16|_| q(6)
_| |_
q(2) |_|6 15|_| q(5)
_| |_
d(2) |_|7 14|_| d(5)
_| |_
d(3) |_|8 13|_| d(4)
_| |_
q(3) |_|9 12|_| q(4)
_| |_
GND |_|10 11|_| clk
|_____________|
*/
module ls273
(
input [7:0] d,
input clk,
input res,
output reg [7:0] q
);
always @(posedge clk or negedge res) begin
if(!res)
q <= 8'h00;
else
q <= d;
end
endmodule
//74LS166 Chip pinout:
/* _____________
_| |_
serial input |_|1 16|_| VCC
_| |_
parra in A |_|2 15|_| shift/load
_| |_
parra in B |_|3 14|_| parra in H
_| |_
parra in C |_|4 13|_| serial output
_| |_
parra in D |_|5 12|_| parra in G
_| |_
CLK inhibit |_|6 11|_| parra in F
_| |_
CLK |_|7 10|_| parra in E
_| |_
GND |_|8 9|_| clear
|_____________|
*/
module ls166
(
input clk,
input load,
input [7:0] in,
output out
);
reg [7:0]tmp;
always @(posedge clk)
begin
if (!load)
tmp <= in;
else
tmp <= {tmp[6:0], 1'b0};
end
assign out = tmp[7];
endmodule
//74LS174 Chip pinout:
/* _____________
_| |_
mr |_|1 16|_| VCC
_| |_
q(0) |_|2 15|_| q(5)
_| |_
d(0) |_|3 14|_| d(5)
_| |_
d(1) |_|4 13|_| d(4)
_| |_
q(1) |_|5 12|_| q(4)
_| |_
d(2) |_|6 11|_| d(3)
_| |_
q(2) |_|7 10|_| q(3)
_| |_
GND |_|8 9|_| clk
|_____________|
*/
module ls174
(
input [5:0] d,
input clk,
input mr,
output reg [5:0] q
);
always @(posedge clk or negedge mr) begin
if(!mr)
q <= 6'b000000;
else
q <= d;
end
endmodule
//74LS139 Chip pinout:
/* _____________
_| |_
1n_G |_|1 16|_| VCC
_| |_
1A |_|2 15|_| 2n_G
_| |_
1B |_|3 14|_| 2A
_| |_
1Y0 |_|4 13|_| 2B
_| |_
1Y1 |_|5 12|_| 2Y0
_| |_
1Y2 |_|6 11|_| 2Y1
_| |_
1Y3 |_|7 10|_| 2Y2
_| |_
GND |_|8 9|_| 2Y3
|_____________|
*/
module ls139
(
input a,
input b,
input n_g,
output [3:0] y
);
assign y = (!n_g && !a && !b) ? 4'b1110:
(!n_g && a && !b) ? 4'b1101:
(!n_g && !a && b) ? 4'b1011:
(!n_g && a && b) ? 4'b0111:
4'b1111;
endmodule
//Chip pinout:
/* _____________
_| |_
s |_|1 16|_| VCC
_| |_
i0(0) |_|2 15|_| n_e
_| |_
i1(0) |_|3 14|_| i0(2)
_| |_
z(0) |_|4 13|_| i1(2)
_| |_
i0(1) |_|5 12|_| z(2)
_| |_
i1(1) |_|6 11|_| i0(3)
_| |_
z(1) |_|7 10|_| i1(3)
_| |_
GND |_|8 9|_| z(3)
|_____________|
*/
module ls157
(
input [3:0] i0,
input [3:0] i1,
input n_e,
input s,
output [3:0] z
);
assign z = (!n_e && !s) ? i0:
(!n_e && s) ? i1:
4'b0000;
endmodule
module ls42
(
input [3:0] in,
output reg [9:0] out
);
// in = [DCBA]
// out = [9876543210]
always @ (*)
case (in)
4'b0000: out = 10'b1111111110;
4'b0001: out = 10'b1111111101;
4'b0010: out = 10'b1111111011;
4'b0011: out = 10'b1111110111;
4'b0100: out = 10'b1111101111;
4'b0101: out = 10'b1111011111;
4'b0110: out = 10'b1110111111;
4'b0111: out = 10'b1101111111;
4'b1000: out = 10'b1011111111;
4'b1001: out = 10'b0111111111;
4'b1010: out = 10'b1111111111;
4'b1011: out = 10'b1111111111;
4'b1100: out = 10'b1111111111;
4'b1101: out = 10'b1111111111;
4'b1110: out = 10'b1111111111;
4'b1111: out = 10'b1111111111;
default: out = 10'b1111111111;
endcase
endmodule
//New Modules
//Chip pinout:
/* _____________
_| |_
n_clr |_|1 16|_| VCC
_| |_
clk |_|2 15|_| rco
_| |_
din(0) |_|3 14|_| q(0)
_| |_
din(1) |_|4 13|_| q(1)
_| |_
din(2) |_|5 12|_| q(2)
_| |_
din(3) |_|6 11|_| q(3)
_| |_
enp |_|7 10|_| ent
_| |_
GND |_|8 9|_| n_load
|_____________|
*/
module ls163 //synchronous reset/clear
(
input n_clr,
input clk,
input [3:0] din,
input enp, ent,
input n_load,
output [3:0] q,
output rco
);
reg [3:0] data = 4'b0;
always @(posedge clk) begin
if(!n_clr)
data <= 4'd0;
else
if(!n_load)
data <= din;
else if(enp && ent)
data <= data + 4'd1;
end
assign q = data;
assign rco = data[0] & data[1] & data[2] & data[3] & ent;
endmodule
//Chip pinout:
/* _____________
_| |_
a1 |_|1 14|_| VCC
_| |_
b1 |_|2 13|_| c1
_| |_
a2 |_|3 12|_| y1
_| |_
b2 |_|4 11|_| a3
_| |_
c2 |_|5 10|_| b3
_| |_
y2 |_|6 9|_| c3
_| |_
GND |_|7 8|_| y3
|_____________|
*/
module ls10
(
input a1, a2, a3,
input b1, b2, b3,
input c1, c2, c3,
output y1, y2, y3
);
assign y1 = ~(a1 & b1 & c1);
assign y2 = ~(a2 & b2 & c2);
assign y3 = ~(a3 & b3 & c3);
endmodule
//Chip pinout:
/* _____________
_| |_
a1 |_|1 14|_| VCC
_| |_
b1 |_|2 13|_| a4
_| |_
y1 |_|3 12|_| b4
_| |_
a2 |_|4 11|_| y4
_| |_
b2 |_|5 10|_| a3
_| |_
y2 |_|6 9|_| b3
_| |_
GND |_|7 8|_| y3
|_____________|
*/
module ls08
(
input a1, a2, a3, a4,
input b1, b2, b3, b4,
output y1, y2, y3, y4
);
assign y1 = a1 & b1;
assign y2 = a2 & b2;
assign y3 = a3 & b3;
assign y4 = a4 & b4;
endmodule
//Chip pinout:
/* _____________
_| |_
sum(1) |_|1 16|_| VCC
_| |_
b(1) |_|2 15|_| b(2)
_| |_
a(1) |_|3 14|_| a(2)
_| |_
sum(0) |_|4 13|_| sum(2)
_| |_
a(0) |_|5 12|_| a(3)
_| |_
b(0) |_|6 11|_| b(3)
_| |_
c_in |_|7 10|_| sum(3)
_| |_
GND |_|8 9|_| c_out
|_____________|
*/
module ls283
(
input [3:0] a,
input [3:0] b,
input c_in,
output [3:0] sum,
output c_out
);
wire [4:0] sum_int;
assign sum_int = {1'b0, a} + {1'b0, b} + {4'b0000, c_in};
assign sum = sum_int[3:0];
assign c_out = sum_int[4];
endmodule
//Chip pinout:
/* _____________
_| |_
D(3) |_|1 16|_| VCC
_| |_
D(2) |_|2 15|_| D(4)
_| |_
D(1) |_|3 14|_| D(5)
_| |_
D(0) |_|4 13|_| D(6)
_| |_
Y |_|5 12|_| D(7)
_| |_
W |_|6 11|_| A
_| |_
S |_|7 10|_| B
_| |_
GND |_|8 9|_| C
|_____________|
*/
module ls251
(
input [2:0] CBA,
input s,
input [7:0] D,
output reg Y,W
);
always @ (CBA,s)
begin
if (!s) begin
case (CBA)
3'b000: Y=D[0];
3'b001: Y=D[1];
3'b010: Y=D[2];
3'b011: Y=D[3];
3'b100: Y=D[4];
3'b101: Y=D[5];
3'b110: Y=D[6];
3'b111: Y=D[7];
default: Y=1'bZ;
endcase
W <=!Y;
end
else begin
Y <= 1'bZ;
W <= 1'bZ;
end
end
endmodule
module ls259
(
input [2:0] A,
input nE,
input nC,
input D,
output reg [7:0] Q
);
always @ (nE,nC,D,A)
begin
if (!nC && nE) begin
Q[7:0] <= 8'b00000000;
end
else if (!nC && !nE && !D) begin
Q[7:0] <= 8'b00000000;
end
else if (!nC && !nE && D) begin
case (A)
3'b000: Q[7:0]=8'b00000001;
3'b001: Q[7:0]=8'b00000010;
3'b010: Q[7:0]=8'b00000100;
3'b011: Q[7:0]=8'b00001000;
3'b100: Q[7:0]=8'b00010000;
3'b101: Q[7:0]=8'b00100000;
3'b110: Q[7:0]=8'b01000000;
3'b111: Q[7:0]=8'b10000000;
default: Q[7:0]=8'bZZZZZZZZ;
endcase
end
else if (nC && nE) begin
//no change
end
else if (nC && !nE) begin
case (A)
3'b000: Q[0]=D;
3'b001: Q[1]=D;
3'b010: Q[2]=D;
3'b011: Q[3]=D;
3'b100: Q[4]=D;
3'b101: Q[5]=D;
3'b110: Q[6]=D;
3'b111: Q[7]=D;
default: Q[7:0]=8'bZZZZZZZZ;
endcase
end
end
endmodule

108
common/CPU/6502_6510/ALU.v Normal file
View File

@@ -0,0 +1,108 @@
/*
* ALU.
*
* AI and BI are 8 bit inputs. Result in OUT.
* CI is Carry In.
* CO is Carry Out.
*
* op[3:0] is defined as follows:
*
* 0011 AI + BI
* 0111 AI - BI
* 1011 AI + AI
* 1100 AI | BI
* 1101 AI & BI
* 1110 AI ^ BI
* 1111 AI
*
*/
module ALU( clk, op, right, AI, BI, CI, CO, BCD, OUT, V, Z, N, HC, RDY );
input clk;
input right;
input [3:0] op; // operation
input [7:0] AI;
input [7:0] BI;
input CI;
input BCD; // BCD style carry
output [7:0] OUT;
output CO;
output V;
output Z;
output N;
output HC;
input RDY;
reg [7:0] OUT;
reg CO;
wire V;
wire Z;
reg N;
reg HC;
reg AI7;
reg BI7;
reg [8:0] temp_logic;
reg [7:0] temp_BI;
reg [4:0] temp_l;
reg [4:0] temp_h;
wire [8:0] temp = { temp_h, temp_l[3:0] };
wire adder_CI = (right | (op[3:2] == 2'b11)) ? 0 : CI;
// calculate the logic operations. The 'case' can be done in 1 LUT per
// bit. The 'right' shift is a simple mux that can be implemented by
// F5MUX.
always @* begin
case( op[1:0] )
2'b00: temp_logic = AI | BI;
2'b01: temp_logic = AI & BI;
2'b10: temp_logic = AI ^ BI;
2'b11: temp_logic = AI;
endcase
if( right )
temp_logic = { AI[0], CI, AI[7:1] };
end
// Add logic result to BI input. This only makes sense when logic = AI.
// This stage can be done in 1 LUT per bit, using carry chain logic.
always @* begin
case( op[3:2] )
2'b00: temp_BI = BI; // A+B
2'b01: temp_BI = ~BI; // A-B
2'b10: temp_BI = temp_logic; // A+A
2'b11: temp_BI = 0; // A+0
endcase
end
// HC9 is the half carry bit when doing BCD add
wire HC9 = BCD & (temp_l[3:1] >= 3'd5);
// CO9 is the carry-out bit when doing BCD add
wire CO9 = BCD & (temp_h[3:1] >= 3'd5);
// combined half carry bit
wire temp_HC = temp_l[4] | HC9;
// perform the addition as 2 separate nibble, so we get
// access to the half carry flag
always @* begin
temp_l = temp_logic[3:0] + temp_BI[3:0] + adder_CI;
temp_h = temp_logic[8:4] + temp_BI[7:4] + temp_HC;
end
// calculate the flags
always @(posedge clk)
if( RDY ) begin
AI7 <= AI[7];
BI7 <= temp_BI[7];
OUT <= temp[7:0];
CO <= temp[8] | CO9;
N <= temp[7];
HC <= temp_HC;
end
assign V = AI7 ^ BI7 ^ CO ^ N;
assign Z = ~|OUT;
endmodule

1244
common/CPU/6502_6510/cpu.v Normal file

File diff suppressed because it is too large Load Diff