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

Subversion Repositories hdlc

[/] [hdlc/] [trunk/] [CODE/] [TX/] [core/] [zero_ins.vhd] - Blame information for rev 19

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 8 khatib
-------------------------------------------------------------------------------
2
-- Title      :  Zero Insertion
3
-- Project    :  HDLC controller
4
-------------------------------------------------------------------------------
5
-- File        : zero_ins.vhd
6
-- Author      : Jamil Khatib  (khatib@ieee.org)
7
-- Organization: OpenIPCore Project
8
-- Created     : 2001/01/12
9 13 khatib
-- Last update:2001/10/20
10 8 khatib
-- Platform    : 
11
-- Simulators  : Modelsim 5.3XE/Windows98
12
-- Synthesizers: 
13
-- Target      : 
14
-- Dependency  : ieee.std_logic_1164
15
--
16
-------------------------------------------------------------------------------
17
-- Description:  Zero Insertion
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            :   12 Jan 2001
31
-- Modifier        :   Jamil Khatib (khatib@ieee.org)
32
-- Desccription    :   Created
33
-------------------------------------------------------------------------------
34 12 khatib
-- Revisions  :
35
-- Revision Number :   2
36
-- Version         :   0.2
37
-- Date            :   27 May 2001
38
-- Modifier        :   Jamil Khatib (khatib@ieee.org)
39
-- Desccription    :   Tx zero insertion bug fixed
40
--                     Zero is inserted after 5 sequence of 1's insted of 6 1's
41
-------------------------------------------------------------------------------
42
-- $Log: not supported by cvs2svn $
43 13 khatib
-- Revision 1.2  2001/05/28 19:14:22  khatib
44
-- TX zero insertion bug fixed
45
--
46 12 khatib
-------------------------------------------------------------------------------
47 8 khatib
 
48 13 khatib
LIBRARY ieee;
49
USE ieee.std_logic_1164.ALL;
50 8 khatib
 
51 13 khatib
ENTITY ZeroIns_ent IS
52 8 khatib
 
53 13 khatib
  PORT (
54
    TxClk         : IN  STD_LOGIC;      -- Tx clock
55
    rst_n         : IN  STD_LOGIC;      -- system reset
56
    enable        : IN  STD_LOGIC;      -- enable (Driven by controller)
57
    inProgress    : OUT STD_LOGIC;      -- Data in progress
58
    BackendEnable : IN  STD_LOGIC;      -- Backend Enable
59 8 khatib
    -- backend interface
60 13 khatib
    abortedTrans  : OUT STD_LOGIC;      -- aborted Transmission
61
    ValidFrame    : IN  STD_LOGIC;      -- Valid Frame signal
62
    Writebyte     : IN  STD_LOGIC;      -- Back end write byte
63
    rdy           : OUT STD_LOGIC;      -- data ready
64
    TXD           : OUT STD_LOGIC;      -- TX serial data
65
    Data          : IN  STD_LOGIC_VECTOR(7 DOWNTO 0));  -- TX data bus
66 8 khatib
 
67 13 khatib
END ZeroIns_ent;
68 8 khatib
-------------------------------------------------------------------------------
69 13 khatib
ARCHITECTURE zero_ins_beh OF ZeroIns_ent IS
70 8 khatib
 
71 13 khatib
  SIGNAL data_reg : STD_LOGIC_VECTOR(7 DOWNTO 0);  -- Data register (used as
72 8 khatib
                                        -- internal buffer)
73 13 khatib
  SIGNAL flag     : STD_LOGIC;          -- control signal between processes
74
  SIGNAL delay_TX : STD_LOGIC;          -- Delayed output
75 8 khatib
 
76 13 khatib
BEGIN  -- zero_ins_beh
77 8 khatib
 
78
 
79
  -- purpose: Parallel to Serial
80
  -- type   : sequential
81
  -- inputs : TxClk, rst_n
82
  -- outputs: 
83 13 khatib
  P2S_proc                : PROCESS (TxClk, rst_n)
84
    VARIABLE tmp_reg      : STD_LOGIC_VECTOR(15 DOWNTO 0);  -- Temp Shift register
85
    VARIABLE counter      : INTEGER RANGE 0 TO 8;  -- Counter
86
    VARIABLE OnesDetected : STD_LOGIC;  -- 6 ones detected
87 8 khatib
 
88 13 khatib
  BEGIN  -- process P2S_proc
89
    IF rst_n = '0' THEN                 -- asynchronous reset (active low)
90 8 khatib
 
91 13 khatib
      tmp_reg      := (OTHERS => '0');
92 8 khatib
      Counter      := 0;
93
      flag         <= '1';
94
      OnesDetected := '0';
95
      TXD          <= '1';
96
      delay_TX     <= '1';
97
      inProgress   <= '0';
98
 
99 13 khatib
    ELSIF TxClk'event AND TxClk = '1' THEN  -- rising clock edge
100
      IF enable = '1' THEN
101 8 khatib
 
102 13 khatib
        OnesDetected := tmp_reg(0) AND tmp_reg(1) AND tmp_reg(2) AND tmp_reg(3) AND tmp_reg(4);
103 8 khatib
 
104
        delay_TX <= tmp_reg(0);
105
        TXD      <= delay_TX;
106
 
107 13 khatib
        IF OnesDetected = '1' THEN
108 8 khatib
          -- Zero insertion 
109 13 khatib
          tmp_reg(4 DOWNTO 0) := '0' & tmp_reg(4 DOWNTO 1);
110 8 khatib
 
111 13 khatib
        ELSE
112 8 khatib
          -- Total Shift
113 13 khatib
          tmp_reg(15 DOWNTO 0) := '0' & tmp_reg(15 DOWNTO 1);
114 8 khatib
 
115
          Counter := Counter +1;
116
 
117 13 khatib
        END IF;  -- ones detected
118 8 khatib
 
119 13 khatib
        IF counter = 8 THEN
120 8 khatib
 
121
          counter    := 0;
122
          flag       <= '1';
123
          inProgress <= '0';
124
 
125 13 khatib
          tmp_reg(15 DOWNTO 8) := data_reg;
126
        ELSE
127 8 khatib
          inProgress           <= '1';
128
          flag                 <= '0';
129 13 khatib
        END IF;  -- counter
130
      END IF;  -- enable
131
    END IF;  -- clk
132
  END PROCESS P2S_proc;
133 8 khatib
-------------------------------------------------------------------------------
134
 
135 13 khatib
  -- purpose: Backend Interface
136 8 khatib
  -- type   : sequential
137
  -- inputs : TxClk, rst_n
138
  -- outputs:   
139 13 khatib
  Backend_proc     : PROCESS (TxClk, rst_n)
140
    VARIABLE state : STD_LOGIC;         -- Backend state
141 8 khatib
 
142 13 khatib
  BEGIN  -- process Backend_proc
143
    IF rst_n = '0' THEN                     -- asynchronous reset (active low)
144
      state              := '0';
145
      data_reg           <= (OTHERS => '0');
146
      rdy                <= '0';
147
      abortedTrans       <= '0';
148
    ELSIF TxClk'event AND TxClk = '1' THEN  -- rising clock edge
149
      IF enable = '1' THEN
150
        IF BackendEnable = '1' THEN
151
          CASE state IS
152
            WHEN '0'                =>      -- wait for reading the register
153
              IF flag = '1' THEN            -- Register has been read
154
                state    := '1';
155
                rdy      <= '1';
156
                data_reg <= "00000000";     -- set register to known pattern to
157
                                            -- avoid invalid read (upon valid
158
                                            -- read this value will be overwritten)
159
              END IF;
160 8 khatib
 
161 13 khatib
            WHEN '1' =>
162
              IF WriteByte = '1' THEN
163
                state        := '0';
164
                rdy          <= '0';
165
                data_reg     <= Data;
166
              ELSIF flag = '1' THEN     -- Another flag but without read
167
                state        := '0';
168
                rdy          <= '0';
169
                data_reg     <= "00000000";
170
                abortedTrans <= '1';
171
              END IF;
172 8 khatib
 
173 13 khatib
            WHEN OTHERS => NULL;
174
          END CASE;
175 8 khatib
 
176 13 khatib
        ELSE
177
          rdy          <= '0';
178
          state        := '0';
179
          abortedTrans <= '0';
180
        END IF;  -- Backend enable
181 8 khatib
 
182 13 khatib
      END IF;  -- enable
183
    END IF;  -- Txclk
184
  END PROCESS Backend_proc;
185
 
186
 
187
END zero_ins_beh;

powered by: WebSVN 2.1.0

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