Digital Core Design

The Power of Intellectual Property

DFPIC1655X

x2 - 8-bit RISC Microcontroller

The DFPIC1655X is a low-cost, high performance, 8-bit, fully static soft IP Core, intended to operate with fast memory. The core has been designed with a special concern about low power consumption, in combination with high performance.
The DFPIC1655X software is compatible with the industry standard PIC 16XXX Microcontrollers. It has a modified RISC architecture (2 times faster than original implementation).
The DFPIC1655X has enhanced core features, configurable hardware stack and multiple internal and external interrupt sources. The separate instruction and data buses allow a 14-bit wide instruction word, with a separate 8-bit wide data.

The power-down SLEEP mode allows user to significanlty reduce power consumption and "wake up" the controller, through several external and internal interrupts and resets. An integrated Watchdog Timer with it's own dedicated clock signal, provides protection against software lock-up.
The DFPIC1655X Microcontroller fits perfectly in applications ranging from high-speed automotive and appliance motor control, to low-power remote transmitters/receivers, pointing devices and telecom processors. Built-in power save mode and small used area in programmable devices, make this IP core perfect for applications, with space and power consumption limitations.
DFPIC1655X is delivered with fully automated testbench, complete set of tests and DoCDTM on-chip hardware debugger , allowing easy package validation, at each stage of SoC design flow.

Each of the DCD's PIC Core, has built-in support for DCD Hardware Debug System, called DoCDTM. It is a real-time hardware debugger, which provides debugging capability of a whole System on Chip (SoC).

Unlike other on-chip debuggers, the DoCDTM provides a non-intrusive debugging of running application. It can halt, run, step into or skip an instruction, read/write any contents of microcontroller, including all registers, SFRs, including user defined peripherals, data and program memories. More details about DCD on Chip Debugger


Family summary

Design Architecture improvement Code space DATA space Program word Number of instructions I/O Ports Timers Watchdog Timer CCP1 USART SLEEP Mode DoCD TM Size (gates)
DFPIC165X 2 2k 128 12 bit 33 24 1 + - - + - 2700
DFPIC1655X 2 64k 32 kB 14 bit 35 16 1 + - - + + 3900
DFPIC166X 2 64k 32 kB 14 bit 35 32 3 + 1 1 + + 5800
DRPIC1655X 4 64k 32 kB 14 bit 35 32 1 + - - + + 4800
DRPIC166X 4 64k 32 kB 14 bit 35 32 3 + 1 1 + + 6700

The main features of each PIC family member have been summarized in table above. It gives a brief member characteristic, helping you to select the most suitable IP Core for your application. You can specify your own peripheral set (including listed above and the others) and requests the core modifications.

CPU Features


Symbol

 clk
 por
 mclr
 prgdata (13:0)
sleep 
prgaddr (15:0) 
 portai (7:0)
 portbi (7:0)
portao (7:0) 
portbo (7:0) 
trisa (7:0) 
trisb (7:0) 
 int
 ramdatai (7:0)
ramdatao (7:0) 
ramaddr (8:0) 
ramwe 
ramoe 
 t0cki
 clkwdt
 docddatai
docddatao 
docdclk 
prgdatao (13:0) 
prgwe 

Pins description

PinTypeDescription
clkinputGlobal clock
porinputGlobal reset Power On Reset
mclrinputUser reset
prgdata (13:0)inputData bus from program memory
portai (7:0)inputPort A input
portbi (7:0)inputPort B input
intinputExternal interrupt
ramdatai (7:0)inputData bus from int. data memory
t0ckiinputTimer 0 input
clkwdtinputWatchdog clock
docddataiinputDoCDTM data input
sleepoutputSleep signal
prgaddr (15:0)outputProgram memory address bus
portao (7:0)outputPort A output
portbo (7:0)outputPort B output
trisa (7:0)outputData direction pins for Port A
trisb (7:0)outputData direction pins for Port B
ramdatao (7:0)outputData bus for internal data memory
ramaddr (8:0)outputRAM address bus
ramweoutputData memory write
ramoeoutputData memory output enable
docddataooutputDoCDTM data output
docdclkoutputDoCDTM clock line
prgdatao (13:0)outputProgram memory data bus output
prgweoutputProgram memory write enable

Block Diagram

Control UnitIt performs the core synchronization and data flow control. This module manages execution of all instructions. It carries out the decode and control functions for all other blocks. It contains program counter (PC) and hardware stack.
mclr
sleep
prgdata (13:0)
prgaddr (15:0)
Hardware StackIt's a configurable hardware stack. The stack space is not a part of either program or data space and the stack pointer is neither readable, nor writable. The PC is pushed onto the stack, when CALL instruction is executed or an interrupt causes a branch. The stack is popped, while RETURN, RETFIE and RETLW instruction is executed. The stack operates, as a circular buffer - this means, that after the stack has been pushed eight times, the ninth push overwrites the value, that was stored from the first push.
I/O PortsBlock contains DFPIC1655X general purpose I/O ports and data direction registers (TRIS). The DFPIC1655X has two 8-bit full bi-directional ports PORT A, PORT B. Read and write accesses to the I/O port, are performed via their corresponding SFRs PORTA and PORTB. The reading instruction always reads the status of Port pins. Writing instructions, always write into the Port latches. Each port pin has an corresponding bit in TRISA and TRISB registers. When the bit of TRIS register is set, it means, that the corresponding bit of port is configured as an input (output drivers are set into the High Impedance).
portai (7:0)
portbi (7:0)
portao (7:0)
portbo (7:0)
trisa (7:0)
trisb (7:0)
Interrupt ControllerInterrupt Controller module is responsible for interrupt manage system for the external and internal interrupt sources. It contains interrupt related register, called INTCON. There are three interrupt sources:
  • External interrupt INT
  • TMR0 overflow interrupt
  • PORTB change interrupt (pins B[7:4])
INTCON records individual interrupt requests in flag bits. A global interrupt enable (GIE) bit enables all unmasked interrupts. Each interrupt source, has an individual enable bit, which can enable or disable corresponding interrupt. When an interrupt is responded to, the GIE is cleared to disable any further interrupt, the return address is pushed into the stack and the PC is loaded with 0004h. The interrupt flag bits must be cleared in software before re-enabling interrupts.
int
RAM ControllerIt performs interface functions between Data Memory and DFPIC1655X internal logic. It ensures correct Data memory addressing and data transfers. The DFPIC1655X supports two addressing modes: direct or indirect. In Direct Addressing, the 9-bit direct address is computed from RP(1:0) bits (STATUS) and from 7 least significant bits of instruction word. Indirect addressing is possible, by using the INDF register. Any instruction using INDF register, actually accesses data pointed to by the FSR (file select register). Reading INDF register indirectly, will produce 00h. Writing to the INDF register indirectly, results in a no-operation. An effective 9-bit address is obtained, by concatenating the IRP bit (STATUS) and the 8-bit FSR register.
ramdatai (7:0)
ramdatao (7:0)
ramaddr (8:0)
ramwe
ramoe
Timer 0Main system's timer and prescaler. It operates in two modes: 8-bit timer or 8-bit counter. In the \"timer mode\", timer/prescaler registers are incremented in every instruction cycle (1 or 2 CLK periods). When the prescaler is assigned into the TIMER, prescaler ratio can be divided by 2, 4, ..., 256. In the \"counter mode\", the timer register is incremented in every falling or rising edge of T0CKI pin, depending on T0SE bit in OPTION register.
t0cki
Watchdog TimerThe watchdog timer is a free running timer. WDT has its own clock input, separate from system clock. It means, that the WDT will run, even if the system clock is stopped by execution of SLEEP instruction. During normal operation, a WDT timeout generates a Watchdog reset. If the device is in SLEEP mode, the WDT timeout causes the device to wake-up and continue with normal operation.
clkwdt
ALUArithmetic Logic Unit - performs arithmetic and logic operations during execution of an instruction. This module contains work register (W) and Status register.
DoCDTM DoCDTM Debug Unit is a real-time hardware debugger, which provides debugging capability of a whole SoC system. Unlike other on-chip debuggers, DoCDTM provides non-intrusive debugging of running application. It can halt, run, step into or skip an instruction, read/write any contents of microcontroller, including all registers, internal and external program memories and all SFRs, including user defined peripherals. Hardware breakpoints can be set and controlled on program memory, internal and external data memories, as well as on SFRs. Hardware breakpoint is executed, if any write/read occurred at particular address, with certain data pattern or without pattern. The DoCDTM system includes three-wire interface and complete set of tools, to communicate and work with core, in real time debugging. It is built as scalable unit and some features can be turned off, to save silicon and reduce power consumption. When debugger is not used, it is automatically switched to power save mode. Finally, when debug option is no longer used, whole debugger is turned off.
docddatai
docddatao
docdclk
prgdatao (13:0)
prgwe
clk
por
Data bus The core internal data bus

Units

Control Unit
It performs the core synchronization and data flow control. This module manages execution of all instructions. It carries out the decode and control functions for all other blocks. It contains program counter (PC) and hardware stack.
Hardware Stack
It's a configurable hardware stack. The stack space is not a part of either program or data space and the stack pointer is neither readable, nor writable. The PC is pushed onto the stack, when CALL instruction is executed or an interrupt causes a branch. The stack is popped, while RETURN, RETFIE and RETLW instruction is executed. The stack operates, as a circular buffer - this means, that after the stack has been pushed eight times, the ninth push overwrites the value, that was stored from the first push.
I/O Ports
Block contains DFPIC1655X general purpose I/O ports and data direction registers (TRIS). The DFPIC1655X has two 8-bit full bi-directional ports PORT A, PORT B. Read and write accesses to the I/O port, are performed via their corresponding SFRs PORTA and PORTB. The reading instruction always reads the status of Port pins. Writing instructions, always write into the Port latches. Each port pin has an corresponding bit in TRISA and TRISB registers. When the bit of TRIS register is set, it means, that the corresponding bit of port is configured as an input (output drivers are set into the High Impedance).

Interrupt Controller
Interrupt Controller module is responsible for interrupt manage system for the external and internal interrupt sources. It contains interrupt related register, called INTCON. There are three interrupt sources:
  • External interrupt INT
  • TMR0 overflow interrupt
  • PORTB change interrupt (pins B[7:4])
INTCON records individual interrupt requests in flag bits. A global interrupt enable (GIE) bit enables all unmasked interrupts. Each interrupt source, has an individual enable bit, which can enable or disable corresponding interrupt. When an interrupt is responded to, the GIE is cleared to disable any further interrupt, the return address is pushed into the stack and the PC is loaded with 0004h. The interrupt flag bits must be cleared in software before re-enabling interrupts.
RAM Controller
It performs interface functions between Data Memory and DFPIC1655X internal logic. It ensures correct Data memory addressing and data transfers. The DFPIC1655X supports two addressing modes: direct or indirect. In Direct Addressing, the 9-bit direct address is computed from RP(1:0) bits (STATUS) and from 7 least significant bits of instruction word. Indirect addressing is possible, by using the INDF register. Any instruction using INDF register, actually accesses data pointed to by the FSR (file select register). Reading INDF register indirectly, will produce 00h. Writing to the INDF register indirectly, results in a no-operation. An effective 9-bit address is obtained, by concatenating the IRP bit (STATUS) and the 8-bit FSR register.
Timer 0
Main system's timer and prescaler. It operates in two modes: 8-bit timer or 8-bit counter. In the \"timer mode\", timer/prescaler registers are incremented in every instruction cycle (1 or 2 CLK periods). When the prescaler is assigned into the TIMER, prescaler ratio can be divided by 2, 4, ..., 256. In the \"counter mode\", the timer register is incremented in every falling or rising edge of T0CKI pin, depending on T0SE bit in OPTION register.

Watchdog Timer
The watchdog timer is a free running timer. WDT has its own clock input, separate from system clock. It means, that the WDT will run, even if the system clock is stopped by execution of SLEEP instruction. During normal operation, a WDT timeout generates a Watchdog reset. If the device is in SLEEP mode, the WDT timeout causes the device to wake-up and continue with normal operation.
ALU
Arithmetic Logic Unit - performs arithmetic and logic operations during execution of an instruction. This module contains work register (W) and Status register.
DoCDTM
DoCDTM Debug Unit is a real-time hardware debugger, which provides debugging capability of a whole SoC system. Unlike other on-chip debuggers, DoCDTM provides non-intrusive debugging of running application. It can halt, run, step into or skip an instruction, read/write any contents of microcontroller, including all registers, internal and external program memories and all SFRs, including user defined peripherals. Hardware breakpoints can be set and controlled on program memory, internal and external data memories, as well as on SFRs. Hardware breakpoint is executed, if any write/read occurred at particular address, with certain data pattern or without pattern. The DoCDTM system includes three-wire interface and complete set of tools, to communicate and work with core, in real time debugging. It is built as scalable unit and some features can be turned off, to save silicon and reduce power consumption. When debugger is not used, it is automatically switched to power save mode. Finally, when debug option is no longer used, whole debugger is turned off.