Systemc From The Ground Up 1St Edition by David Black, Jack Donovan Isbn 9780387308647 038730864X
Systemc From The Ground Up 1St Edition by David Black, Jack Donovan Isbn 9780387308647 038730864X
https://ebookball.com/product/diversity-and-inclusion-in-the-start-up-
ecosystem-24752/
https://ebookball.com/product/bionanotechnology-lessons-from-
nature-1st-edition-by-david-goodsell-047141719x-9780471417194-13002/
SYSTEMC: FROM THE GROUND UP
This page intentionally left blank
SYSTEMC: FROM THE GROUND UP
By
No part of this eBook may be reproduced or transmitted in any form or by any means, electronic,
mechanical, recording, or otherwise, without written consent from the Publisher
Dedication v
Preface xi
Why this Book xi
Prerequisites for this Book xii
Book Conventions xiii
About the Examples xiv
How to Use this Book xiv
SystemC Background xv
The Evolution of SystemC xv
Open SystemC Initiative xvii
2. TLM-Based Methodology 11
2.1 Transaction-Level Modeling Overview 11
2.2 Abstraction Models 13
2.3 Another Look at Abstraction Models 15
2.4 TLM-Based Methodology 16
2.5 Summary 23
viii SystemC: From The Ground Up
3. Overview of SystemC 25
3.1 C++ Mechanics for SystemC 26
3.2 SystemC: A C++ Class for Hardware 30
3.3 Overview of SystemC Components 33
3.4 SystemC Simulation Kernel 38
4. Data Types 41
4.1 Numeric Representation 41
4.2 Native Data Types 43
4.3 Arithmetic Data Types 43
4.4 Boolean and Multi-Value Data Types 45
4.5 Fixed-Point Data Types 47
4.6 Operators for SystemC Data Types 51
4.7 Higher Levels of Abstraction and the STL 52
4.8 Choosing the Right Data Type 55
4.9 Exercises 56
5. Modules 57
5.1 A Starting Point: sc_main 57
5.2 The Basic Unit of Design: SC_MODULE 59
5.3 The SC_MODULE Class Constructor: SC_CTOR 60
5.4 The Basic Unit of Execution: SystemC Process 61
5.5 Registering the Simple Process: SC_THREAD 62
5.6 Completing the Simple Design: main.cpp 64
5.7 Alternative Constructors: SC_HAS_PROCESS 64
5.8 Two Basic Styles 66
5.9 Exercises 70
6. A Notion of Time 71
6.1 sc_time 71
6.2 sc_start() 72
6.3 sc_time_stamp () and Time Display 73
6.4 wait(sc_time) 74
6.5 sc_simulation_time(), Time Resolution and Time Units 75
6.6 Exercises 76
7. Concurrency 77
7.1 sc_event 78
7.2 Simplified Simulation Engine 79
7.3 SC_THREAD 81
7.4 Dynamic Sensitivity for SC_THREAD::wait() 81
7.5 Another Look at Concurrency and Time 83
7.6 Triggering Events: .notify() 86
Contents ix
7.7 SC_METHOD 90
7.8 Dynamic Sensitivity for SC_METHOD: next_trigger() 92
7.9 Static Sensitivity for Processes 93
7.10 dont_initialize 96
7.11 sc_event_queue 97
7.12 Exercises 98
8. Basic Channels 99
8.1 Primitive Channels 100
8.2 sc_mutex 100
8.3 sc_semaphore 102
8.4 sc_fifo 104
8.5 Exercises 107
Acknowledgments 227
Notes 237
Index 239
Preface
The first question any reader should ask is “Why this book?” We decided
to write this book after learning SystemC and after using minimal documents
to help us through the quest of becoming comfortable with the language’s
finer points. After teaching several SystemC classes, we were even more
convinced that an introductory book focused on the SystemC language was
needed. We decided to contribute such a book.
This book is about SystemC. It focuses on enabling the reader to master
the language. The reader will be introduced to the syntax and structure of the
language, and the reader will also learn about the features and usage of
SystemC that makes it a tool to shorten the development cycle of large
system designs.
We allude to system design techniques and methods by way of examples
throughout the book. Several books that discuss system-level design
methodology are available, and we believe that SystemC is ideally suited to
implement many of these methods. After reading this resource, the reader
should not only be adept at using SystemC constructs efficiently, but also
have an appreciation of how the constructs work together and how they can
be used to create high performance simulation models.
We believe there is enough information to convey about the SystemC
language to justify this stand-alone book. We hope you agree. We also
believe that there is enough material for a second book that focuses on using
SystemC to implement these system-level design methods. With reader
xii SystemC: From The Ground Up
As with every technical book, the authors must write the content
assuming a basic level of understanding; this assumption avoids repeating
most of an engineering undergraduate curriculum. For this book, we
assumed that the reader has a working knowledge of C++ and minimal
knowledge of hardware design.
For C++ skills, we do not assume that the reader is a “wizard”. Instead,
we assumed that you have a good knowledge of the syntax, the object-
oriented features, and the methods of using C++. The authors have found
that this level of C++ knowledge is universal to current or recent graduates
with a computer science or engineering degree from a four-year university.
Interestingly, the authors have also found that this level of knowledge is
lacking for most ASIC designers with 10 or more years of experience. For
those readers, assimilating this content will be quite a challenge but not an
impossible one.
For readers without any understanding of C++ or for those who may be
rusty, we recommend finding a good C++ class at a community college or
taking advantage of many of the online tutorials. For a list of sources, see
Chapter 15. We find (from our own experience) that those who have learned
several procedural languages (like FORTRAN or PL/I) greatly
underestimate the difficulty of learning a modern object-oriented language.
To understand the examples completely, the reader will need minimal
understanding of digital electronics.
Preface xiii
Book Conventions
wait(name.posedge_event()|eventi...);
if (name.posedge()) { //previous delta-cycle
//ACTIONS...
1
John Backus and Peter Naur first introduced BNF as a formal notation to describe the syntax
of a given language. NAUR, Peter (ed.), “Revised Report on the Algorithmic Language
ALGOL 60.”, Communications of the ACM, Vol. 3 No.5, pp. 299-314, May 1960
xiv SystemC: From The Ground Up
The authors designed this book primarily for the student or engineer new
to SystemC. This book’s structure is best appreciated by reading sequentially
from beginning to end. A reader already familiar with SystemC will find this
content to be a great reference.
Chapters 1 through 3 provide introductions and overviews of the
language and its usage. Methodology is briefly discussed.
For the student or engineer new to SystemC, the authors present the
language from the bottom up and explain the topics from a context of C++
with ties to hardware concepts. We provide exercises at the end of Chapters
4 through 14 to reinforce the concepts presented in the text. Chapter 15
backs up the basic language concepts with a discussion of areas to watch
when designing, writing, or using SystemC in a production environment.
Preface xv
SystemC Background
As you will learn while reading this book, SystemC consists of the
language and potential methodology-specific libraries. The authors view the
SystemC Verification (SCV) library as the most significant of these libraries.
This library adds support for modern high-level verification language
concepts such as constrained randomization, introspection, and transaction
recording. The first release of the SCV library occurred in December of
2003 after over a year of Beta testing.
Now that we have given you a map of where SystemC fits into the
modern design language landscape, we will discuss some motivation for
learning SystemC.
Unless a new language solves a problem that current languages do not
address, you have no practical reason for learning that language (other than
academic curiosity). The rest of this chapter will discuss the set of problems
that you need to address with new methodologies and the types of solutions
that SystemC is enabling. Understanding SystemC’s solutions should help
you understand some of the language trade offs that you may question when
you dive into language details presented in Chapter 3, SystemC Overview.
The primary driver leading to the need for a new system design language
is the same that previously lead to the need for the current design languages:
increasing design complexity.
Modern electronic systems consist of many sub-systems and components,
but we will focus primarily on hardware, software, and algorithms. In
modern systems, each of these disciplines has become more complex.
Likewise, the interaction has become increasingly complex.
Interactions imply that trade offs between the domains are becoming
more important for meeting customer requirements. System development
teams find themselves asking questions like, “Should this function be
implemented in hardware, software, or with a better algorithm?” Systems are
so complex, just deriving specifications from customer requirements has
become a daunting task.
Figure 1-2 illustrates the complexity issues for hardware design in a large
system on a chip (SoC) design. The figure shows three sample designs from
three generations: yesterday, today (2003), and tomorrow. In reality,
tomorrow’s systems are being designed today. The bars for each generation
imply the code complexity for four common levels of abstraction associated
with system hardware design:
Architecture
Behavioral
RTL
Gates
An Overview to System Design Using SystemC 5
Abstraction
Design reuse
Team discipline
Project reuse
Automation
Let’s look at each of these approaches in turn.
1.5.2.1 Abstraction
In the past, the primary technique for managing complexity for both the
software and hardware community has been to raise the level of abstraction
used for design. This approach will be the primary technique for the future
as well.
For software developers, the transition was from assembler code to
higher level languages like FORTAN and PL/I, and then to even more
abstract languages like Lisp, Ada, and multi-paradigm languages such as
C++. Today’s software practitioners grapple with a plethora of fifth-
generation languages as they strive to find the appropriate level of
abstraction, expressiveness, flexibility, and performance required to develop
and maintain modern systems. Modular programming, data hiding, object-
oriented design, generic programming, exception and constraint handling all
aim to manage complexity.
For the hardware community, the path started with polygon definitions
hand drawn on Mylar film. Gate-level design was enabled through a variety
of schematic capture tools and gate-level languages that appear very crude
by today’s standards. In the late 1980s, VHDL and Verilog enabled process-
independent ASIC simulation, documentation, and net list development, and
eventually RTL synthesis.
Unfortunately, the synthesizable RTL subsets of VHDL and Verilog
force hardware designers to specify behavior on every clock edge, which
offers less abstraction than C offers the software designer. While object-
oriented software design and C++ accelerated in the 1990s, EDA vendors
attempted to keep pace by offering behavioral synthesis tools that could
build circuits from more abstract VHDL and Verilog descriptions. For a
An Overview to System Design Using SystemC 7
variety of reasons, designers gave these tools a cool reception, and major
EDA vendors shifted their focus toward design reuse and meeting designer
productivity requirements.
As a result, the hardware community has not coherently raised the design
abstraction level beyond RTL for almost 20 years, and the community has
instead focused on design reuse, team discipline, and automation.
2
Keating, M., Bricaud, P. 2002. Reuse Methodology Manual for System-On-A-Chip Designs.
Norwell, Massachusetts: Kluwer Academic Publishers.
3
Chang, H., Cooke, L., Hunt, M., Martin, G., McNelly, A., Todd, L. 1999. Surviving the SOC
Revolution: A Guide to Platform-Based Design. Norwell, Massachusetts: Kluwer
Academic Publishers.
8 SystemC: From The Ground Up
1.5.2.5 Automation
Another important method for tackling design complexity is design
process automation. The EDA industry has continually provided tools that
improve designer productivity, and will continue to do so.
This productivity comes with a price—both monetary and team
discipline. Most EDA tools come with coding guidelines to maximize tool
performance and engineer productivity. In particular, with the exponentially
increasing amount of RTL code required in modern systems, automatic code
generation will play an increasing role, and adherence to guidelines for the
code generation tools will be essential. Team discipline techniques go a long
way towards optimal leveraging of the EDA tools they use.
In addition to automatic code generation, automation written by the
development team (usually during unpaid overtime) has always been
necessary to some extent, and it will continue to be of prime importance for
system design flows.
TLM-BASED METHODOLOGY
In the past, when many systems were a more manageable size, a system
could be grasped by a single person known by a variety of titles such as
system architect, chief engineer, lead engineer, or project engineer. This
guru may have been a software engineer, hardware engineer, or algorithm
expert depending on the primary technology leveraged for the system. The
complexity was such that this person could keep most or all of the details in
his or her head, and this technical leader was able to use spreadsheets and
paper-based methods to communicate thoughts and concepts to the rest of
the team.
The guru’s background usually dictated his or her success in
communicating requirements to each of the communities involved in the
design of the system. The guru’s past experiences also controlled the quality
of the multi-discipline trade offs such as hardware implementation versus
software implementation versus algorithm improvements.
In most cases, these trade offs resulted in conceptual disconnects among
the three groups. For example, cellular telephone systems consist of very
complex algorithms, software, and hardware, and teams working on them
have traditionally leveraged more rigorous but still ad-hoc methods.
These methods usually consist of a software-based model; sometimes
called a system architectural model (SAM), written in C, Java, or a similar
language. The model is a communication vehicle between algorithm,
hardware, and software groups. The model may be used for algorithmic
refinement or used as basis for deriving hardware and software subsystem
specifications. The exact parameters modeled are specific to the system type
12 SystemC: From The Ground Up
and application, but the model is typically un-timed (more on this topic in
the following section). Typically, each team then uses a different language to
refine the design for their portion of the system. The teams leave behind the
original multi-discipline system model and in many cases, any informal
communication among the groups.
With rapidly increasing design complexity and the rising cost of failure,
system designers in most product domains will need a similar top-down
approach but with an improved methodology. An emerging system design
methodology based on Transaction-Level Modeling (TLM) is evolving from
the large system design methodology discussed above. This emerging
methodology has significantly more external and project design reuse
enabled by a language like SystemC.
Transaction-level modeling is an emerging concept without precise
definitions. A working group of Open SystemC Initiative (OSCI) is currently
defining a set of terminology for TLM and will eventually develop TLM
standards. In reality, when engineers talk of TLM, they are probably talking
about one or more of four different modeling styles that are discussed in the
following section.
The underlying concept of TLM is to model only the level of detail that
is needed by the engineers developing the system components and sub-
system for a particular task in the development process. By modeling only
the necessary details, design teams can realize huge gains in modeling speed
thus enabling a new methodology. At this level, changes are relatively easy
because the development team has not yet painted itself into a corner with
low-level details such as a parallel bus implementation versus a serial bus
implementation.
Using TLMs makes tasks usually reserved for hardware implementations
practical to run on a model early in the system development process. TLM is
a concept independent of language. However, to implement and refine TLM
models, it is helpful to have a language like SystemC whose features support
independent refinement of functionality and communication that is crucial to
efficient TLM development.
Before exploring this new design methodology we will explore some of
the background and terminology around TLM.
TLM-Based Methodology 13
Several sets of terminology have been defined for the abstraction levels
traditionally used in system models. We are presenting a slight variation of a
model developed and presented by Dan Gajski and Lukai Cai at CODES
(HW/SW Co-Design Conference) 2003 that is illustrated in Figure 2-1.
The first concept necessary for understanding TLM is that system and
sub-system communication and functionality can be developed and refined
independently. In this terminology, the communication and functionality
components can be un-timed (UT), approximately-timed (AT), or cycle-
timed (CT).
All of these models are not necessary for most systems. In reality, most
systems only need to progress through two or three points on the graph in
Figure 2-1. With a language that supports refinement concepts, the
transformation can be quite efficient.
TLM-Based Methodology 15
Now that we have discussed some of the TLM concepts, we can look
more closely at a TLM-based methodology as illustrated in Figure 2-3.
In this methodology, we still start with the traditional methods used to
capture the customer requirements, a paper Product Requirements Document
(PRD). Sometimes, the product requirements are obtained directly from a
customer, but more likely the requirements are captured through the research
of a marketing group.
From the PRD, a SAM is developed. The SAM development effort may
cause changes or refinement to the PRD. The SAM is usually written by an
architect or architecture group and captures the product specification or
system critical parameters. In an algorithmic intensive system, the SAM will
be used to refine the system algorithms.
The SAM is then refined into a TLM that may start as a component
assembly type of TLM and is further refined to a bus arbitration model. The
TLM is refined further as software design and development and hardware
verification environment development progresses.
TLM-Based Methodology 17
18 SystemC: From The Ground Up
In complex systems where new software and new hardware are being
created, software developers must often wait for the hardware design to be
finalized before they can begin detailed coding. Software developers must
also wait for devices (ICs and printed circuit boards) to be manufactured to
test their code in a realistic environment. Even then, creating a realistic
environment on a lab workbench can be very complex. This dependency
creates a long critical path that may add so much financial risk to a project
that it is never started.
Figure 2-4 illustrates a traditional system development project schedule.
The arrows highlight differences a TLM-based methodology would make.
The time scale and the duration of each phase depend on the project size,
project complexity, and the makeup of the system components (hardware,
software, and algorithms).
20 SystemC: From The Ground Up
Creating a TLM from the SAM slightly lengthens the architectural design
phase of a project, but it offers several potential benefits:
System design teams are always looking for ways to provide more and
better functional verification of the hardware. The number of cases required
to functionally verify a system is growing even faster than the actual system
complexity.
Verifying the hardware interaction with the actual software and firmware
before creating the hardware is becoming increasingly more important. With
the chip mask set costs exceeding several hundred thousand dollars, finding
out after making chips that a software workaround for the hardware is
impossible or too slow is not acceptable. As a result, many teams are
developing simulation and emulation techniques to verify the hardware
interaction with the software and firmware.
Additionally, with the increase in size and complexity of the hardware, it
is increasingly important to verify that unforeseen interactions within the
chip, between chips, or between chips and software do not create
unacceptable consequences. Debugging these interactions without
significant visibility into the state of the chip being verified is very tough.
Very large Verilog or VHDL simulations along with emulation strategies
have traditionally been used for system-level functional verification. With
increasing system complexity, Verilog and VHDL simulations have become
too slow for such verification. Hardware emulation techniques have been
TLM-Based Methodology 21
used when simulation has been too slow, but emulation techniques often
have limited state visibility for debugging, and they can be very expensive.
When a design team develops a TLM, it is straightforward to refine the
model to a verification environment through the use of adapters as outlined
in the following section.
This section is a very brief overview of how a TLM model can be used as
part of an overall system functional verification strategy. With modern
systems, the hardware design is not fully debugged until it is successfully
running the system software. This approach enables functional verification
of the hardware with the system software prior to hardware availability.
More details about implementation of this approach are given in Chapter 13,
Custom Channels, and other sources4.
To show one way that adapters can be applied to a TLM to create a
verification environment, we will assume a generic system that looks like
Figure 2-5. The generic system is composed of a microprocessor, memory, a
couple of devices, and a bus with an arbiter.
4
Grotker, T., Liao, S., Martin, G., Swan, S. 2002. System Design with SystemC. Norwell
Massachusetts: Kluwer Academic Publishers.
22 SystemC: From The Ground Up
2.5 Summary
OVERVIEW OF SYSTEMC
For the rest of this chapter, we will discuss all of the components within
the figure that are outlined in bold, but only after discussing the SystemC
development environment and a few of the hardware-oriented features
26 SystemC: From The Ground Up
SystemC-supported platform
SystemC-supported C++ compiler
SystemC library (downloaded and compiled)
Compiler command sequence, make file, or equivalent
The latest OSCI reference SystemC release (2.0.1 at this writing)6 is
available for free from www.systemc.org. The download contains scripts and
make files for installation of the SystemC library as well as source code,
examples, and documentation. The install scripts are compatible with the
supported operating systems, and the scripts are relatively straightforward to
execute by following the documentation.
The latest OS requirements can be obtained from the download in a
readme file currently called INSTALL. SystemC is supported on various
flavors of Sun Solaris, Linux, and HP/UX. At this time, the OS list is limited
by the use of some assembly code that is used for increased simulation
performance in the SystemC simulation kernel. The current release is also
supported for various C++ compilers including GNU C++, Sun C++, and HP
5
For example, read the book, Microelectrofluidic Systems: Modeling and Simulation by
Tianhao Zhang et al., CRC Press, ISBN: 0849312760.
6
SystemC version 2.1 should be available during the summer of 2004, and supports more
platforms and compilers including MacOS X. Be sure to read the release notes carefully.
Overview of SystemC 27
C++. The currently supported compilers and compiler versions can also be
obtained from the INSTALL readme file in the SystemC download.
For beginners, this list should be considered exhaustive, although some
hardy souls have ported various SystemC versions to other unsupported
operating systems and C++ compilers. In addition, you will need gmake
installed on your system to quickly compile and install the SystemC library
with the directions documented in the INSTALL file.
The flow for compiling a SystemC program or design is very traditional,
and is illustrated in Figure 3-2 for GNU C++. Most other compilers will be
similar. The C++ compiler reads each of the SystemC code file sets
separately and creates an object file (usual file extension of . o). Each file set
usually consists of two files typically with standard file extensions. We use
.h and .cpp as file extensions, since these are the most commonly used in
C++. The .h file is generally referred to as the header file and the .cpp file
is often called the implementation file.
After creating the object files, the compiler (actually the loader or linker)
will link your object files and the appropriate object files from the SystemC
library (and other libraries such as the standard template library or STL).
The resulting file is usually referred to as an executable, and it contains the
SystemC simulation kernel and your design functionality.
The compiler and linker need to know two special pieces of information.
First, the compiler needs to know where the SystemC header files are
located (to support #include <systemc.h>). Second, the linker needs to
know where the compiled SystemC libraries are located. This is typically
28 SystemC: From The Ground Up
7
For some installations, dynamic libraries may also be referenced if using the SystemC
Verification library.
Overview of SystemC 29
#include <systemc.h>
#include <iostream>
SC_MODULE(Hello_SystemC) {//declare the module class
sc_in_clk iclk; //define the clock port
SC_CTOR(Hello_SystemC) {//create a constructor
SC_METHOD(main_method) ;// register the main
// process
sensitive << iclk.neg();//specify clk
// sensitivity
dont_initialize(); //skip initial call
}
void main_method(void) {
std::cout << sc_time_stamp()
<<" Hello world!"
<< std::endl;
}
};
int sc_main(int argc, char* argv[]) {
//declare a time constant
const sc_time t_PERIOD (8,SC_NS) ;
//create periodic clock
sc_clock clk ("clk", t_PERIOD);
//create an instance
HelloWorld iHelloWorld ("iHelloWorld");
//connect the clock port and clock
iHelloWorld.iclk(clk) ;
// invoke the simulator
sc_start(10,SC_NS ) ;
return 0;
}
Time model
Hardware data types
Module hierarchy to manage structure and connectivity
Communications management between concurrent units of
execution
Concurrency model
The following sections briefly discuss the implementation of these
concepts within SystemC.
The wide variety of data types required by digital hardware are not
provided inside the natural boundaries of C++ native data types, which are
typically 8-, 16-, 32-, and 64-bit entities.
SystemC provides hardware-compatible data types that support explicit
bit widths for both integral (e.g., sc_int<>) and fixed-point (e.g.,
sc_fixed<>) quantities. These data types are implemented using templated
classes and generous operator overloading, so that they can be manipulated
and used almost as easily as native C++ data types.
Furthermore, digital hardware can represent non-binary quantities such as
tri-state and unknown state. These are supported with four-state logic
(0,1,X,Z) data types (e.g., sc_logic). SystemC provides all the necessary
methods for using hardware data types, including conversion between the
hardware data types and conversion from hardware to software data types.
Finally, hardware is not always digital. SystemC does not currently
directly support analog hardware; however, a working group has been
formed to investigate the issues associated with modeling analog hardware
in SystemC. For those with immediate analog issues, it is reasonable to
model analog values using floating-point representations and providing the
appropriate behavior.
They had a peaceful night, with one exception. Along in the small
hours Bluff was heard to give a sudden wild whoop:
“Get out, you cowardly beast!” he cried at the top of his voice. Of
course there was considerable excitement.
Frank had been wise enough to bring a little vest-pocket type of
electric torch with him, knowing how valuable such a contrivance
may be at times. He instantly switched on the light; and, as he
picked up his gun with one hand, he managed to turn the white
glow upon the bunk occupied by Bluff.
The latter had apparently subsided, for no more shouts rang out.
Frank discovered him lying there rubbing his eyes. He looked as
though hardly knowing whether to burst out laughing or appear
ashamed of having startled the others so.
“What’s all this row mean, Bluff?” demanded Frank sternly.
“Shucks! I guess I must have been dreaming, that’s all,” he was told.
“What nipped you? Because you acted as if it hurt,” Jerry asked.
“Why, you see,” explained Bluff, “I had come across that big Bill
Nackerson, while roamin’ through the woods, and he managed to
sneak my gun away when I wasn’t looking. Then what did he do but
sic that mangy cur of his on me. I was kickin’ like everything at him.
See how I sent my blanket out on the floor. All I wanted was one
sound smack at his ugly jaws. I’m sorry I woke up so soon, because
next time I’d have fetched him.”
“Well, go to sleep again, and let’s hope you dream of other things
besides scrapping,” advised Jerry, as he proceeded to once more
deposit his gun in a corner, and crawl under his blanket.
Bluff must have taken the advice to heart; at any rate his voice was
not heard again until Frank pounded on the frying-pan to let the
sleepers know it was time to creep out. Then each one in turn
wanted to learn whether breakfast was ready.
As they ate they began to lay out plans for the day.
“Of course Bluff and Frank must try to get us some venison,” Will
said; “and that’ll leave Jerry to assist me in camp. Besides, I want to
find places to fix up my flashlight for the next night. If I can get a
picture of some animal, taken by himself, it’ll please me a heap.
What you know about the habits of these little creatures will help me
out lots, Jerry.”
“I may be able to give a little advice, too, Will,” the latter remarked,
as he helped himself to another flapjack; “because, you know, I
went out with that gentleman who was stopping at our house late
this fall. He had the flashlight habit about as bad as any one I’ve
ever met.”
“Oh! you did mention it to me once, I remember,” said the other,
evidently much pleased. “Then you may have picked up a few little
wrinkles that will help me out in my game.”
“Leave that to me,” replied Jerry, swelling with importance. “I can
put you wise to heaps of things. You see, I like to ask questions, and
Mr. Mallon always gave me the straight answer.”
Breakfast was now about over, and the proposed hunt came next in
order.
Frank never went off without making sure of a number of small but
very important things. First of all he carried a compass. Next he
made certain that he had an abundance of matches. After that
ammunition was taken care of, and last of all enough food for a
“snack.”
Frank was also a great hand for arranging a code of signals with his
chums. This was an easy thing to do, because they had gone
together so long now that they had a regular system that could be
used as a means of conferring with one another, even when a
considerable distance apart.
“Will’s mentioning that he wished we’d thought to fetch some syrup
or honey along to go with the flapjacks,” Frank was saying, just
before they broke away from camp, “makes me think that there are
plenty of wild bees up here in Maine. Men hunt for their tree hives
every season, and often find stacks of good honey, too.”
“Then, for goodness’ sake, fellows,” exclaimed Will, “please keep an
eye out for any sign of a hive. Nothing would please me better than
to have a pail of honey on hand. I’d just like to fill myself up with it,
for once.”
“It’s a poor time of year to find a bee tree,” said Frank. “They usually
look for a hive in summer, when the bees are flying and can be
traced. Often the storehouse is away up at the top of a high tree.
The weather is so cold now there wouldn’t be any young bees airing
themselves in the sun.”
“Well, you never know,” ventured Jerry; “and, as you saunter along,
just watch out for the signs. I understand bears often raid a hive.
You might find empty combs lying on the ground under some tree.”
“Make up your mind we’ll not forget to keep an eye out,” Frank
assured the camp guardians. “That reminds me, I promised to tell
you a lot of interesting things about this country up here. I’ll do it to-
night, if you mention it to me after supper.”
“I’ll remind you, sure thing,” returned Bluff eagerly, “because I
understand that a whole army of people make some sort of a living
out of the Maine woods, and I’ve always wanted to know how they
could do it. Take my gun away, and I’d like as not starve to death
here inside of a week.”
“All because you haven’t been brought up in Maine,” Frank told him,
“and are as good as blind to the wonderful opportunities all around
you. But, if you’re ready, Bluff, let’s be starting off.”
“Good luck to you!” cried Will, who was already engaged with his
camera.
Bluff was soon tagging along at the heels of Frank, though
occasionally he took a notion to push to the front. This was when he
fancied that a particular patch of undergrowth looked promising.
Being in a humor to gather in a few of the numerous plump
partridges that they knew were to be found in the timber, Bluff had
his pump-gun loaded with shells containing moderate loads of
powder and small shot. He thought that, with Frank at his side
carrying a repeating rifle, there was no need of both being on the
lookout for big game.
They walked on, apparently in an aimless fashion, but Frank knew
just where he was going. One of his objects had been to avoid
heading in the quarter where he had reason to believe that deserted
trapper’s cabin was located, near the edge of the muskrat marsh. If,
as they feared, it was now occupied by Bill Nackerson and his crew,
Frank wanted to keep as far away from the place as he could.
Suddenly there came a humming sound, that caused Bluff to throw
up his gun. With a quick discharge a flutter of feathers announced
that he had made a hit.
“That’s a good start, Bluff,” Frank told him; “you got your bird, all
right; but, hold on—don’t think of rushing over there. There were
two others, and perhaps you don’t know a queer way partridges
have of lighting on the lower limbs of trees after being flushed.”
“Say, that’s a fact, you did tell me that once, but I’d forgotten it,”
Bluff candidly admitted. “And they use a dog to scare the birds up.
That was what Nackerson had trained his cur to do, wasn’t it?”
“They bark and run about under the tree after the birds have taken
to the limbs,” Frank continued; “and so the hunter can walk up close
to pick his shot. It’s easy work, and when the partridges are thick up
here no one need go hungry.”
“Well, all I’ve ever shot went off like a hurricane; and often I’ve had
to let fly with my gun part way up to my shoulder. Do you see either
of the others, Frank?”
“Yes, and, as luck will have it, they’ve lighted in such a way that
they’re both in range. I believe you could drop two birds with one
shot, Bluff.”
“I see ’em now,” muttered Bluff. “Watch my smoke.”
When he fired again both birds fell. Bluff looked as though half-
ashamed of such easy work.
“Three already, eh? Nearly a chicken apiece, all around. Well, I might
limit myself to just one more, and then call my part of the business
off for to-day.”
He loaded himself down with the partridges, though Frank offered to
carry one or more for him.
“You’ll need both hands for quick work, if we should happen to start
a deer a little later on,” Bluff replied, giving Frank a cheery smile.
“Listen, there goes a gun!” said Frank, soon afterward.
“There’s another—yes, and a whole raft of them!” cried Bluff. “Of
course it’s that crowd of Nackerson’s. I’m glad they’re pretty far
away from here.”
“Yes, and we’ll make a detour, so as not to get any closer to them,”
Frank said, as he changed their course.
“I hope this new ground will give us better luck,” Bluff went on.
They continued to push on until half a mile had been traversed.
It happened that Bluff was a little in advance of his chum, when,
without the least warning, there was a sudden crash in the thicket.
Then he saw something dun-colored spring away.
“Oh! Frank! look, there he goes skipping out; and it’s a three-
pronged buck, at that!” he shouted.
Then, realizing that he might be interfering with the other’s aim,
being in line with the fleeing deer, Bluff dropped flat to the ground.
CHAPTER VIII—FUR AND FEATHERS
Crack!
That was Frank’s rifle, as Bluff well knew.
“Hurrah; he’s down, Frank; you got him that time! No, there he’s on
his feet again, as sure as anything. Oh, why didn’t I have buckshot
shells in my gun? There! That time you did drop him for keeps!
Bully! bully! bully!”
Bluff immediately got upon his feet, and, as well as his burden would
admit, started to run toward the spot were he had last seen the
buck go down.
Frank was following close at his heels, calling to him to go slow,
because it sometimes happened that a wounded buck proved
himself a dangerous antagonist.
It turned out, however, that there was nothing to fear. The deer was
dead when they arrived beside him.
“See, here’s where your first bullet struck him, Frank—just back of
the shoulder. He must have been swerving when you fired that shot
Would that have killed him, even if you didn’t fire again?”
“In time it would,” the other assured him, “though I’ve known deer
to run miles before dropping, after being hit in the body. That was a
poor shot for me.”
“But, when a buck is humping himself to get away, it strikes me a
fellow is doing pretty well to be able to hit him at all,” Bluff
remarked.
“I’m not proud of it, I can tell you. I had a fair chance, too,” Frank
continued. “The second shot was better, and finished him at once.
Well, here’s your venison, Bluff. What are you going to do with it
now?”
“He’s a whole lot bigger than any of the little deer we shot down in
Florida, that’s sure,” Bluff observed, “and, as we must be some miles
away from camp, excuse me from helping to lug him there. Suppose
we cut up the carcass, Frank? You’re a clever hand at that sort of
work. We could make up a pack of the best parts; and hang up
some more so it’d be out of the reach of foxes and skunks, and the
like.”
“Yes, and pick it up to-morrow, or another day, when perhaps luck
fails us,” ventured the leader, as though the idea appealed to him. “I
think that is the best plan, Bluff, so here goes.”
Accordingly he set aside his gun, after replacing the two spent
cartridges so as to always have the full set of six in magazine and
chamber. After that he got busy with his hunting knife.
Bluff hovered around, ready to assist when asked. Frank knew
considerable about such things, for he proved very deft with his
sharp blade.
The buck’s head was hung from a tree, high enough to keep any
animal from reaching it.
“Of course,” Frank explained, after they had managed to do this, “if
a hungry bobcat came along we couldn’t hope to prevent it from
getting there; and a Canada lynx would think nothing of making a
spring twice that high. But what we want most of all are the antlers;
and this will save them for us.”
He also made one package of meat to take home, and another that
they hung from a limb the same way the buck’s head had been.
“Now, are we ready to start for home?” asked Bluff, when all these
things had been looked after.
“Yes, because we’ve gone far enough for one thing,” replied Frank;
“and then, besides, we have all the game we need for the present.”
“Three birds is a poor number for our crowd,” the other protested.
“Either somebody has to go without, or else they must be divided
up.”
“Well, keep on the watch, and perhaps you may get a crack at
another on the way back to camp,” Frank advised him.
“Guess I will, and thank you for telling me, Frank. It was hardly fair,
though, for you to make all that venison up in just one pack. Why
didn’t you fix it so I could tote some on my back?”
“I figured that three fat partridges would be about as much as any
fellow cared to carry; and, if you should bag another, that’d make it
complete. So forget it, and be on the watch.”
That was Frank’s way, and Bluff knew it was no use trying to make
him change his plans. There was not a selfish bone in Frank
Langdon’s body—even his worst enemy would admit that much.
Before ten minutes had passed the chance came whereby Bluff was
enabled to fill out his assortment of partridges, so that every camper
could have one.
“That was a fine shot, Bluff!” Frank told him, when he had seen how
the spinning bird dropped like a stone the instant the gun was
discharged.
“That’s nice of you to say, Frank; sometimes I do manage to get
where I aim.”
They had to rest several times while on the way home. Finally the
cabin near the bank of the partly frozen creek was reached. Jerry
spied them coming, and at once set up a yell.
“Come out here, Will; hurry up!”
Immediately the other came flying into view. He carried his camera
in his hand, and there was a startled expression on his face.
“It isn’t fair to give a fellow a scare like that, Jerry,” he said
reproachfully. “I certainly thought a bear had you up a tree, and I
hoped to get the picture. It would have been the prize of my
collection, too. Now it turns out that it’s only Frank and Bluff coming
home from their hunt.”
“Well, that ought to make a good scene for a picture, oughtn’t it?”
Jerry demanded. “See what they’ve got with them, will you? A big
pack that contains venison, I know, because that’s a deer-skin it’s
wrapped in. And see Bluff fairly staggering under his load of game.
Boys, we’re proud of you.”
“Now we can begin to live like real hunters,” Will remarked, after he
had clicked his camera deftly, getting the proper light on the
returned chums. “With partridge and venison hung up we’ll be in
clover. All I’d like to see now would be a haunch of bear meat
alongside.”
Of course they must have plenty of the fruits of the hunt for supper
that night. The birds were immediately prepared and baked in an
oven that Frank showed them how to make, using a hole dug in the
ground.
“This way of baking game is an old hunter’s trick,” said Frank, while
he was excavating the oven, “and has been known among Indians
and others for nobody can tell how long. You see, it might be called
the origin of the up-to-date ‘fireless cookers.’ It is made very hot,
and then the food sealed in it so that the heat gradually does the
business.”
The others knew something about the method, although they had
possibly never been in a position to see the thing in operation. Frank
burned a special kind of hard wood in his oven until he had a bed of
glowing ashes. These he took out, and then the four partridges,
plucked and ready for eating, were wrapped in some clean muslin
Frank produced from his pack, and which had been previously
dampened.
After that the oven was sealed up the best way they could. As the
frost had not as yet penetrated more than an inch below the surface
of the ground, digging had not been found unduly difficult, using a
camp hatchet to hew the crust.
Hours later, when the oven was opened, it still retained an
astonishing amount of the heat that had been sealed up in it. The
birds they found cooked through and through.
“The very best way of preparing partridges that can be found, I
think,” was the comment of Will, who had read several cook-books at
home and had a jumble of their contents in his mind.
“It certainly has made these birds mighty tender and sweet,”
confessed Jerry, as he pulled his prize apart with hardly any effort.
“Things cooked in this way are always made tender,” Frank told
them. “A tough steak made ready for the table in a fireless cooker
will be as nice as the most costly porterhouse is when broiled or
fried. The only thing I object to is that it never seems to have that
nice brown look, and the taste that I like most of all. It’s more after
the style of a stew to me.”
As the four partridges were only skimpy “racks” when the boys
tossed them aside, it can be readily inferred that all the campers
enjoyed the feast abundantly. Indeed, they even had some of the
venison as a side dish; this was cooked in the frying-pan after the
usual manner.
“Might as well have enough game while about it,” Bluff remarked.
“And let me say right here and now that this sort of thing tastes a
heap finer when you’ve had the privilege of knocking over the game
yourself; or it’s been done by the party you’re with.”
When finally they had eaten until no one could contain another bite,
the boys, as was their habit, drew around the crackling fire, and
started discussing their affairs, as well as other matters that came
up.
Frank had warned Bluff that it might be just as well if they kept still
about the series of shots they had heard, accompanied by faint
shouts that might have stood for either triumph or excitement.
To his chagrin Jerry himself introduced the topic.
“While you were gone, fellows,” he went on to remark, “Will and I
were prowling around near here to find a good place to set his
flashlight trap camera to-night, when we heard a regular row some
distance over there. Must have been as many as five or six shots in
rapid succession, and some hollering, too.”
As the cat was now out of the bag, Frank felt there was no need of
keeping secret the fact that they, too, had heard the series of shots.
“Yes, we caught it just after we’d got our partridges, and before we
raised the buck,” he confessed; “I didn’t mean to say anything about
it, because there seemed no need; but since you’re wise to the fact
we can talk about it.”
“It must have been that Nackerson crowd, don’t you think?” asked
Will.
“There can be no question about that,” Frank replied.
“They started a deer, and were peppering away at him in great
shape, of course?” suggested Jerry.
“That sounds like the explanation,” he was told; “but then the same
shooting would have followed the discovery of a lynx, or perhaps a
black bear in a tree. All we can be sure about is that we want to
fight shy of that country over there. We can hunt a different field;
and I’m in hopes that by doing so we’ll miss running across those
men all the time we’re up here.”
“Now, Frank, you remember you told us to remind you of
something?” Jerry remarked when the conversation flagged.
“You mean about this wonderful woods country up in the State of
Maine,” Frank went on, smiling as though the task he had been
called on to shoulder pleased him, since he was a native of the
State, and loved it dearly.
“Yes; something about the strange ways you said there were for
men to make a living in the woods,” Bluff added.
CHAPTER IX—THE WONDERLAND OF MAINE
Our website is not just a platform for buying books, but a bridge
connecting readers to the timeless values of culture and wisdom. With
an elegant, user-friendly interface and an intelligent search system,
we are committed to providing a quick and convenient shopping
experience. Additionally, our special promotions and home delivery
services ensure that you save time and fully enjoy the joy of reading.
ebookball.com