1 |
2 |
rudi |
|
2 |
|
|
SS_PCM (Single Slot Slave PCM Intervace)
|
3 |
|
|
============================================
|
4 |
|
|
|
5 |
|
|
Status
|
6 |
|
|
------
|
7 |
|
|
This core is done. It was tested on a XESS XCV800 board
|
8 |
|
|
interfacing to a proprietary device with a TI DSP, exchanging
|
9 |
|
|
PCM streams in both directions.
|
10 |
|
|
|
11 |
|
|
Test Bench
|
12 |
|
|
----------
|
13 |
|
|
There is no test bench, period !
|
14 |
|
|
Please don't email me asking for one, unless you want to hire
|
15 |
|
|
me to write one ! As I said above I have tested this core in
|
16 |
|
|
real hardware and it works just fine.
|
17 |
|
|
|
18 |
|
|
Documentation
|
19 |
|
|
-------------
|
20 |
|
|
Sorry, there is none. I just don't have the time to write it.
|
21 |
|
|
|
22 |
|
|
Here is a short how to:
|
23 |
|
|
|
24 |
|
|
This is a Salve PCM interface, meaning Clock and Sync are input
|
25 |
|
|
to the core. To make it a Master interface add a clock and Sync
|
26 |
|
|
signal generator (for example a 128KHz clock and 8KHz Sync).
|
27 |
|
|
|
28 |
|
|
PCM Clock is an external clock source and can really be any
|
29 |
|
|
clock rate. It should however be 16 times faster than the PCM
|
30 |
|
|
Sync signal rate.
|
31 |
|
|
|
32 |
|
|
PCM Sync, indicates the start of a PCM frame and in a practical
|
33 |
|
|
application would come in 8KHz intervals.
|
34 |
|
|
|
35 |
|
|
SSEL, indicates how many clock cycles to wait after a Sync
|
36 |
|
|
signal before starting to receive and transmit data.
|
37 |
|
|
|
38 |
|
|
After seeing a the Sync signal, this core will wait 'SSEL'
|
39 |
|
|
number of PCM clock cycles and then start receiving and
|
40 |
|
|
transmitting. Receiving and transmitting always happens
|
41 |
|
|
simultaneously. After it has finished receiving and transmitting
|
42 |
|
|
16 bits it will wait for the next Sync signal before repeating
|
43 |
|
|
the process.
|
44 |
|
|
|
45 |
|
|
At the end of receive process data is transferred from a
|
46 |
|
|
shift register to a hold register, guaranteeing that the data
|
47 |
|
|
will only change once during one Sync period.
|
48 |
|
|
After seeing the Sync signal, data is transferred from a transmit
|
49 |
|
|
holding register to a transmit shift register. If the transmit
|
50 |
|
|
hold register is not updates during one sync period the previous
|
51 |
|
|
data is retransmitted.
|
52 |
|
|
|
53 |
|
|
All of the above behavior is in compliance with general PCM
|
54 |
|
|
stream usage.
|
55 |
|
|
|
56 |
|
|
The core itself has a 8 bit interface. 're_i' selects between
|
57 |
|
|
the high and low byte in the holding register:
|
58 |
|
|
re_i-1 High byte from the receive holding register is driven
|
59 |
|
|
on dout_o
|
60 |
|
|
re_i-0 Low byte from the receive holding register is driven
|
61 |
|
|
on dout_o
|
62 |
|
|
|
63 |
|
|
To write data to the core:
|
64 |
|
|
we_i[0]-1 Stores data from din_i to transmit hold
|
65 |
|
|
register low byte
|
66 |
|
|
we_i[1]-1 Stores data from din_i to transmit hold
|
67 |
|
|
register high byte
|
68 |
|
|
|
69 |
|
|
|
70 |
|
|
|
71 |
|
|
Misc
|
72 |
|
|
----
|
73 |
|
|
The SASC Project Page is:
|
74 |
|
|
http://www.opencores.org/cores/sasc/
|
75 |
|
|
|
76 |
|
|
To find out more about me (Rudolf Usselmann), please visit:
|
77 |
|
|
http://www.asics.ws
|
78 |
|
|
|
79 |
|
|
|
80 |
|
|
Directory Structure
|
81 |
|
|
-------------------
|
82 |
|
|
[core_root]
|
83 |
|
|
|
|
84 |
|
|
+-doc Documentation
|
85 |
|
|
|
|
86 |
|
|
+-bench--+ Test Bench
|
87 |
|
|
| +- verilog Verilog Sources
|
88 |
|
|
| +-vhdl VHDL Sources
|
89 |
|
|
|
|
90 |
|
|
+-rtl----+ Core RTL Sources
|
91 |
|
|
| +-verilog Verilog Sources
|
92 |
|
|
| +-vhdl VHDL Sources
|
93 |
|
|
|
|
94 |
|
|
+-sim----+
|
95 |
|
|
| +-rtl_sim---+ Functional verification Directory
|
96 |
|
|
| | +-bin Makefiles/Run Scripts
|
97 |
|
|
| | +-run Working Directory
|
98 |
|
|
| |
|
99 |
|
|
| +-gate_sim--+ Functional & Timing Gate Level
|
100 |
|
|
| | Verification Directory
|
101 |
|
|
| +-bin Makefiles/Run Scripts
|
102 |
|
|
| +-run Working Directory
|
103 |
|
|
|
|
104 |
|
|
+-lint--+ Lint Directory Tree
|
105 |
|
|
| +-bin Makefiles/Run Scripts
|
106 |
|
|
| +-run Working Directory
|
107 |
|
|
| +-log Linter log & result files
|
108 |
|
|
|
|
109 |
|
|
+-syn---+ Synthesis Directory Tree
|
110 |
|
|
| +-bin Synthesis Scripts
|
111 |
|
|
| +-run Working Directory
|
112 |
|
|
| +-log Synthesis log files
|
113 |
|
|
| +-out Synthesis Output
|
114 |
|
|
|