Line 27... |
Line 27... |
// Creator: Dan Gisselquist, Ph.D.
|
// Creator: Dan Gisselquist, Ph.D.
|
// Gisselquist Technology, LLC
|
// Gisselquist Technology, LLC
|
//
|
//
|
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
//
|
//
|
// Copyright (C) 2015, Gisselquist Technology, LLC
|
// Copyright (C) 2015-2016, Gisselquist Technology, LLC
|
//
|
//
|
// This program is free software (firmware): you can redistribute it and/or
|
// This program is free software (firmware): you can redistribute it and/or
|
// modify it under the terms of the GNU General Public License as published
|
// modify it under the terms of the GNU General Public License as published
|
// by the Free Software Foundation, either version 3 of the License, or (at
|
// by the Free Software Foundation, either version 3 of the License, or (at
|
// your option) any later version.
|
// your option) any later version.
|
Line 75... |
Line 75... |
// includes the multiply. (This parameter may still be overridden, as with
|
// includes the multiply. (This parameter may still be overridden, as with
|
// any parameter ...) If the multiply is not included and
|
// any parameter ...) If the multiply is not included and
|
// OPT_ILLEGAL_INSTRUCTION is set, then the multiply will create an illegal
|
// OPT_ILLEGAL_INSTRUCTION is set, then the multiply will create an illegal
|
// instruction that will then trip the illegal instruction trap.
|
// instruction that will then trip the illegal instruction trap.
|
//
|
//
|
|
// Either not defining this value, or defining it to zero will disable the
|
|
// hardware multiply. A value of '1' will cause the multiply to occurr in one
|
|
// clock cycle only--often at the expense of the rest of the CPUs speed.
|
|
// A value of 2 will cause the multiply to have a single delay cycle, 3 will
|
|
// have two delay cycles, and 4 (or more) will have 3 delay cycles.
|
//
|
//
|
`define OPT_MULTIPLY 2
|
`define OPT_MULTIPLY 4
|
//
|
//
|
//
|
//
|
//
|
//
|
// OPT_DIVIDE controls whether or not the divide instruction is built and
|
// OPT_DIVIDE controls whether or not the divide instruction is built and
|
// included into the ZipCPU by default. Set this option and a parameter will
|
// included into the ZipCPU by default. Set this option and a parameter will
|
Line 109... |
Line 114... |
//
|
//
|
// `define OPT_IMPLEMENT_FPU
|
// `define OPT_IMPLEMENT_FPU
|
//
|
//
|
//
|
//
|
//
|
//
|
// OPT_NEW_INSTRUCTION_SET controls whether or not the new instruction set
|
|
// is in use. The new instruction set contains space for floating point
|
|
// operations, signed and unsigned divide instructions, as well as bit reversal
|
|
// and ... at least two other operations yet to be defined. The decoder alone
|
|
// uses about 70 fewer LUTs, although in practice this works out to 12 fewer
|
|
// when all works out in the wash. Further, floating point and divide
|
|
// instructions will cause an illegal instruction exception if they are not
|
|
// implemented--so software capability can be built to use these instructions
|
|
// immediately, even if the hardware is not yet ready.
|
|
//
|
|
// This option is likely to go away in the future, obsoleting the previous
|
|
// instruction set, so I recommend setting this option and switching to the
|
|
// new instruction set as soon as possible.
|
|
//
|
|
`define OPT_NEW_INSTRUCTION_SET
|
|
//
|
|
//
|
|
//
|
|
//
|
|
//
|
|
//
|
//
|
// OPT_SINGLE_FETCH controls whether or not the prefetch has a cache, and
|
// OPT_SINGLE_FETCH controls whether or not the prefetch has a cache, and
|
// whether or not it can issue one instruction per clock. When set, the
|
// whether or not it can issue one instruction per clock. When set, the
|
// prefetch has no cache, and only one instruction is fetched at a time.
|
// prefetch has no cache, and only one instruction is fetched at a time.
|
// This effectively sets the CPU so that only one instruction is ever
|
// This effectively sets the CPU so that only one instruction is ever
|
Line 224... |
Line 209... |
//
|
//
|
`define OPT_PIPELINED_BUS_ACCESS
|
`define OPT_PIPELINED_BUS_ACCESS
|
//
|
//
|
//
|
//
|
//
|
//
|
`ifdef OPT_NEW_INSTRUCTION_SET
|
|
//
|
|
//
|
//
|
//
|
//
|
// The new instruction set also defines a set of very long instruction words.
|
// The new instruction set also defines a set of very long instruction words.
|
// Well, calling them "very long" instruction words is probably a misnomer,
|
// Well, calling them "very long" instruction words is probably a misnomer,
|
// although we're going to do it. They're really 2x16-bit instructions---
|
// although we're going to do it. They're really 2x16-bit instructions---
|
Line 251... |
Line 234... |
// simulator all need to be updated as well ....
|
// simulator all need to be updated as well ....
|
//
|
//
|
`define OPT_VLIW
|
`define OPT_VLIW
|
//
|
//
|
//
|
//
|
`endif // OPT_NEW_INSTRUCTION_SET
|
|
//
|
|
//
|
//
|
`endif // OPT_SINGLE_FETCH
|
`endif // OPT_SINGLE_FETCH
|
//
|
//
|
//
|
//
|
//
|
//
|