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
    /
    from Rev 198 to Rev 199
    Reverse comparison

Rev 198 → Rev 199

/open8_urisc/trunk/VHDL/o8_sdlc_if.vhd
37,12 → 37,12
-- "1_1111_1110" (0x0FE) Reserved
-- "1_1111_1111" (0x1FF) RX Length / Status***
--
-- * Address 0xFE reports the SDLC bit clock status and updates on changes.
-- * Address 0xFE reports the SDLC bit clock status and updates on changes.
-- 1) If BClk_Okay = '0' (Bitclock is NOT present), the field will report
-- 0x00. Otherwise, it will report 0xFF if the bitclock is present.
-- 2) Writing any value to the register will cause the controller to
-- silently reset the clock status without causing an interrupt.
--
--
-- ** This location serves as the control/status register for transmit
-- 1) Writing a value between 1 and 253 will trigger the transmit engine,
-- using the write value as the packet length.
49,7 → 49,7
-- 2) Values 0x00, 0xFE, or 0xFF are invalid, and will be ignored.
-- 3) This value will change from the user written value to 0xFF once the
-- packet is transmitted to indicate the transmission is complete.
--
--
-- *** This location serves as the status register for the receive
-- 1) This value is only updated on reception of a full frame, indicated
-- by a start followed by a stop flag. Incomplete frames are ignored.
72,6 → 72,8
 
entity o8_sdlc_if is
generic(
Monitor_Enable : boolean := true;
Attach_Monitor_to_CPU_Side : boolean := false;
Poly_Init : std_logic_vector(15 downto 0) := x"0000";
Set_As_Master : boolean := true;
Clock_Offset : integer := 6;
205,6 → 207,31
q_b => DP_Rd_Data
);
 
Attach_to_CPU_side: if( Monitor_Enable and Attach_Monitor_to_CPU_Side )generate
 
U_MON: entity work.sdlc_monitor
port map(
clock => Clock,
address => RAM_Lower_Addr,
data => Wr_Data,
wren => RAM_Wr_En,
q => open
);
end generate;
 
Attach_to_Int_side: if( Monitor_Enable and not Attach_Monitor_to_CPU_Side )generate
 
U_MON: entity work.sdlc_monitor
port map(
clock => Clock,
address => DP_Addr,
data => DP_Wr_Data,
wren => DP_Wr_En,
q => open
);
 
end generate;
 
U_BCLK : entity work.sdlc_serial_clk
generic map(
Set_As_Master => Set_As_Master,
/open8_urisc/trunk/VHDL/sdlc_monitor.vhd
0,0 → 1,156
-- megafunction wizard: %RAM: 1-PORT%
-- GENERATION: STANDARD
-- VERSION: WM1.0
-- MODULE: altsyncram
 
-- ============================================================
-- File Name: sdlc_monitor.vhd
-- Megafunction Name(s):
-- altsyncram
--
-- Simulation Library Files(s):
-- altera_mf
-- ============================================================
-- ************************************************************
-- THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE!
--
-- 13.1.0 Build 162 10/23/2013 SJ Web Edition
-- ************************************************************
 
 
--Copyright (C) 1991-2013 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.
 
 
LIBRARY ieee;
USE ieee.std_logic_1164.all;
 
LIBRARY altera_mf;
USE altera_mf.altera_mf_components.all;
 
ENTITY sdlc_monitor IS
PORT
(
address : IN STD_LOGIC_VECTOR (8 DOWNTO 0);
clock : IN STD_LOGIC := '1';
data : IN STD_LOGIC_VECTOR (7 DOWNTO 0);
wren : IN STD_LOGIC ;
q : OUT STD_LOGIC_VECTOR (7 DOWNTO 0)
);
END sdlc_monitor;
 
 
ARCHITECTURE SYN OF sdlc_monitor IS
 
SIGNAL sub_wire0 : STD_LOGIC_VECTOR (7 DOWNTO 0);
 
BEGIN
q <= sub_wire0(7 DOWNTO 0);
 
altsyncram_component : altsyncram
GENERIC MAP (
clock_enable_input_a => "BYPASS",
clock_enable_output_a => "BYPASS",
intended_device_family => "Cyclone III",
lpm_hint => "ENABLE_RUNTIME_MOD=YES,INSTANCE_NAME=SDLC",
lpm_type => "altsyncram",
numwords_a => 512,
operation_mode => "SINGLE_PORT",
outdata_aclr_a => "NONE",
outdata_reg_a => "UNREGISTERED",
power_up_uninitialized => "FALSE",
read_during_write_mode_port_a => "NEW_DATA_NO_NBE_READ",
widthad_a => 9,
width_a => 8,
width_byteena_a => 1
)
PORT MAP (
address_a => address,
clock0 => clock,
data_a => data,
wren_a => wren,
q_a => sub_wire0
);
 
 
 
END SYN;
 
-- ============================================================
-- CNX file retrieval info
-- ============================================================
-- Retrieval info: PRIVATE: ADDRESSSTALL_A NUMERIC "0"
-- Retrieval info: PRIVATE: AclrAddr NUMERIC "0"
-- Retrieval info: PRIVATE: AclrByte NUMERIC "0"
-- Retrieval info: PRIVATE: AclrData NUMERIC "0"
-- Retrieval info: PRIVATE: AclrOutput NUMERIC "0"
-- Retrieval info: PRIVATE: BYTE_ENABLE NUMERIC "0"
-- Retrieval info: PRIVATE: BYTE_SIZE NUMERIC "8"
-- Retrieval info: PRIVATE: BlankMemory NUMERIC "1"
-- Retrieval info: PRIVATE: CLOCK_ENABLE_INPUT_A NUMERIC "0"
-- Retrieval info: PRIVATE: CLOCK_ENABLE_OUTPUT_A NUMERIC "0"
-- Retrieval info: PRIVATE: Clken NUMERIC "0"
-- Retrieval info: PRIVATE: DataBusSeparated NUMERIC "1"
-- Retrieval info: PRIVATE: IMPLEMENT_IN_LES NUMERIC "0"
-- Retrieval info: PRIVATE: INIT_FILE_LAYOUT STRING "PORT_A"
-- Retrieval info: PRIVATE: INIT_TO_SIM_X NUMERIC "0"
-- Retrieval info: PRIVATE: INTENDED_DEVICE_FAMILY STRING "Cyclone III"
-- Retrieval info: PRIVATE: JTAG_ENABLED NUMERIC "1"
-- Retrieval info: PRIVATE: JTAG_ID STRING "SDLC"
-- Retrieval info: PRIVATE: MAXIMUM_DEPTH NUMERIC "0"
-- Retrieval info: PRIVATE: MIFfilename STRING ""
-- Retrieval info: PRIVATE: NUMWORDS_A NUMERIC "512"
-- Retrieval info: PRIVATE: RAM_BLOCK_TYPE NUMERIC "0"
-- Retrieval info: PRIVATE: READ_DURING_WRITE_MODE_PORT_A NUMERIC "3"
-- Retrieval info: PRIVATE: RegAddr NUMERIC "1"
-- Retrieval info: PRIVATE: RegData NUMERIC "1"
-- Retrieval info: PRIVATE: RegOutput NUMERIC "0"
-- Retrieval info: PRIVATE: SYNTH_WRAPPER_GEN_POSTFIX STRING "0"
-- Retrieval info: PRIVATE: SingleClock NUMERIC "1"
-- Retrieval info: PRIVATE: UseDQRAM NUMERIC "1"
-- Retrieval info: PRIVATE: WRCONTROL_ACLR_A NUMERIC "0"
-- Retrieval info: PRIVATE: WidthAddr NUMERIC "9"
-- Retrieval info: PRIVATE: WidthData NUMERIC "8"
-- Retrieval info: PRIVATE: rden NUMERIC "0"
-- Retrieval info: LIBRARY: altera_mf altera_mf.altera_mf_components.all
-- Retrieval info: CONSTANT: CLOCK_ENABLE_INPUT_A STRING "BYPASS"
-- Retrieval info: CONSTANT: CLOCK_ENABLE_OUTPUT_A STRING "BYPASS"
-- Retrieval info: CONSTANT: INTENDED_DEVICE_FAMILY STRING "Cyclone III"
-- Retrieval info: CONSTANT: LPM_HINT STRING "ENABLE_RUNTIME_MOD=YES,INSTANCE_NAME=SDLC"
-- Retrieval info: CONSTANT: LPM_TYPE STRING "altsyncram"
-- Retrieval info: CONSTANT: NUMWORDS_A NUMERIC "512"
-- Retrieval info: CONSTANT: OPERATION_MODE STRING "SINGLE_PORT"
-- Retrieval info: CONSTANT: OUTDATA_ACLR_A STRING "NONE"
-- Retrieval info: CONSTANT: OUTDATA_REG_A STRING "UNREGISTERED"
-- Retrieval info: CONSTANT: POWER_UP_UNINITIALIZED STRING "FALSE"
-- Retrieval info: CONSTANT: READ_DURING_WRITE_MODE_PORT_A STRING "NEW_DATA_NO_NBE_READ"
-- Retrieval info: CONSTANT: WIDTHAD_A NUMERIC "9"
-- Retrieval info: CONSTANT: WIDTH_A NUMERIC "8"
-- Retrieval info: CONSTANT: WIDTH_BYTEENA_A NUMERIC "1"
-- Retrieval info: USED_PORT: address 0 0 9 0 INPUT NODEFVAL "address[8..0]"
-- Retrieval info: USED_PORT: clock 0 0 0 0 INPUT VCC "clock"
-- Retrieval info: USED_PORT: data 0 0 8 0 INPUT NODEFVAL "data[7..0]"
-- Retrieval info: USED_PORT: q 0 0 8 0 OUTPUT NODEFVAL "q[7..0]"
-- Retrieval info: USED_PORT: wren 0 0 0 0 INPUT NODEFVAL "wren"
-- Retrieval info: CONNECT: @address_a 0 0 9 0 address 0 0 9 0
-- Retrieval info: CONNECT: @clock0 0 0 0 0 clock 0 0 0 0
-- Retrieval info: CONNECT: @data_a 0 0 8 0 data 0 0 8 0
-- Retrieval info: CONNECT: @wren_a 0 0 0 0 wren 0 0 0 0
-- Retrieval info: CONNECT: q 0 0 8 0 @q_a 0 0 8 0
-- Retrieval info: GEN_FILE: TYPE_NORMAL sdlc_monitor.vhd TRUE
-- Retrieval info: GEN_FILE: TYPE_NORMAL sdlc_monitor.inc FALSE
-- Retrieval info: GEN_FILE: TYPE_NORMAL sdlc_monitor.cmp FALSE
-- Retrieval info: GEN_FILE: TYPE_NORMAL sdlc_monitor.bsf FALSE
-- Retrieval info: GEN_FILE: TYPE_NORMAL sdlc_monitor_inst.vhd FALSE
-- Retrieval info: LIB_FILE: altera_mf
/open8_urisc/trunk/VHDL/sdlc_serial_ctrl.vhd
84,9 → 84,9
signal RAM_Updated : std_logic;
 
-- RAM Arbitration logic
type DP_ARB_STATES is (IDLE,
PORT0_AD, PORT0_WR, PORT0_RD0, PORT0_RD1, PORT0_RD2,
PORT1_AD, PORT1_WR, PORT1_RD0, PORT1_RD1, PORT1_RD2 );
type DP_ARB_STATES is (PAUSE, IDLE,
PORT0_AD, PORT0_WR, PORT0_RD0, PORT0_RD1,
PORT1_AD, PORT1_WR, PORT1_RD0, PORT1_RD1 );
signal DP_Arb_State : DP_ARB_STATES := IDLE;
signal DP_Last_Port : std_logic := '0';
 
135,8 → 135,8
 
type RX_FSM_STATES is ( WAIT_FOR_CLOCK, WAIT_FOR_FLAG,
RX_MESG_DATA, RX_WR_DATA,
RX_CRC_LB_RD, RX_CRC_UB_RD, CHK_CRC,
RX_WR_COUNT, RX_TERM );
RX_CRC_LB_RD, RX_CRC_UB_RD,
RX_WR_CRC, RX_WR_COUNT );
 
signal RX_State : RX_FSM_STATES := WAIT_FOR_CLOCK;
 
169,6 → 169,7
elsif( rising_edge(Clock) )then
DP_Port0_Ack <= '0';
DP_Port1_Ack <= '0';
DP_Wr_En <= '0';
 
case( DP_Arb_State )is
when IDLE =>
197,12 → 198,9
DP_Arb_State <= PORT0_RD1;
 
when PORT0_RD1 =>
DP_Arb_State <= PORT0_RD2;
 
when PORT0_RD2 =>
DP_Port0_Ack <= '1';
DP_Port0_RdData <= DP_Rd_Data;
DP_Arb_State <= IDLE;
DP_Arb_State <= PAUSE;
 
when PORT1_AD =>
DP_Last_Port <= '1';
223,11 → 221,11
DP_Arb_State <= PORT1_RD1;
 
when PORT1_RD1 =>
DP_Arb_State <= PORT1_RD2;
 
when PORT1_RD2 =>
DP_Port1_Ack <= '1';
DP_Port1_RdData <= DP_Rd_Data;
DP_Arb_State <= PAUSE;
 
when PAUSE =>
DP_Arb_State <= IDLE;
 
when others => null;
307,7 → 305,7
end if;
 
when RD_TX_REGISTER =>
DP_Port0_Addr <= CR_REGISTER;
DP_Port0_Addr <= TX_REGISTER;
DP_Port0_Req <= '1';
if( DP_Port0_Ack = '1' )then
DP_Port0_Req <= '0';
390,7 → 388,7
end if;
 
when TX_DONE =>
DP_Port0_Addr <= CR_REGISTER;
DP_Port0_Addr <= TX_REGISTER;
DP_Port0_Req <= '1';
DP_Port0_WrData <= FLAG_DONE;
DP_Port0_RWn <= '0';
507,6 → 505,7
 
when RX_MESG_DATA =>
if( RX_Frame_Stop = '1' )then
RX_Length <= RX_Length - 1;
RX_State <= RX_CRC_UB_RD;
elsif( RX_Frame_Valid = '1' )then
RX_State <= RX_WR_DATA;
539,23 → 538,29
end if;
 
when RX_CRC_LB_RD =>
RX_Length <= RX_Length - DP_Port1_Ack;
DP_Port1_Addr <= RX_Length;
DP_Port1_Req <= '1';
if( DP_Port1_Ack = '1' )then
DP_Port1_Req <= '0';
RX_CRC_Rcvd_LB <= DP_Port1_RdData;
RX_State <= RX_WR_COUNT;
RX_State <= RX_WR_CRC;
end if;
 
when CHK_CRC =>
RX_State <= RX_WR_COUNT;
when RX_WR_CRC =>
DP_Port1_Addr <= CS_REGISTER;
DP_Port1_WrData <= x"FF";
if( RX_CRC_Rcvd /= RX_CRC_Calc )then
RX_Length <= ERR_CHECKSUM;
DP_Port1_WrData <= x"00";
end if;
DP_Port1_RWn <= '0';
DP_Port1_Req <= '1';
if( DP_Port1_Ack = '1' )then
DP_Port1_Req <= '0';
RX_State <= RX_WR_COUNT;
end if;
 
when RX_WR_COUNT =>
DP_Port1_Addr <= CR_REGISTER;
DP_Port1_Addr <= RX_REGISTER;
DP_Port1_WrData <= RX_Length;
DP_Port1_RWn <= '0';
DP_Port1_Req <= '1';
/open8_urisc/trunk/VHDL/sdlc_serial_pkg.vhd
36,7 → 36,9
 
-- Internal definitions
constant CK_REGISTER : DATA_IN_TYPE := x"FE";
constant CR_REGISTER : DATA_IN_TYPE := x"FF";
constant TX_REGISTER : DATA_IN_TYPE := x"FF";
constant CS_REGISTER : DATA_IN_TYPE := x"FE";
constant RX_REGISTER : DATA_IN_TYPE := x"FF";
 
constant TX_RESERVED_LOW : integer := 0;
constant TX_RESERVED_HIGH : integer := 254;
44,7 → 46,6
constant FLAG_DONE : DATA_IN_TYPE := x"FF";
 
constant ERR_LENGTH : DATA_IN_TYPE := x"00";
constant ERR_CHECKSUM : DATA_IN_TYPE := x"FF";
 
end package;
 

powered by: WebSVN 2.1.0

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