| 1 |
50 |
dgisselq |
# Description
|
| 2 |
|
|
|
| 3 |
|
|
This CMOD-S6 SoC grew out of the desire to demonstrate that a useful ZipCPU
|
| 4 |
|
|
soft core implementation could be made in a very small space. In
|
| 5 |
|
|
particular, one of the purposes of the ZipCPU was to be able to operate successfully in a very area-challenged environment. The CMOD-S6, as sold by Digilent
|
| 6 |
|
|
Inc., provides this environment for this project.
|
| 7 |
|
|
|
| 8 |
|
|
# The CPU
|
| 9 |
|
|
|
| 10 |
|
|
For those not familiar with the ZipCPU, it is a soft core CPU designed
|
| 11 |
|
|
specifically for small area implementations. The CPU is a full 32-bit CPU,
|
| 12 |
|
|
designed as a RISC load/store architecture, having a full set of thirty-two
|
| 13 |
|
|
32-bit registers (of which 16 may be used at any one time), and has a single
|
| 14 |
|
|
wishbone bus for both instructions and data (Von Neumann architecture). The
|
| 15 |
|
|
particular implementation of the ZipCPU used for this SoC project is not
|
| 16 |
|
|
pipelined, nor does it have either instruction or data caches--they simply
|
| 17 |
|
|
wouldn't fit within the FPGA. Still, a CPU is a CPU and this CPU will
|
| 18 |
|
|
execute the instructions given to it faithfully.
|
| 19 |
|
|
|
| 20 |
|
|
# Peripherals
|
| 21 |
|
|
|
| 22 |
|
|
A SoC is really a soft core CPU combined with a bus, giving the CPU access to
|
| 23 |
|
|
a variety of peripherals. In this case, the CMod-S6 SoC offers the user with the following peripherals:
|
| 24 |
|
|
|
| 25 |
|
|
1. An I/O space containing
|
| 26 |
|
|
a. an interrupt controller
|
| 27 |
|
|
b. the address of the last bus error
|
| 28 |
|
|
c. a system timer
|
| 29 |
|
|
d. a watchdog timer
|
| 30 |
|
|
e. an audio controller consisting of a PRM driver and another (supporting) timer
|
| 31 |
|
|
f. a GPIO controller capable of implementing SPI and I2C (SPI is working, as this is used to drive the display successfully)
|
| 32 |
|
|
g. UART Rx/Tx
|
| 33 |
|
|
h. support for the on-board LED's and buttons, as well as for ...
|
| 34 |
|
|
i. an external 16-character keypad controller.
|
| 35 |
|
|
2. A debug scope, capable of recording 1024 words of debugging information within the core upon any trigger.
|
| 36 |
|
|
3. A 16-kB On-chip block RAM
|
| 37 |
|
|
4. 16-MB flash for holding both the FPGA configuration as well as any user programs. (The configuration takes about 512kB of flash.)
|
| 38 |
|
|
|
| 39 |
|
|
All of these peripherals have been tested, and they are known to work.
|
| 40 |
|
|
|
| 41 |
|
|
# The Demo Task
|
| 42 |
|
|
|
| 43 |
|
|
This board will be (has been!) proven with the (imaginary) task of implementing
|
| 44 |
|
|
a security light for a home. The light works in this fashion: when someone
|
| 45 |
|
|
presses the doorbell (one of the on-board buttons), the system will then play
|
| 46 |
|
|
a doorbell sound on the audio port, and turn on the outdoor lights for a half
|
| 47 |
|
|
an hour. Further, the keypad will allow a user to set the current time, and
|
| 48 |
|
|
set times when the outdoor lights should not be turned on (i.e., during the
|
| 49 |
|
|
daytime). Finally, the GPIO pins will be used to control a 2-line display that
|
| 50 |
|
|
will show either a blank screen (if not being used), the time of the last
|
| 51 |
|
|
doorbell press, or a menu driven screen for use with the keypad.
|
| 52 |
|
|
|
| 53 |
|
|
The UART will be (has been) used primarily as a debug port, both to output
|
| 54 |
|
|
current status (ala debug by printf), as well as to allow access to a second
|
| 55 |
|
|
S6 configuration which can be used for programming the flash.
|
| 56 |
|
|
|
| 57 |
|
|
# Current Status
|
| 58 |
|
|
|
| 59 |
|
|
20160523: I am going to place this project down in my "done" category of
|
| 60 |
|
|
projects. It currently does all that I have asked of it and all that I intended
|
| 61 |
|
|
the project to do. Please feel free to write if you have comments, thoughts,
|
| 62 |
|
|
questions, or even suggestions.
|
| 63 |
|
|
|
| 64 |
|
|
20170126: I'm in the process of updating the project to work with the newer version of the ZipCPU--the one that can handle the more traditional 8-bit bytes, rather than the 32-bit bytes the original ZipCPU could only handle.
|
| 65 |
|
|
|
| 66 |
|
|
20170309: All of the prior ZipOS functionality now works (again) using the new ZipCPU.
|
| 67 |
|
|
|