URL
https://opencores.org/ocsvn/t48/t48/trunk
Subversion Repositories t48
Compare Revisions
- This comparison shows the changes necessary to convert path
/t48
- from Rev 304 to Rev 305
- ↔ Reverse comparison
Rev 304 → Rev 305
/trunk/rtl/vhdl/system/t48_system_comp_pack-p.vhd
174,6 → 174,54
); |
end component; |
|
component t8041_notri |
generic ( |
gate_port_input_g : integer := 1 |
); |
|
port ( |
xtal_i : in std_logic; |
xtal_en_i : in std_logic; |
reset_n_i : in std_logic; |
t0_i : in std_logic; |
cs_n_i : in std_logic; |
rd_n_i : in std_logic; |
a0_i : in std_logic; |
wr_n_i : in std_logic; |
sync_o : out std_logic; |
db_i : in std_logic_vector( 7 downto 0); |
db_o : out std_logic_vector( 7 downto 0); |
db_dir_o : out std_logic; |
t1_i : in std_logic; |
p2_i : in std_logic_vector( 7 downto 0); |
p2_o : out std_logic_vector( 7 downto 0); |
p2l_low_imp_o : out std_logic; |
p2h_low_imp_o : out std_logic; |
p1_i : in std_logic_vector( 7 downto 0); |
p1_o : out std_logic_vector( 7 downto 0); |
p1_low_imp_o : out std_logic; |
prog_n_o : out std_logic |
); |
end component; |
|
component t8041 |
port ( |
xtal_i : in std_logic; |
reset_n_i : in std_logic; |
t0_i : in std_logic; |
cs_n_i : in std_logic; |
rd_n_i : in std_logic; |
a0_i : in std_logic; |
wr_n_i : in std_logic; |
sync_o : out std_logic; |
db_b : inout std_logic_vector( 7 downto 0); |
t1_i : in std_logic; |
p2_b : inout std_logic_vector( 7 downto 0); |
p1_b : inout std_logic_vector( 7 downto 0); |
prog_n_o : out std_logic |
); |
end component; |
|
component t8041a_notri |
generic ( |
gate_port_input_g : integer := 1 |
/trunk/rtl/vhdl/system/t8041-c.vhd
0,0 → 1,21
------------------------------------------------------------------------------- |
-- |
-- T8041 Microcontroller System |
-- |
-- Copyright (c) 2004-2022, Arnim Laeuger (arniml@opencores.org) |
-- |
-- All rights reserved |
-- |
------------------------------------------------------------------------------- |
|
configuration t8041_struct_c0 of t8041 is |
|
for struct |
|
for t8041_notri_b : t8041_notri |
use configuration work.t8041_notri_struct_c0; |
end for; |
|
end for; |
|
end t8041_struct_c0; |
/trunk/rtl/vhdl/system/t8041.vhd
0,0 → 1,170
------------------------------------------------------------------------------- |
-- |
-- T8041 Microcontroller System |
-- |
-- Copyright (c) 2004-2022, Arnim Laeuger (arniml@opencores.org) |
-- |
-- All rights reserved |
-- |
-- Redistribution and use in source and synthezised forms, with or without |
-- modification, are permitted provided that the following conditions are met: |
-- |
-- Redistributions of source code must retain the above copyright notice, |
-- this list of conditions and the following disclaimer. |
-- |
-- Redistributions in synthesized form must reproduce the above copyright |
-- notice, this list of conditions and the following disclaimer in the |
-- documentation and/or other materials provided with the distribution. |
-- |
-- Neither the name of the author nor the names of other contributors may |
-- be used to endorse or promote products derived from this software without |
-- specific prior written permission. |
-- |
-- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" |
-- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, |
-- THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR |
-- PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE |
-- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
-- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
-- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
-- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
-- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
-- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
-- POSSIBILITY OF SUCH DAMAGE. |
-- |
-- Please report bugs to the author, but before you do so, please |
-- make sure that this is not a derivative work and that |
-- you have the latest version of this file. |
-- |
-- The latest version of this file can be found at: |
-- http://www.opencores.org/cvsweb.shtml/t48/ |
-- |
------------------------------------------------------------------------------- |
|
library ieee; |
use ieee.std_logic_1164.all; |
|
entity t8041 is |
|
port ( |
xtal_i : in std_logic; |
reset_n_i : in std_logic; |
t0_i : in std_logic; |
cs_n_i : in std_logic; |
rd_n_i : in std_logic; |
a0_i : in std_logic; |
wr_n_i : in std_logic; |
sync_o : out std_logic; |
db_b : inout std_logic_vector( 7 downto 0); |
t1_i : in std_logic; |
p2_b : inout std_logic_vector( 7 downto 0); |
p1_b : inout std_logic_vector( 7 downto 0); |
prog_n_o : out std_logic |
); |
|
end t8041; |
|
|
library ieee; |
use ieee.numeric_std.all; |
|
use work.t48_system_comp_pack.t8041_notri; |
|
architecture struct of t8041 is |
|
signal db_s : std_logic_vector( 7 downto 0); |
signal db_dir_s : std_logic; |
signal p2_s : std_logic_vector( 7 downto 0); |
signal p2l_low_imp_s : std_logic; |
signal p2h_low_imp_s : std_logic; |
signal p1_s : std_logic_vector( 7 downto 0); |
signal p1_low_imp_s : std_logic; |
|
signal vdd_s : std_logic; |
|
begin |
|
vdd_s <= '1'; |
|
t8041_notri_b : t8041_notri |
generic map ( |
-- we don't need explicit gating of input ports |
-- this is done implicitely by the bidirectional pads |
gate_port_input_g => 0 |
) |
|
port map ( |
xtal_i => xtal_i, |
xtal_en_i => vdd_s, |
reset_n_i => reset_n_i, |
t0_i => t0_i, |
cs_n_i => cs_n_i, |
rd_n_i => rd_n_i, |
a0_i => a0_i, |
wr_n_i => wr_n_i, |
sync_o => sync_o, |
db_i => db_b, |
db_o => db_s, |
db_dir_o => db_dir_s, |
t1_i => t1_i, |
p2_i => p2_b, |
p2_o => p2_s, |
p2l_low_imp_o => p2l_low_imp_s, |
p2h_low_imp_o => p2h_low_imp_s, |
p1_i => p1_b, |
p1_o => p1_s, |
p1_low_imp_o => p1_low_imp_s, |
prog_n_o => prog_n_o |
); |
|
----------------------------------------------------------------------------- |
-- Process bidirs |
-- |
-- Purpose: |
-- Assign bidirectional signals. |
-- |
bidirs: process (db_b, db_s, db_dir_s, |
p1_b, p1_s, p1_low_imp_s, |
p2_b, p2_s, p2l_low_imp_s, p2h_low_imp_s) |
|
function port_bidir_f(port_value : in std_logic_vector; |
low_imp : in std_logic) return std_logic_vector is |
variable result_v : std_logic_vector(port_value'range); |
begin |
for idx in port_value'high downto port_value'low loop |
if low_imp = '1' then |
result_v(idx) := port_value(idx); |
elsif port_value(idx) = '0' then |
result_v(idx) := '0'; |
else |
result_v(idx) := 'Z'; |
end if; |
end loop; |
|
return result_v; |
end; |
|
begin |
-- Data Bus --------------------------------------------------------------- |
if db_dir_s = '1' then |
db_b <= db_s; |
else |
db_b <= (others => 'Z'); |
end if; |
|
-- Port 1 ----------------------------------------------------------------- |
p1_b <= port_bidir_f(port_value => p1_s, |
low_imp => p1_low_imp_s); |
|
-- Port 2 ----------------------------------------------------------------- |
p2_b(3 downto 0) <= port_bidir_f(port_value => p2_s(3 downto 0), |
low_imp => p2l_low_imp_s); |
p2_b(7 downto 4) <= port_bidir_f(port_value => p2_s(7 downto 4), |
low_imp => p2h_low_imp_s); |
|
end process bidirs; |
-- |
----------------------------------------------------------------------------- |
|
|
end struct; |
/trunk/rtl/vhdl/system/t8041_notri-c.vhd
0,0 → 1,29
------------------------------------------------------------------------------- |
-- |
-- T8041 Microcontroller System |
-- |
-- Copyright (c) 2004-2022, Arnim Laeuger (arniml@opencores.org) |
-- |
-- All rights reserved |
-- |
------------------------------------------------------------------------------- |
|
configuration t8041_notri_struct_c0 of t8041_notri is |
|
for struct |
|
for rom_1k_b : t48_rom |
use configuration work.t48_rom_lpm_c0; |
end for; |
|
for ram_64_b : generic_ram_ena |
use configuration work.generic_ram_ena_rtl_c0; |
end for; |
|
for upi41a_core_b : upi41_core |
use configuration work.upi41_core_struct_c0; |
end for; |
|
end for; |
|
end t8041_notri_struct_c0; |
/trunk/rtl/vhdl/system/t8041_notri.vhd
0,0 → 1,205
------------------------------------------------------------------------------- |
-- |
-- T8041 Microcontroller System |
-- 8041 toplevel without tri-states |
-- |
-- Copyright (c) 2004-2022, Arnim Laeuger (arniml@opencores.org) |
-- |
-- All rights reserved |
-- |
-- Redistribution and use in source and synthezised forms, with or without |
-- modification, are permitted provided that the following conditions are met: |
-- |
-- Redistributions of source code must retain the above copyright notice, |
-- this list of conditions and the following disclaimer. |
-- |
-- Redistributions in synthesized form must reproduce the above copyright |
-- notice, this list of conditions and the following disclaimer in the |
-- documentation and/or other materials provided with the distribution. |
-- |
-- Neither the name of the author nor the names of other contributors may |
-- be used to endorse or promote products derived from this software without |
-- specific prior written permission. |
-- |
-- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" |
-- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, |
-- THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR |
-- PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE |
-- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
-- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
-- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
-- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
-- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
-- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
-- POSSIBILITY OF SUCH DAMAGE. |
-- |
-- Please report bugs to the author, but before you do so, please |
-- make sure that this is not a derivative work and that |
-- you have the latest version of this file. |
-- |
-- The latest version of this file can be found at: |
-- http://www.opencores.org/cvsweb.shtml/t48/ |
-- |
------------------------------------------------------------------------------- |
|
library ieee; |
use ieee.std_logic_1164.all; |
|
entity t8041_notri is |
|
generic ( |
gate_port_input_g : integer := 1 |
); |
|
port ( |
xtal_i : in std_logic; |
xtal_en_i : in std_logic; |
reset_n_i : in std_logic; |
t0_i : in std_logic; |
cs_n_i : in std_logic; |
rd_n_i : in std_logic; |
a0_i : in std_logic; |
wr_n_i : in std_logic; |
sync_o : out std_logic; |
db_i : in std_logic_vector( 7 downto 0); |
db_o : out std_logic_vector( 7 downto 0); |
db_dir_o : out std_logic; |
t1_i : in std_logic; |
p2_i : in std_logic_vector( 7 downto 0); |
p2_o : out std_logic_vector( 7 downto 0); |
p2l_low_imp_o : out std_logic; |
p2h_low_imp_o : out std_logic; |
p1_i : in std_logic_vector( 7 downto 0); |
p1_o : out std_logic_vector( 7 downto 0); |
p1_low_imp_o : out std_logic; |
prog_n_o : out std_logic |
); |
|
end t8041_notri; |
|
|
library ieee; |
use ieee.numeric_std.all; |
|
use work.t48_core_comp_pack.upi41_core; |
use work.t48_core_comp_pack.t48_rom; |
use work.t48_core_comp_pack.generic_ram_ena; |
|
architecture struct of t8041_notri is |
|
-- Address width of internal ROM |
constant rom_addr_width_c : natural := 10; |
|
signal xtal3_s : std_logic; |
signal dmem_addr_s : std_logic_vector( 7 downto 0); |
signal dmem_we_s : std_logic; |
signal dmem_data_from_s : std_logic_vector( 7 downto 0); |
signal dmem_data_to_s : std_logic_vector( 7 downto 0); |
signal pmem_addr_s : std_logic_vector(10 downto 0); |
signal pmem_data_s : std_logic_vector( 7 downto 0); |
|
signal p1_in_s, |
p1_out_s : std_logic_vector( 7 downto 0); |
signal p2_in_s, |
p2_out_s : std_logic_vector( 7 downto 0); |
|
signal vdd_s : std_logic; |
|
begin |
|
vdd_s <= '1'; |
|
----------------------------------------------------------------------------- |
-- Check generics for valid values. |
----------------------------------------------------------------------------- |
-- pragma translate_off |
assert gate_port_input_g = 0 or gate_port_input_g = 1 |
report "gate_port_input_g must be either 1 or 0!" |
severity failure; |
-- pragma translate_on |
|
|
upi41a_core_b : upi41_core |
generic map ( |
xtal_div_3_g => 1, |
register_mnemonic_g => 1, |
include_port1_g => 1, |
include_port2_g => 1, |
include_timer_g => 1, |
sample_t1_state_g => 4, |
is_upi_type_a_g => 0 |
) |
|
port map ( |
xtal_i => xtal_i, |
xtal_en_i => xtal_en_i, |
reset_i => reset_n_i, |
t0_i => t0_i, |
cs_n_i => cs_n_i, |
rd_n_i => rd_n_i, |
a0_i => a0_i, |
wr_n_i => wr_n_i, |
sync_o => sync_o, |
db_i => db_i, |
db_o => db_o, |
db_dir_o => db_dir_o, |
t1_i => t1_i, |
p2_i => p2_in_s, |
p2_o => p2_out_s, |
p2l_low_imp_o => p2l_low_imp_o, |
p2h_low_imp_o => p2h_low_imp_o, |
p1_i => p1_in_s, |
p1_o => p1_out_s, |
p1_low_imp_o => p1_low_imp_o, |
prog_n_o => prog_n_o, |
clk_i => xtal_i, |
en_clk_i => xtal3_s, |
xtal3_o => xtal3_s, |
dmem_addr_o => dmem_addr_s, |
dmem_we_o => dmem_we_s, |
dmem_data_i => dmem_data_from_s, |
dmem_data_o => dmem_data_to_s, |
pmem_addr_o => pmem_addr_s, |
pmem_data_i => pmem_data_s |
); |
|
|
----------------------------------------------------------------------------- |
-- Gate port 1 and 2 input bus with respetive output value |
----------------------------------------------------------------------------- |
gate_ports: if gate_port_input_g = 1 generate |
p1_in_s <= p1_i and p1_out_s; |
p2_in_s <= p2_i and p2_out_s; |
end generate; |
|
pass_ports: if gate_port_input_g = 0 generate |
p1_in_s <= p1_i; |
p2_in_s <= p2_i; |
end generate; |
|
p1_o <= p1_out_s; |
p2_o <= p2_out_s; |
|
|
rom_1k_b : t48_rom |
port map ( |
clk_i => xtal_i, |
rom_addr_i => pmem_addr_s(rom_addr_width_c-1 downto 0), |
rom_data_o => pmem_data_s |
); |
|
ram_64_b : generic_ram_ena |
generic map ( |
addr_width_g => 6, |
data_width_g => 8 |
) |
port map ( |
clk_i => xtal_i, |
a_i => dmem_addr_s(5 downto 0), |
we_i => dmem_we_s, |
ena_i => vdd_s, |
d_i => dmem_data_to_s, |
d_o => dmem_data_from_s |
); |
|
end struct; |