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

Subversion Repositories hdlc

[/] [hdlc/] [trunk/] [CODE/] [TX/] [core/] [TXcont.vhd] - Blame information for rev 17

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 8 khatib
-------------------------------------------------------------------------------
2
-- Title      :  TX controller
3
-- Project    :  HDLC controller
4
-------------------------------------------------------------------------------
5
-- File        : TxCont.vhd
6
-- Author      : Jamil Khatib  (khatib@ieee.org)
7
-- Organization: OpenIPCore Project
8
-- Created     :2001/01/15
9 14 khatib
-- Last update:2001/10/26
10 8 khatib
-- Platform    : 
11
-- Simulators  : Modelsim 5.3XE/Windows98
12
-- Synthesizers: 
13
-- Target      : 
14
-- Dependency  : ieee.std_logic_1164
15
--
16
-------------------------------------------------------------------------------
17
-- Description:  Transmit controller
18
-------------------------------------------------------------------------------
19
-- Copyright (c) 2000 Jamil Khatib
20
-- 
21
-- This VHDL design file is an open design; you can redistribute it and/or
22
-- modify it and/or implement it after contacting the author
23
-- You can check the draft license at
24
-- http://www.opencores.org/OIPC/license.shtml
25
 
26
-------------------------------------------------------------------------------
27
-- Revisions  :
28
-- Revision Number :   1
29
-- Version         :   0.1
30
-- Date            :   15 Jan 2001
31
-- Modifier        :   Jamil Khatib (khatib@ieee.org)
32
-- Desccription    :   Created
33
-- ToOptimize      :
34
-- Bugs            :   
35
-------------------------------------------------------------------------------
36
 
37 13 khatib
LIBRARY ieee;
38
USE ieee.std_logic_1164.ALL;
39
ENTITY TxCont_ent IS
40 8 khatib
 
41 13 khatib
  PORT (
42
    TXclk         : IN  STD_LOGIC;      -- TX clock
43
    rst_n         : IN  STD_LOGIC;      -- System Reset
44
    TXEN          : IN  STD_LOGIC;      -- TX enable
45
    enable        : OUT STD_LOGIC;      -- Enable control
46
    BackendEnable : OUT STD_LOGIC;      -- Backend Enable
47
    abortedTrans  : IN  STD_LOGIC;      -- No Valid data from the backend
48
    inProgress    : IN  STD_LOGIC;      -- Data in progress
49
    ValidFrame    : IN  STD_LOGIC;      -- Valid Frame
50
    Frame         : OUT STD_LOGIC;      -- Frame strobe
51
    AbortFrame    : IN  STD_LOGIC;      -- AbortFrame
52
    AbortTrans    : OUT STD_LOGIC);     -- Abort data transmission
53 8 khatib
 
54 13 khatib
END TxCont_ent;
55 8 khatib
-------------------------------------------------------------------------------
56 13 khatib
ARCHITECTURE TxCont_beh OF TxCont_ent IS
57 8 khatib
 
58 13 khatib
BEGIN  -- TxCont_beh
59 8 khatib
 
60
-- purpose: Abort Machine
61
-- type   : sequential
62
-- inputs : Txclk, rst_n
63
-- outputs: 
64 13 khatib
  abort_proc : PROCESS (Txclk, rst_n)
65 8 khatib
 
66 13 khatib
    VARIABLE counter : INTEGER RANGE 0 TO 14;  -- Counter
67 8 khatib
 
68 13 khatib
    VARIABLE state : STD_LOGIC;             -- Internal State
69 8 khatib
    -- state ==> '0' No abort signal
70
    -- state ==> '1' Abort signal
71 13 khatib
  BEGIN  -- process abort_proc
72
    IF rst_n = '0' THEN                     -- asynchronous reset (active low)
73 8 khatib
      AbortTrans <= '0';
74
      Counter    := 0;
75
      enable     <= '1';
76
      state      := '0';
77 13 khatib
    ELSIF Txclk'event AND Txclk = '1' THEN  -- rising clock edge
78
      IF TXEN = '1' THEN
79 8 khatib
 
80 13 khatib
        CASE state IS
81 8 khatib
 
82 13 khatib
          WHEN '0' =>
83
            IF abortedTrans = '1' OR AbortFrame = '1' THEN
84 8 khatib
              state    := '1';
85
              Counter  := 0;
86 13 khatib
            END IF;
87 8 khatib
            AbortTrans <= '0';
88
 
89 13 khatib
          WHEN '1' =>
90
            IF counter = 8 THEN
91 8 khatib
              counter := 0;
92 13 khatib
              IF abortedTrans = '0' AND AbortFrame = '0' THEN
93 8 khatib
 
94
                state      := '0';
95
                AbortTrans <= '0';
96 13 khatib
              ELSE
97 8 khatib
                AbortTrans <= '1';
98 13 khatib
              END IF;
99 8 khatib
 
100 13 khatib
            ELSE
101 8 khatib
              counter := counter +1;
102 13 khatib
            END IF;  -- counter
103 8 khatib
 
104 13 khatib
          WHEN OTHERS => NULL;
105 8 khatib
 
106 13 khatib
        END CASE;
107
      END IF;  -- TXEN
108 8 khatib
      enable <= TXEN;
109
 
110 13 khatib
    END IF;  -- TXclk
111
  END PROCESS abort_proc;
112 8 khatib
 
113
  -- purpose: Flag Controller 
114
  -- type   : sequential
115
  -- inputs : Txclk, rst_n
116
  -- outputs: 
117 13 khatib
  Flag_proc : PROCESS (Txclk, rst_n)
118 8 khatib
 
119 13 khatib
    VARIABLE state   : STD_LOGIC_VECTOR(2 DOWNTO 0);  -- Internal State machine
120
    VARIABLE counter : INTEGER RANGE 0 TO 16;         -- Internal counter
121 8 khatib
 
122 13 khatib
  BEGIN  -- process Flag_proc
123
    IF rst_n = '0' THEN                     -- asynchronous reset (active low)
124
      Frame         <= '0';
125
      state         := (OTHERS => '0');
126 8 khatib
      counter       := 0;
127 13 khatib
      BackendEnable <= '0';
128
    ELSIF Txclk'event AND Txclk = '1' THEN  -- rising clock edge
129
      IF TXEN = '1' THEN
130 8 khatib
 
131 13 khatib
        CASE state IS
132
          WHEN "000" =>                 -- Check Valid Frame
133
            Frame           <= '0';
134
            IF ValidFrame = '1' THEN
135
              state         := "001";
136
              BackendEnable <= '1';
137
            ELSE
138
              BackendEnable <= '0';
139
            END IF;
140
            counter         := 0;
141 8 khatib
 
142 13 khatib
          WHEN "001" =>
143 8 khatib
 
144 13 khatib
            IF counter > 1 AND inProgress = '0' THEN
145
              state := "010";
146
              Frame <= '1';
147
            ELSE
148
              Frame <= '0';
149
            END IF;
150 8 khatib
 
151 13 khatib
            IF inProgress = '0' THEN
152
              counter := counter +1;
153
            END IF;
154 8 khatib
 
155
            BackendEnable <= '1';
156
 
157 13 khatib
          WHEN "010" =>                 -- Check ValidFrame
158 8 khatib
 
159
            Frame <= '1';
160
 
161 13 khatib
            IF ValidFrame = '0' THEN
162 8 khatib
              state         := "011";
163
              BackendEnable <= '0';
164 13 khatib
            ELSE
165 8 khatib
              BackendEnable <= '1';
166 13 khatib
            END IF;
167 8 khatib
 
168 13 khatib
            counter := 0;
169 8 khatib
 
170 13 khatib
          WHEN "011" =>
171
            IF counter > 2 AND inProgress = '0' THEN
172 14 khatib
              state := "100";
173 13 khatib
            END IF;
174 14 khatib
            Frame   <= '1';
175 8 khatib
 
176 13 khatib
            IF inProgress = '0' THEN
177
              counter := counter +1;
178
            END IF;
179
 
180 8 khatib
            BackendEnable <= '0';
181
 
182 14 khatib
          WHEN "100" =>
183
 
184
            IF counter = 10 THEN
185
              counter := 0;
186
              state   := "000";
187
              Frame   <= '0';
188
            ELSE
189
              counter := counter + 1;
190
              Frame   <= '1';
191
            END IF;
192
 
193
            BackendEnable <= '0';
194
 
195 13 khatib
          WHEN OTHERS => NULL;
196
        END CASE;
197
      END IF;  -- TXEN
198
    END IF;
199
  END PROCESS Flag_proc;
200 8 khatib
-------------------------------------------------------------------------------
201 13 khatib
END TxCont_beh;

powered by: WebSVN 2.1.0

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