OpenCores
URL https://opencores.org/ocsvn/open8_urisc/open8_urisc/trunk

Subversion Repositories open8_urisc

Compare Revisions

  • This comparison shows the changes necessary to convert path
    /open8_urisc/trunk/VHDL
    from Rev 223 to Rev 224
    Reverse comparison

Rev 223 → Rev 224

/Open8_pkg.vhd
77,12 → 77,18
constant OPEN8_NULLBUS : DATA_TYPE := x"00";
 
type OPEN8_BUS_TYPE is record
Clock : std_logic;
Reset : std_logic;
uSec_Tick : std_logic;
Address : ADDRESS_TYPE;
Wr_En : std_logic;
Wr_Data : DATA_TYPE;
Rd_En : std_logic;
GP_Flags : EXT_GP_FLAGS;
end record;
 
constant Reset_Level : std_logic := '1';
 
-- Component declaration
-- (assumes a 1K RAM at 0x0000 and ROM at the top of the memory map)
component o8_cpu is
97,15 → 103,15
Enable_NMI : boolean := true;
RTI_Ignores_GP_Flags : boolean := false;
Default_Interrupt_Mask : DATA_TYPE := x"FF";
Reset_Level : std_logic := '0' );
Clock_Frequency : real
);
port(
Clock : in std_logic;
Reset : in std_logic;
CPU_Halt : in std_logic;
GP_Flags : out EXT_GP_FLAGS;
PLL_Locked : in std_logic;
CPU_Halt : in std_logic := '0';
Open8_Bus : out OPEN8_BUS_TYPE;
Rd_Data : in DATA_TYPE;
Interrupts : in INTERRUPT_BUNDLE
Interrupts : in INTERRUPT_BUNDLE := x"00"
);
end component;
 
/o8_alu16.vhd
155,6 → 155,7
-- Seth Henry 03/13/15 Added "Almost Equal" instruction
-- Seth Henry 12/19/19 Renamed to o8_alu16 to fit "theme"
-- Seth Henry 04/10/20 Comment and code cleanup
-- Seth Henry 04/16/20 Modified to use Open8 bus record
 
library ieee;
use ieee.std_logic_1164.all;
167,13 → 168,9
 
entity o8_alu16 is
generic(
Reset_Level : std_logic;
Address : ADDRESS_TYPE
);
port(
Clock : in std_logic;
Reset : in std_logic;
--
Open8_Bus : in OPEN8_BUS_TYPE;
Rd_Data : out DATA_TYPE;
Interrupt : out std_logic
182,6 → 179,9
 
architecture behave of o8_alu16 is
 
alias Clock is Open8_Bus.Clock;
alias Reset is Open8_Bus.Reset;
 
-------------------------------------------------------------------
-- Opcode Definitions (should match the table above)
-- Register Manipulation
/o8_async_serial.vhd
46,6 → 46,7
------------------ -------- ---------------------------------------------------
-- Seth Henry 12/20/19 Design Start
-- Seth Henry 04/10/20 Code cleanup and register documentation
-- Seth Henry 04/16/20 Modified to use Open8 bus record
 
library ieee;
use ieee.std_logic_1164.all;
63,14 → 64,10
Bit_Rate : real;
Enable_Parity : boolean;
Parity_Odd_Even_n : std_logic;
Sys_Freq : real;
Reset_Level : std_logic;
Clock_Frequency : real;
Address : ADDRESS_TYPE
);
port(
Clock : in std_logic;
Reset : in std_logic;
--
Open8_Bus : in OPEN8_BUS_TYPE;
Rd_Data : out DATA_TYPE;
--
83,6 → 80,10
 
architecture behave of o8_async_serial is
 
alias Clock is Open8_Bus.Clock;
alias Reset is Open8_Bus.Reset;
alias uSec_Tick is Open8_Bus.uSec_Tick;
 
signal FIFO_Reset : std_logic := '0';
 
constant User_Addr : std_logic_vector(15 downto 1) :=
109,7 → 110,7
signal TX_Xmit : std_logic := '0';
signal TX_Done : std_logic := '0';
 
constant BAUD_RATE_DIV : integer := integer(Sys_Freq / Bit_Rate);
constant BAUD_RATE_DIV : integer := integer(Clock_Frequency / Bit_Rate);
 
signal CTS_sr : std_logic_vector(3 downto 0) := "0000";
alias CTS_Okay is CTS_sr(3);
/o8_btn_int.vhd
33,6 → 33,7
-- Author Date Change
------------------ -------- ---------------------------------------------------
-- Seth Henry 01/22/20 Re-write of original with separate debouncer
-- Seth Henry 04/16/20 Modified to use Open8 bus record
 
library ieee;
use ieee.std_logic_1164.all;
47,14 → 48,9
generic(
Num_Buttons : integer range 1 to 8 := 8;
Button_Level : std_logic := '0';
Address : ADDRESS_TYPE := x"0000";
Reset_Level : std_logic := '1'
Address : ADDRESS_TYPE := x"0000"
);
port(
Clock : in std_logic := '0';
Reset : in std_logic := '0';
uSec_Tick : in std_logic := '0';
--
Open8_Bus : in OPEN8_BUS_TYPE;
Rd_Data : out DATA_TYPE;
Interrupt : out std_logic;
65,6 → 61,10
 
architecture behave of o8_btn_int is
 
alias Clock is Open8_Bus.Clock;
alias Reset is Open8_Bus.Reset;
alias uSec_Tick is Open8_Bus.uSec_Tick;
 
constant User_Addr : std_logic_vector(15 downto 0) := Address;
alias Comp_Addr is Open8_Bus.Address(15 downto 0);
signal Addr_Match : std_logic := '0';
/o8_clk_detect.vhd
29,6 → 29,11
-- 0x00 BA------ Recieve Clock Status (RO)
-- A = Clock Line State (follows input)
-- B = Clock Detect (1 = transition detected)
--
-- Revision History
-- Author Date Change
------------------ -------- ---------------------------------------------------
-- Seth Henry 04/16/20 Revision block added
 
library ieee;
use ieee.std_logic_1164.all;
42,13 → 47,9
entity o8_clk_detect is
generic(
Threshold_Count : integer;
Address : ADDRESS_TYPE;
Reset_Level : std_logic
Address : ADDRESS_TYPE
);
port(
Clock : in std_logic;
Reset : in std_logic;
--
Ref_Clk_In : in std_logic;
--
Open8_Bus : in OPEN8_BUS_TYPE;
59,6 → 60,9
 
architecture behave of o8_clk_detect is
 
alias Clock is Open8_Bus.Clock;
alias Reset is Open8_Bus.Reset;
 
constant User_Addr : std_logic_vector(15 downto 0) := Address;
alias Comp_Addr is Open8_Bus.Address(15 downto 0);
signal Addr_Match : std_logic := '0';
/o8_cpu.vhd
202,6 → 202,8
-- the I bit.
-- Also added the I bit to the exported flags for
-- use in memory protection schemes.
-- Seth Henry 04/16/20 Modified to use new Open8 bus record. Also added
-- reset and usec_tick logic to drive utility signals
 
library ieee;
use ieee.std_logic_1164.all;
223,14 → 225,14
BRK_Implements_WAI : boolean := false; -- BRK -> Wait for Int
Enable_NMI : boolean := true; -- Force INTR0 enabled
Sequential_Interrupts : boolean := false; -- Interruptable ISRs
RTI_Ignores_GP_Flags : boolean := false; -- RTI restores all flags
RTI_Ignores_GP_Flags : boolean := false; -- RTI sets all flags
Default_Interrupt_Mask : DATA_TYPE := x"FF"; -- Enable all Ints
Reset_Level : std_logic := '0' ); -- Active reset level
Clock_Frequency : real -- Clock Frequency
);
port(
Clock : in std_logic;
Reset : in std_logic;
PLL_Locked : in std_logic;
CPU_Halt : in std_logic := '0';
GP_Flags : out EXT_GP_FLAGS;
--
Open8_Bus : out OPEN8_BUS_TYPE;
Rd_Data : in DATA_TYPE;
240,6 → 242,16
 
architecture behave of o8_cpu is
 
signal Reset_q : std_logic := Reset_Level;
signal Reset : std_logic := Reset_Level;
 
constant USEC_VAL : integer := integer(Clock_Frequency / 1000000.0);
constant USEC_WDT : integer := ceil_log2(USEC_VAL - 1);
constant USEC_DLY : std_logic_vector :=
conv_std_logic_vector(USEC_VAL - 1, USEC_WDT);
signal uSec_Cntr : std_logic_vector( USEC_WDT - 1 downto 0 );
signal uSec_Tick : std_logic;
 
constant INT_VECTOR_0 : ADDRESS_TYPE := ISR_Start_Addr;
constant INT_VECTOR_1 : ADDRESS_TYPE := ISR_Start_Addr+2;
constant INT_VECTOR_2 : ADDRESS_TYPE := ISR_Start_Addr+4;
289,7 → 301,39
 
begin
 
-------------------------------------------------------------------------------
-- Reset & uSec Tick
-------------------------------------------------------------------------------
 
CPU_Reset_Sync: process( Clock, PLL_Locked )
begin
if( PLL_Locked = '0' )then
Reset_q <= Reset_Level;
Reset <= Reset_Level;
elsif( rising_edge(Clock) )then
Reset_q <= not Reset_Level;
Reset <= Reset_q;
end if;
end process;
 
uSec_Tick_proc: process( Clock, Reset )
begin
if( Reset = Reset_Level )then
uSec_Cntr <= USEC_DLY;
uSec_Tick <= '0';
elsif( rising_edge( Clock ) )then
uSec_Cntr <= uSec_Cntr - 1;
if( or_reduce(uSec_Cntr) = '0' )then
uSec_Cntr <= USEC_DLY;
end if;
uSec_Tick <= nor_reduce(uSec_Cntr);
end if;
end process;
 
Open8_Bus.Clock <= Clock;
Open8_Bus.Reset <= Reset;
Open8_Bus.uSec_Tick <= uSec_Tick;
 
-------------------------------------------------------------------------------
-- Address bus selection/generation logic
-------------------------------------------------------------------------------
916,7 → 960,7
end loop;
Flags <= x"00";
 
GP_Flags <= (others => '0');
Open8_Bus.GP_Flags <= (others => '0');
 
elsif( rising_edge(Clock) )then
 
1253,7 → 1297,7
null;
end case;
 
GP_Flags <= Flags(7 downto 3);
Open8_Bus.GP_Flags <= Flags(7 downto 3);
 
end if;
end process;
/o8_crc16_ccitt.vhd
41,6 → 41,7
-- Author Date Change
------------------ -------- ---------------------------------------------------
-- Seth Henry 12/19/19 Design Start
-- Seth Henry 04/16/20 Modified to use Open8 bus record
 
library ieee;
use ieee.std_logic_1164.all;
51,13 → 52,9
 
entity o8_crc16_ccitt is
generic(
Reset_Level : std_logic := '1';
Address : ADDRESS_TYPE
);
port(
Clock : in std_logic;
Reset : in std_logic;
--
Open8_Bus : in OPEN8_BUS_TYPE;
Rd_Data : out DATA_TYPE
);
65,6 → 62,9
 
architecture behave of o8_crc16_ccitt is
 
alias Clock is Open8_Bus.Clock;
alias Reset is Open8_Bus.Reset;
 
constant Poly_Init : std_logic_vector(15 downto 0) :=
(others => '0');
 
/o8_datalatch.vhd
36,6 → 36,7
-- Author Date Change
------------------ -------- ---------------------------------------------------
-- Seth Henry 01/22/20 Design Start
-- Seth Henry 04/16/20 Modified to use Open8 bus record
 
library ieee;
use ieee.std_logic_1164.all;
45,13 → 46,9
 
entity o8_datalatch is
generic(
Reset_Level : std_logic;
Address : ADDRESS_TYPE
);
port(
Clock : in std_logic;
Reset : in std_logic;
--
Open8_Bus : in OPEN8_BUS_TYPE;
Rd_Data : out DATA_TYPE;
Interrupt : out std_logic;
63,6 → 60,9
 
architecture behave of o8_datalatch is
 
alias Clock is Open8_Bus.Clock;
alias Reset is Open8_Bus.Reset;
 
constant User_Addr : std_logic_vector(15 downto 0) := Address;
alias Comp_Addr is Open8_Bus.Address(15 downto 0);
signal Addr_Match : std_logic;
/o8_epoch_timer.vhd
53,6 → 53,7
-- Seth Henry 12/19/19 Renamed to "o8_epoch_timer" to fit "theme"
-- Seth Henry 04/10/20 Overhauled the register interface of the timer to
-- make the interface more sensible to software.
-- Seth Henry 04/160/20 Modified to make use of Open8 bus record
 
library ieee;
use ieee.std_logic_1164.all;
65,14 → 66,9
 
entity o8_epoch_timer is
generic(
Reset_Level : std_logic;
Address : ADDRESS_TYPE
);
port(
Clock : in std_logic;
Reset : in std_logic;
uSec_Tick : in std_logic;
--
Open8_Bus : in OPEN8_BUS_TYPE;
Rd_Data : out DATA_TYPE;
Interrupt : out std_logic
81,6 → 77,10
 
architecture behave of o8_epoch_timer is
 
alias Clock is Open8_Bus.Clock;
alias Reset is Open8_Bus.Reset;
alias uSec_Tick is Open8_Bus.uSec_Tick;
 
constant User_Addr : std_logic_vector(15 downto 3)
:= Address(15 downto 3);
 
/o8_epoch_timer_ii.vhd
59,6 → 59,7
------------------ -------- ---------------------------------------------------
-- Seth Henry 04/15/20 Created from o8_epoch_timer due to requirement
-- change.
-- Seth Henry 04/16/20 Modifiefd to make use of Open8 bus record
 
library ieee;
use ieee.std_logic_1164.all;
71,14 → 72,9
 
entity o8_epoch_timer_ii is
generic(
Reset_Level : std_logic;
Address : ADDRESS_TYPE
);
port(
Clock : in std_logic;
Reset : in std_logic;
uSec_Tick : in std_logic;
--
Open8_Bus : in OPEN8_BUS_TYPE;
Rd_Data : out DATA_TYPE;
Interrupt : out std_logic
87,6 → 83,10
 
architecture behave of o8_epoch_timer_ii is
 
alias Clock is Open8_Bus.Clock;
alias Reset is Open8_Bus.Reset;
alias uSec_Tick is Open8_Bus.uSec_Tick;
 
constant User_Addr : std_logic_vector(15 downto 4)
:= Address(15 downto 4);
 
/o8_gpin.vhd
33,6 → 33,7
-- Seth Henry 12/19/19 Renamed to "o8_gpin" to fit "theme"
-- Seth Henry 12/20/19 Added metastability registers
-- Seth Henry 04/10/20 Code Cleanup
-- Seth Henry 04/16/20 Modified to make use of Open8 bus record
 
library ieee;
use ieee.std_logic_1164.all;
42,13 → 43,9
 
entity o8_gpin is
generic(
Reset_Level : std_logic;
Address : ADDRESS_TYPE
);
port(
Clock : in std_logic;
Reset : in std_logic;
--
Open8_Bus : in OPEN8_BUS_TYPE;
Rd_Data : out DATA_TYPE;
--
57,6 → 54,8
end entity;
 
architecture behave of o8_gpin is
alias Clock is Open8_Bus.Clock;
alias Reset is Open8_Bus.Reset;
 
constant User_Addr : std_logic_vector(15 downto 0) := Address;
alias Comp_Addr is Open8_Bus.Address(15 downto 0);
/o8_gpio.vhd
37,6 → 37,7
-- Seth Henry 04/10/20 Code cleanup and register documentation
-- Also removed "input only" generic, as there is a
-- separate module for that
-- Seth Henry 04/16/20 Modified to make use of Open8 bus record
 
library ieee;
use ieee.std_logic_1164.all;
48,13 → 49,9
generic(
Default_Out : DATA_TYPE := x"00";
Default_En : DATA_TYPE := x"00";
Reset_Level : std_logic := '1';
Address : ADDRESS_TYPE
);
port(
Clock : in std_logic;
Reset : in std_logic;
--
Open8_Bus : in OPEN8_BUS_TYPE;
Rd_Data : out DATA_TYPE;
--
64,6 → 61,9
 
architecture behave of o8_gpio is
 
alias Clock is Open8_Bus.Clock;
alias Reset is Open8_Bus.Reset;
 
constant User_Addr : std_logic_vector(15 downto 2)
:= Address(15 downto 2);
alias Comp_Addr is Open8_Bus.Address(15 downto 2);
/o8_gpout.vhd
39,6 → 39,7
-- Seth Henry 07/28/11 Design Start
-- Seth Henry 12/19/19 Renamed to "o8_gpout" to fit "theme"
-- Seth Henry 04/10/20 Code Cleanup and comments
-- Seth Henry 04/16/20 Modified to make use of Open8 bus record
 
library ieee;
use ieee.std_logic_1164.all;
48,76 → 49,75
 
entity o8_gpout is
generic(
Default_Out : DATA_TYPE := x"00";
Default_En : DATA_TYPE := x"00";
Disable_Tristate : boolean := false;
Reset_Level : std_logic;
Address : ADDRESS_TYPE
Default_Out : DATA_TYPE := x"00";
Default_En : DATA_TYPE := x"00";
Disable_Tristate : boolean := false;
Address : ADDRESS_TYPE
);
port(
Clock : in std_logic;
Reset : in std_logic;
Open8_Bus : in OPEN8_BUS_TYPE;
Rd_Data : out DATA_TYPE;
--
Open8_Bus : in OPEN8_BUS_TYPE;
Rd_Data : out DATA_TYPE;
--
GPO : out DATA_TYPE
GPO : out DATA_TYPE
);
end entity;
 
architecture behave of o8_gpout is
 
constant User_Addr : std_logic_vector(15 downto 1)
:= Address(15 downto 1);
alias Comp_Addr is Open8_Bus.Address(15 downto 1);
alias Reg_Addr is Open8_Bus.Address(0);
signal Reg_Sel : std_logic := '0';
signal Addr_Match : std_logic := '0';
signal Wr_En : std_logic := '0';
signal Wr_Data_q : DATA_TYPE := x"00";
signal Rd_En : std_logic := '0';
alias Clock is Open8_Bus.Clock;
alias Reset is Open8_Bus.Reset;
 
signal User_Out : DATA_TYPE := x"00";
signal User_En : DATA_TYPE := x"00";
constant User_Addr : std_logic_vector(15 downto 1)
:= Address(15 downto 1);
alias Comp_Addr is Open8_Bus.Address(15 downto 1);
alias Reg_Addr is Open8_Bus.Address(0);
signal Reg_Sel : std_logic := '0';
signal Addr_Match : std_logic := '0';
signal Wr_En : std_logic := '0';
signal Wr_Data_q : DATA_TYPE := x"00";
signal Rd_En : std_logic := '0';
 
signal User_Out : DATA_TYPE := x"00";
signal User_En : DATA_TYPE := x"00";
 
begin
 
Addr_Match <= '1' when Comp_Addr = User_Addr else '0';
Addr_Match <= '1' when Comp_Addr = User_Addr else '0';
 
io_reg: process( Clock, Reset )
begin
if( Reset = Reset_Level )then
Reg_Sel <= '0';
Wr_En <= '0';
Wr_Data_q <= x"00";
Rd_En <= '0';
Rd_Data <= OPEN8_NULLBUS;
User_Out <= Default_Out;
Reg_Sel <= '0';
Wr_En <= '0';
Wr_Data_q <= x"00";
Rd_En <= '0';
Rd_Data <= OPEN8_NULLBUS;
User_Out <= Default_Out;
if( not Disable_Tristate)then
User_En <= Default_En;
User_En <= Default_En;
end if;
elsif( rising_edge( Clock ) )then
Reg_Sel <= Reg_Addr;
Wr_En <= Addr_Match and Open8_Bus.Wr_En;
Wr_Data_q <= Open8_Bus.Wr_Data;
Reg_Sel <= Reg_Addr;
Wr_En <= Addr_Match and Open8_Bus.Wr_En;
Wr_Data_q <= Open8_Bus.Wr_Data;
if( Wr_En = '1' )then
if( Disable_Tristate )then
User_Out <= Wr_Data_q;
User_Out <= Wr_Data_q;
else
if( Reg_Sel = '0' )then
User_Out <= Wr_Data_q;
User_Out <= Wr_Data_q;
else
User_En <= Wr_Data_q;
User_En <= Wr_Data_q;
end if;
end if;
end if;
 
Rd_Data <= OPEN8_NULLBUS;
Rd_En <= Addr_Match and Open8_Bus.Rd_En;
Rd_Data <= OPEN8_NULLBUS;
Rd_En <= Addr_Match and Open8_Bus.Rd_En;
if( Rd_En = '1' )then
Rd_Data <= User_Out;
Rd_Data <= User_Out;
if( (Reg_Sel = '1') and (not Disable_Tristate) )then
Rd_Data <= User_En;
Rd_Data <= User_En;
end if;
end if;
end if;
124,7 → 124,7
end process;
 
No_Tristates: if( Disable_Tristate )generate
GPO <= User_Out;
GPO <= User_Out;
end generate;
 
Tristates: if( not Disable_Tristate )generate
132,9 → 132,9
Output_Ctl_proc: process( User_Out, User_En )
begin
for i in 0 to 7 loop
GPO(i) <= 'Z';
GPO(i) <= 'Z';
if( User_En(i) = '1' )then
GPO(i) <= User_Out(i);
GPO(i) <= User_Out(i);
end if;
end loop;
end process;
/o8_hd44780_4b.vhd
72,6 → 72,7
------------------ -------- ---------------------------------------------------
-- Seth Henry 01/22/13 Design Start
-- Seth Henry 04/10/20 Code & comment cleanup
-- Seth Henry 04/16/20 Modified to use Open8 bus record
 
library ieee;
use ieee.std_logic_1164.all;
87,16 → 88,10
Default_Contrast : std_logic_vector(7 downto 0);
Use_Backlight : boolean;
Default_Brightness : std_logic_vector(7 downto 0);
Address : ADDRESS_TYPE;
Reset_Level : std_logic;
Sys_Freq : real
Clock_Frequency : real;
Address : ADDRESS_TYPE
);
port(
Clock : in std_logic;
Reset : in std_logic;
--
uSec_Tick : in std_logic;
--
Open8_Bus : in OPEN8_BUS_TYPE;
Rd_Data : out DATA_TYPE;
Interrupt : out std_logic;
112,6 → 107,10
 
architecture behave of o8_hd44780_4b is
 
alias Clock is Open8_Bus.Clock;
alias Reset is Open8_Bus.Reset;
alias uSec_Tick is Open8_Bus.uSec_Tick;
 
constant User_Addr : std_logic_vector(15 downto 2)
:= Address(15 downto 2);
alias Comp_Addr is Open8_Bus.Address(15 downto 2);
159,7 → 158,7
 
signal busy_timer : std_logic_vector(INIT_BITS-1 downto 0);
 
constant SNH_600NS : integer := integer(Sys_Freq * 0.000000600);
constant SNH_600NS : integer := integer(Clock_Frequency * 0.000000600);
constant SNH_BITS : integer := ceil_log2(SNH_600NS);
constant SNH_DELAY : std_logic_vector(SNH_BITS-1 downto 0) :=
conv_std_logic_vector(SNH_600NS-1, SNH_BITS);
/o8_hd44780_8b.vhd
72,6 → 72,7
------------------ -------- ---------------------------------------------------
-- Seth Henry 01/22/13 Design Start
-- Seth Henry 04/10/20 Code & comment cleanup
-- Seth Henry 04/16/20 Modified to use Open8 bus record
 
library ieee;
use ieee.std_logic_1164.all;
87,15 → 88,10
Default_Contrast : std_logic_vector(7 downto 0);
Use_Backlight : boolean;
Default_Brightness : std_logic_vector(7 downto 0);
Address : ADDRESS_TYPE;
Reset_Level : std_logic;
Sys_Freq : real
Clock_Frequency : real;
Address : ADDRESS_TYPE
);
port(
Clock : in std_logic;
Reset : in std_logic;
uSec_Tick : in std_logic;
--
Open8_Bus : in OPEN8_BUS_TYPE;
Rd_Data : out DATA_TYPE;
Interrupt : out std_logic;
111,6 → 107,10
 
architecture behave of o8_hd44780_8b is
 
alias Clock is Open8_Bus.Clock;
alias Reset is Open8_Bus.Reset;
alias uSec_Tick is Open8_Bus.uSec_Tick;
 
constant User_Addr : std_logic_vector(15 downto 2)
:= Address(15 downto 2);
alias Comp_Addr is Open8_Bus.Address(15 downto 2);
157,7 → 157,7
 
signal busy_timer : std_logic_vector(INIT_BITS-1 downto 0) := (others => '0');
 
constant SNH_600NS : integer := integer(Sys_Freq * 0.000000600);
constant SNH_600NS : integer := integer(Clock_Frequency * 0.000000600);
constant SNH_BITS : integer := ceil_log2(SNH_600NS);
constant SNH_DELAY : std_logic_vector(SNH_BITS-1 downto 0) :=
conv_std_logic_vector(SNH_600NS-1, SNH_BITS);
/o8_lfsr32.vhd
33,6 → 33,7
------------------ -------- ---------------------------------------------------
-- Seth Henry 04/25/18 Design Start
-- Seth Henry 04/10/20 Code cleanup and comments
-- Seth Henry 04/16/20 Modified to use Open8 bus record
 
library ieee;
use ieee.std_logic_1164.all;
44,13 → 45,9
entity o8_lfsr32 is
generic(
Init_Seed : std_logic_vector(31 downto 0) := x"CAFEBABE";
Reset_Level : std_logic;
Address : ADDRESS_TYPE
);
port(
Clock : in std_logic;
Reset : in std_logic;
--
Open8_Bus : in OPEN8_BUS_TYPE;
Rd_Data : out DATA_TYPE
);
58,6 → 55,9
 
architecture behave of o8_lfsr32 is
 
alias Clock is Open8_Bus.Clock;
alias Reset is Open8_Bus.Reset;
 
constant User_Addr : std_logic_vector(15 downto 1)
:= Address(15 downto 1);
alias Comp_Addr is Open8_Bus.Address(15 downto 1);
/o8_ltc2355_2p.vhd
30,6 → 30,14
-- Notes : Depends on the fact that the two LTC2355 converters are wired
-- : with their SCLK and CONV lines tied together, and DATA1 and
-- : DATA2 independently routed to separate I/O pins.
--
-- : Works best when the clock frequency is 96MHz or lower. Module
-- : will divide the clock by 2 if it is greater than this.
--
-- Revision History
-- Author Date Change
------------------ -------- ---------------------------------------------------
-- Seth Henry 04/16/20 Revision block added
 
library ieee;
use ieee.std_logic_1164.all;
42,15 → 50,10
 
entity o8_ltc2355_2p is
generic(
Address : ADDRESS_TYPE;
Reset_Level : std_logic;
Sys_Freq : real
Clock_Frequency : real;
Address : ADDRESS_TYPE
);
port(
Clock : in std_logic; -- 96MHz MAX for proper operation
Reset : in std_logic;
uSec_Tick : in std_logic;
--
Open8_Bus : in OPEN8_BUS_TYPE;
Rd_Data : out DATA_TYPE;
Interrupt : out std_logic;
64,8 → 67,12
 
architecture behave of o8_ltc2355_2p is
 
constant Divide_SCLK_by_2 : boolean := (Sys_Freq > 96000000.0);
alias Clock is Open8_Bus.Clock;
alias Reset is Open8_Bus.Reset;
alias uSec_Tick is Open8_Bus.uSec_Tick;
 
constant Divide_SCLK_by_2 : boolean := (Clock_Frequency > 96000000.0);
 
constant User_Addr : std_logic_vector(15 downto 3) := Address(15 downto 3);
alias Comp_Addr is Open8_Bus.Address(15 downto 3);
alias Reg_Sel is Open8_Bus.Address(2 downto 0);
/o8_max7221.vhd
29,6 → 29,7
-- Author Date Change
------------------ -------- ---------------------------------------------------
-- Seth Henry 01/22/20 Design Start
-- Seth Henry 04/16/20 Modified to use Open8 bus record
 
library ieee;
use ieee.std_logic_1164.all;
41,15 → 42,11
 
entity o8_max7221 is
generic(
Bit_Rate : real := 5000000.0;
Sys_Freq : real;
Reset_Level : std_logic;
Bitclock_Frequency : real := 5000000.0;
Clock_Frequency : real;
Address : ADDRESS_TYPE
);
port(
Clock : in std_logic;
Reset : in std_logic;
--
Open8_Bus : in OPEN8_BUS_TYPE;
--
Mx_Data : out std_logic;
60,6 → 57,9
 
architecture behave of o8_max7221 is
 
alias Clock is Open8_Bus.Clock;
alias Reset is Open8_Bus.Reset;
 
signal FIFO_Reset : std_logic;
 
constant User_Addr : std_logic_vector(15 downto 4) :=
79,7 → 79,8
signal TX_En : std_logic;
signal TX_Idle : std_logic;
 
constant BAUD_DLY_VAL : integer := integer((Sys_Freq / Bit_Rate)/ 2.0);
constant BAUD_DLY_RATIO : real := (Clock_Frequency / Bitclock_Frequency);
constant BAUD_DLY_VAL : integer := integer(BAUD_DLY_RATIO * 0.5);
constant BAUD_DLY_WDT : integer := ceil_log2(BAUD_DLY_VAL - 1);
constant BAUD_DLY : std_logic_vector :=
conv_std_logic_vector(BAUD_DLY_VAL - 1, BAUD_DLY_WDT);
/o8_pwm16.vhd
40,6 → 40,7
------------------ -------- ---------------------------------------------------
-- Seth Henry 04/25/18 Design Start
-- Seth Henry 04/10/20 Code cleanup and comments
-- Seth Henry 04/16/20 Modified to use Open8 bus record
 
library ieee;
use ieee.std_logic_1164.all;
51,14 → 52,9
 
entity o8_pwm16 is
generic(
Reset_Level : std_logic;
Address : ADDRESS_TYPE
);
port(
Clock : in std_logic;
Reset : in std_logic;
uSec_Tick : in std_logic;
--
Open8_Bus : in OPEN8_BUS_TYPE;
Rd_Data : out DATA_TYPE;
Interrupt : out std_logic;
69,6 → 65,10
 
architecture behave of o8_pwm16 is
 
alias Clock is Open8_Bus.Clock;
alias Reset is Open8_Bus.Reset;
alias uSec_Tick is Open8_Bus.uSec_Tick;
 
constant User_Addr : std_logic_vector(15 downto 3) :=
Address(15 downto 3);
 
/o8_ram_1k.vhd
23,6 → 23,11
--
-- VHDL Units : o8_ram_1k
-- Description: Provides a wrapper layer for a 1kx8 RAM model
--
-- Revision History
-- Author Date Change
------------------ -------- ---------------------------------------------------
-- Seth Henry 04/16/20 Revision block added
 
library ieee;
use ieee.std_logic_1164.all;
34,13 → 39,9
 
entity o8_ram_1k is
generic(
Reset_Level : std_logic;
Address : ADDRESS_TYPE
);
port(
Clock : in std_logic;
Reset : in std_logic;
--
Open8_Bus : in OPEN8_BUS_TYPE;
Rd_Data : out DATA_TYPE
);
48,6 → 49,9
 
architecture behave of o8_ram_1k is
 
alias Clock is Open8_Bus.Clock;
alias Reset is Open8_Bus.Reset;
 
constant User_Addr : std_logic_vector(15 downto 10)
:= Address(15 downto 10);
alias Comp_Addr is Open8_Bus.Address(15 downto 10);
/o8_ram_4k.vhd
23,6 → 23,11
--
-- VHDL Units : o8_ram_1k
-- Description: Provides a wrapper layer for a 1kx8 RAM model
--
-- Revision History
-- Author Date Change
------------------ -------- ---------------------------------------------------
-- Seth Henry 04/16/20 Revision block added
 
library ieee;
use ieee.std_logic_1164.all;
34,13 → 39,9
 
entity o8_ram_4k is
generic(
Reset_Level : std_logic;
Address : ADDRESS_TYPE
);
port(
Clock : in std_logic;
Reset : in std_logic;
--
Open8_Bus : in OPEN8_BUS_TYPE;
Rd_Data : out DATA_TYPE
);
48,6 → 49,9
 
architecture behave of o8_ram_4k is
 
alias Clock is Open8_Bus.Clock;
alias Reset is Open8_Bus.Reset;
 
constant User_Addr : std_logic_vector(15 downto 12)
:= Address(15 downto 12);
alias Comp_Addr is Open8_Bus.Address(15 downto 12);
/o8_register.vhd
32,6 → 32,7
-- Author Date Change
------------------ -------- ---------------------------------------------------
-- Seth Henry 12/20/19 Design Start
-- Seth Henry 04/16/20 Modified to use Open8 bus record
 
library ieee;
use ieee.std_logic_1164.all;
45,13 → 46,9
entity o8_register is
generic(
Default_Value : DATA_TYPE := x"00";
Reset_Level : std_logic;
Address : ADDRESS_TYPE
);
port(
Clock : in std_logic;
Reset : in std_logic;
--
Open8_Bus : in OPEN8_BUS_TYPE;
Rd_Data : out DATA_TYPE;
--
61,6 → 58,9
 
architecture behave of o8_register is
 
alias Clock is Open8_Bus.Clock;
alias Reset is Open8_Bus.Reset;
 
constant User_Addr : std_logic_vector(15 downto 0)
:= Address(15 downto 0);
alias Comp_Addr is Open8_Bus.Address(15 downto 0);
/o8_rom_32k.vhd
23,6 → 23,11
--
-- VHDL Units : o8_rom_32k
-- Description: Provides a wrapper layer for a 32kx8 ROM model
--
-- Revision History
-- Author Date Change
------------------ -------- ---------------------------------------------------
-- Seth Henry 04/16/20 Revision block added
 
library ieee;
use ieee.std_logic_1164.all;
34,13 → 39,9
 
entity o8_rom_32k is
generic(
Reset_Level : std_logic;
Address : ADDRESS_TYPE
);
port(
Clock : in std_logic;
Reset : in std_logic;
--
Open8_Bus : in OPEN8_BUS_TYPE;
Rd_Data : out DATA_TYPE
);
48,6 → 49,9
 
architecture behave of o8_rom_32k is
 
alias Clock is Open8_Bus.Clock;
alias Reset is Open8_Bus.Reset;
 
constant User_Addr : std_logic_vector(15 downto 15) :=
Address(15 downto 15);
alias Comp_Addr is Open8_Bus.Address(15 downto 15);
/o8_rtc.vhd
42,6 → 42,11
-- 0x6 -------- Update RTC regs from Shadow Regs (WO)
-- 0x7 A------- Update Shadow Regs from RTC regs (RW)
-- A = Update is Busy
--
-- Revision History
-- Author Date Change
------------------ -------- ---------------------------------------------------
-- Seth Henry 04/16/20 Revision block added
 
library ieee;
use ieee.std_logic_1164.all;
54,15 → 59,9
 
entity o8_rtc is
generic(
Sys_Freq : real;
Reset_Level : std_logic;
Address : ADDRESS_TYPE
);
port(
Clock : in std_logic;
Reset : in std_logic;
uSec_Tick : out std_logic;
--
Open8_Bus : in OPEN8_BUS_TYPE;
Rd_Data : out DATA_TYPE;
--
73,6 → 72,10
 
architecture behave of o8_rtc is
 
alias Clock is Open8_Bus.Clock;
alias Reset is Open8_Bus.Reset;
alias uSec_Tick is Open8_Bus.uSec_Tick;
 
constant User_Addr : std_logic_vector(15 downto 3)
:= Address(15 downto 3);
alias Comp_Addr is Open8_Bus.Address(15 downto 3);
85,15 → 88,6
signal Wr_Data_q : DATA_TYPE;
signal Rd_En : std_logic;
 
constant DLY_1USEC_VAL : integer := integer(Sys_Freq / 1000000.0);
constant DLY_1USEC_WDT : integer := ceil_log2(DLY_1USEC_VAL - 1);
constant DLY_1USEC : std_logic_vector :=
conv_std_logic_vector( DLY_1USEC_VAL - 1, DLY_1USEC_WDT);
 
signal uSec_Cntr : std_logic_vector( DLY_1USEC_WDT - 1 downto 0 )
:= (others => '0');
signal uSec_Tick_i : std_logic;
 
type PIT_TYPE is record
timer_cnt : DATA_TYPE;
timer_ro : std_logic;
152,7 → 146,6
 
begin
 
uSec_Tick <= uSec_Tick_i;
Addr_Match <= '1' when Comp_Addr = User_Addr else '0';
 
Interrupt_PIT <= pit.timer_ro;
161,9 → 154,6
io_reg: process( Clock, Reset )
begin
if( Reset = Reset_Level )then
uSec_Cntr <= (others => '0');
uSec_Tick_i <= '0';
 
pit.timer_cnt <= x"00";
pit.timer_ro <= '0';
 
217,15 → 207,8
 
elsif( rising_edge( Clock ) )then
 
uSec_Cntr <= uSec_Cntr - 1;
uSec_Tick_i <= '0';
if( uSec_Cntr = 0 )then
uSec_Cntr <= DLY_1USEC;
uSec_Tick_i <= '1';
end if;
 
-- Periodic Interval Timer
pit.timer_cnt <= pit.timer_cnt - uSec_Tick_i;
pit.timer_cnt <= pit.timer_cnt - uSec_Tick;
pit.timer_ro <= '0';
if( update_interval = '1' )then
pit.timer_cnt <= interval;
235,7 → 218,7
end if;
 
-- Fractional decisecond counter - cycles every 10k microseconds
rtc.frac <= rtc.frac - uSec_Tick_i;
rtc.frac <= rtc.frac - uSec_Tick;
rtc.frac_ro <= '0';
if( or_reduce(rtc.frac) = '0' or update_rtc = '1' )then
rtc.frac <= DECISEC;
/o8_sdlc_if.vhd
59,6 → 59,11
-- by a start followed by a stop flag. Incomplete frames are ignored.
-- 2) If too many bytes are received (buffer overflow), a value of
-- ERR_LENGTH is written.
--
-- Revision History
-- Author Date Change
------------------ -------- ---------------------------------------------------
-- Seth Henry 04/16/20 Revision block added
 
library ieee;
use ieee.std_logic_1164.all;
78,15 → 83,11
Poly_Init : std_logic_vector(15 downto 0) := x"0000";
Set_As_Master : boolean := true;
Clock_Offset : integer := 6;
BitClock_Freq : real := 500000.0;
Sys_Freq : real := 100000000.0;
Reset_Level : std_logic := '1';
BitClock_Frequency : real := 500000.0;
Clock_Frequency : real := 100000000.0;
Address : ADDRESS_TYPE
);
port(
Clock : in std_logic;
Reset : in std_logic;
--
Open8_Bus : in OPEN8_BUS_TYPE;
Rd_Data : out DATA_TYPE;
Interrupt : out std_logic;
100,6 → 101,9
 
architecture behave of o8_sdlc_if is
 
alias Clock is Open8_Bus.Clock;
alias Reset is Open8_Bus.Reset;
 
constant Base_Addr : std_logic_vector(15 downto 9)
:= Address(15 downto 9);
 
296,9 → 300,9
U_BCLK : entity work.sdlc_serial_clk
generic map(
Set_As_Master => Set_As_Master,
BitClock_Freq => BitClock_Freq,
BitClock_Freq => BitClock_Frequency,
Reset_Level => Reset_Level,
Sys_Freq => Sys_Freq
Sys_Freq => Clock_Frequency
)
port map(
Clock => Clock,
/o8_status_led.vhd
39,6 → 39,7
-- Author Date Change
------------------ -------- ---------------------------------------------------
-- Seth Henry 12/20/19 Design Start
-- Seth Henry 04/16/20 Modified to use Open8 bus record
 
library ieee;
use ieee.std_logic_1164.all;
51,13 → 52,9
 
entity o8_status_led is
generic(
Reset_Level : std_logic;
Address : ADDRESS_TYPE
);
port(
Clock : in std_logic;
Reset : in std_logic;
--
Open8_Bus : in OPEN8_BUS_TYPE;
Rd_Data : out DATA_TYPE;
--
67,6 → 64,9
 
architecture behave of o8_status_led is
 
alias Clock is Open8_Bus.Clock;
alias Reset is Open8_Bus.Reset;
 
constant User_Addr : std_logic_vector(15 downto 0)
:= Address(15 downto 0);
alias Comp_Addr is Open8_Bus.Address(15 downto 0);
/o8_sys_timer.vhd
37,6 → 37,7
-- Seth Henry 12/19/19 Renamed Tmr_Out to Interrupt
-- Seth Henry 04/09/20 Modified timer update logic to reset the timer on
-- interval write.
-- Seth Henry 04/16/20 Modified to use Open8 bus record
 
library ieee;
use ieee.std_logic_1164.all;
49,15 → 50,9
 
entity o8_sys_timer is
generic(
Sys_Freq : real;
Reset_Level : std_logic;
Address : ADDRESS_TYPE
);
port(
Clock : in std_logic;
Reset : in std_logic;
uSec_Tick : out std_logic;
--
Open8_Bus : in OPEN8_BUS_TYPE;
Rd_Data : out DATA_TYPE;
Interrupt : out std_logic
66,6 → 61,10
 
architecture behave of o8_sys_timer is
 
alias Clock is Open8_Bus.Clock;
alias Reset is Open8_Bus.Reset;
alias uSec_Tick is Open8_Bus.uSec_Tick;
 
constant User_Addr : ADDRESS_TYPE := Address;
alias Comp_Addr is Open8_Bus.Address(15 downto 0);
signal Addr_Match : std_logic := '0';
78,17 → 77,8
signal Update_Interval : std_logic;
signal Timer_Cnt : DATA_TYPE := x"00";
 
constant DLY_1USEC_VAL : integer := integer(Sys_Freq / 1000000.0);
constant DLY_1USEC_WDT : integer := ceil_log2(DLY_1USEC_VAL - 1);
constant DLY_1USEC : std_logic_vector :=
conv_std_logic_vector(DLY_1USEC_VAL - 1, DLY_1USEC_WDT);
 
signal uSec_Cntr : std_logic_vector( DLY_1USEC_WDT - 1 downto 0 )
:= (others => '0');
signal uSec_Tick_i : std_logic := '0';
begin
 
uSec_Tick <= uSec_Tick_i;
Addr_Match <= '1' when Comp_Addr = User_Addr else '0';
 
io_reg: process( Clock, Reset )
117,21 → 107,6
end if;
end process;
 
uSec_Tick_i_proc: process( Clock, Reset )
begin
if( Reset = Reset_Level )then
uSec_Cntr <= (others => '0');
uSec_Tick_i <= '0';
elsif( rising_edge( Clock ) )then
uSec_Cntr <= uSec_Cntr - 1;
uSec_Tick_i <= '0';
if( uSec_Cntr = 0 )then
uSec_Cntr <= DLY_1USEC;
uSec_Tick_i <= '1';
end if;
end if;
end process;
 
Interval_proc: process( Clock, Reset )
begin
if( Reset = Reset_Level )then
139,7 → 114,7
Interrupt <= '0';
elsif( rising_edge(Clock) )then
Interrupt <= '0';
Timer_Cnt <= Timer_Cnt - uSec_Tick_i;
Timer_Cnt <= Timer_Cnt - uSec_Tick;
if( Update_Interval = '1' )then
Timer_Cnt <= Interval;
elsif( or_reduce(Timer_Cnt) = '0' )then
/o8_vdsm12.vhd
36,6 → 36,7
------------------ -------- ---------------------------------------------------
-- Seth Henry 12/18/19 Design start
-- Seth Henry 04/10/20 Code Cleanup
-- Seth Henry 04/16/20 Modified to use Open8 bus record
 
library ieee;
use ieee.std_logic_1164.all;
47,22 → 48,22
 
entity o8_vdsm12 is
generic(
Reset_Level : std_logic := '1';
Default_Value : std_logic_vector(11 downto 0) := x"000";
Address : ADDRESS_TYPE
);
port(
Clock : in std_logic;
Reset : in std_logic;
--
Open8_Bus : in OPEN8_BUS_TYPE;
Rd_Data : out DATA_TYPE;
--
PDM_Out : out std_logic
DACOut : out std_logic
);
end entity;
 
architecture behave of o8_vdsm12 is
 
alias Clock is Open8_Bus.Clock;
alias Reset is Open8_Bus.Reset;
 
constant User_Addr : std_logic_vector(15 downto 2)
:= Address(15 downto 2);
alias Comp_Addr is Open8_Bus.Address(15 downto 2);
198,7 → 199,7
Wr_Data_q <= x"00";
DAC_Val_LB <= x"00";
DAC_Val_UB <= x"0";
DAC_Val <= (others => '0');
DAC_Val <= Default_Value;
elsif( rising_edge( Clock ) )then
Reg_Sel <= Reg_Addr;
 
271,7 → 272,7
PWM_Period <= (others => '0');
Period_Ctr <= (others => '0');
Width_Ctr <= (others => '0');
PDM_Out <= '0';
DACOut <= '0';
elsif( rising_edge(Clock) )then
q <= diff(DIV_WIDTH-1 downto 0) &
q(DIV_WIDTH-2 downto 0) & '1';
293,9 → 294,9
Period_Ctr <= Period_Ctr - 1;
Width_Ctr <= Width_Ctr - 1;
 
PDM_Out <= '1';
DACOut <= '1';
if( Width_Ctr = 0 )then
PDM_Out <= '0';
DACOut <= '0';
Width_Ctr <= (others => '0');
end if;
 
/o8_vdsm8.vhd
33,6 → 33,7
------------------ -------- ---------------------------------------------------
-- Seth Henry 06/23/16 Design start
-- Seth Henry 04/10/20 Code Cleanup
-- Seth Henry 04/16/20 Modified to use Open8 bus record
 
library ieee;
use ieee.std_logic_1164.all;
45,13 → 46,9
entity o8_vdsm8 is
generic(
Default_Value : DATA_TYPE := x"00";
Reset_Level : std_logic;
Address : ADDRESS_TYPE
);
port(
Clock : in std_logic;
Reset : in std_logic;
--
Open8_Bus : in OPEN8_BUS_TYPE;
Rd_Data : out DATA_TYPE;
--
61,6 → 58,9
 
architecture behave of o8_vdsm8 is
 
alias Clock is Open8_Bus.Clock;
alias Reset is Open8_Bus.Reset;
 
constant User_Addr : std_logic_vector(15 downto 0)
:= Address(15 downto 0);
alias Comp_Addr is Open8_Bus.Address(15 downto 0);

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.