\documentclass{article} \usepackage[latin1]{inputenc} \usepackage[T1]{fontenc} \usepackage{makeidx} \usepackage{latexsym} \usepackage{verbatim} \usepackage{moreverb} \usepackage{index} \usepackage{dingbat} \usepackage{fancyhdr} \usepackage{ifpdf} % \newif\ifpdf % \ifx\pdfoutput\undefined % \else % \ifx\pdfoutput\relax % \else % \ifcase\pdfoutput % \else % \pdftrue % \fi % \fi % \fi \ifpdf \usepackage[pdftex,colorlinks=true,bookmarksopen, pdfstartview=FitH, linkcolor=blue, citecolor=blue, urlcolor=blue]{hyperref} \usepackage[pdftex]{graphicx} \pdfcompresslevel=9 \else \usepackage[dvips]{graphicx} \fi \usepackage{ae} \usepackage{aecompl} % ---------------------------------------------------------------- % HORIZONTAL MARGINS % Left margin, odd pages: 1.25 inch (0.25 + 1) \setlength{\oddsidemargin}{0.25in} % Left margin, even pages: 1.25 inch (0 + 1) \setlength{\evensidemargin}{0.25in} % Text width 6 inch (so other margin is 1.25 inch). \setlength{\textwidth}{6in} % ---------------- % VERTICAL MARGINS % Top margin 0.5 inch (-0.5 + 1) \setlength{\topmargin}{-0.5in} % Head height 0.25 inch (where page headers go) \setlength{\headheight}{0.25in} % Head separation 0.25 inch (between header and top line of text) \setlength{\headsep}{0.25in} % Text height 9 inch (so bottom margin 1 in) \setlength{\textheight}{9in} % ---------------- % PARAGRAPH INDENTATION \setlength{\parindent}{0in} % SPACE BETWEEN PARAGRAPHS \setlength{\parskip}{\medskipamount} % ---------------- % STRUTS % HORIZONTAL STRUT. One argument (width). \newcommand{\hstrut}[1]{\hspace*{#1}} % VERTICAL STRUT. Two arguments (offset from baseline, height). \newcommand{\vstrut}[2]{\rule[#1]{0in}{#2}} % ---------------- % HORIZONTAL LINE ACROSS PAGE: \newcommand{\hdivider}{\noindent\mbox{}\hrulefill\mbox{}} % ---------------- % EMPTY BOXES OF VARIOUS WIDTHS, FOR INDENTATION \newcommand{\hm}{\hspace*{1em}} \newcommand{\hmm}{\hspace*{2em}} \newcommand{\hmmm}{\hspace*{3em}} \newcommand{\hmmmm}{\hspace*{4em}} % ---------------- % ``TIGHTLIST'' ENVIRONMENT (no para space betwee items, small indent) \newenvironment{tightlist}% {\begin{list}{$\bullet$}{% \setlength{\topsep}{0in} \setlength{\partopsep}{0in} \setlength{\itemsep}{0in} \setlength{\parsep}{0in} \setlength{\leftmargin}{1.5em} \setlength{\rightmargin}{0in} \setlength{\itemindent}{0in} } }% {\end{list} } %---------------- % Added to get special characters in index \newcommand{\Caret}{\char94} \newcommand{\Tilde}{\char126} % ---------------- % Language names \newcommand{\BS}{Bluespec} \newcommand{\BSV}{BSV} \newcommand{\blue}{Bluespec SystemVerilog} \newcommand{\V}{Verilog} \newcommand{\veri}{Verilog} % ---------------------------------------------------------------- % CODE DISPLAYS. % Bluespec code displays are enclosed between \BBS and \EBS % Most characters are taken verbatim, in typewriter font, % Except: % Commands are still available (beginning with \) % but use ` and ' instead of { and } % Math mode is still available (beginning with $) % but use ~ and ! for ^ and _ \outer\def\BBS{% \begin{list}{$\bullet$}{% \setlength{\topsep}{0in} \setlength{\partopsep}{0in} \setlength{\itemsep}{0in} \setlength{\parsep}{0in} \setlength{\leftmargin}{1em} \setlength{\rightmargin}{0in} \setlength{\itemindent}{0in} }\item[] % \catcode`\{=12 % \catcode`\}=12 \catcode`\&=12 \catcode`\#=12 \catcode`\%=12 \catcode`\~=12 % \catcode`\_=12 \catcode`\^=12 % \catcode`\~=7 % \catcode`\!=7 % superscript % \catcode`\'=2 % \catcode`\`=1 \obeyspaces \obeylines \tt} \outer\def\EBS{% \end{list} } {\obeyspaces\gdef {\ }} % ---------------------------------------------------------------- % The following hack is from Mark Tuttle \newcommand{\ttsymbol}[1]{% % print character at position #1 in the tt font family in current font size \begingroup\fontfamily{cmtt}\selectfont\symbol{#1}\endgroup } % ---------------- % HASH (tt font hash), can be used inside \fbox environment \newcommand{\HASH}{\ttsymbol{35}} % ---------------- % BSL (tt font backslash), can be used inside \fbox environment \newcommand{\BSL}{\ttsymbol{92}} % ---------------- % HAT (tt font hat), can be used inside \fbox environment \newcommand{\HAT}{\ttsymbol{94}} % ---------------- % UNDERSCORE of standard char width (normal tt font \_ is narrower) \newcommand{\US}{\ttsymbol{95}} % ---------------- % TILDE (tt font tilde), can be used inside \fbox environment \newcommand{\TILDE}{\ttsymbol{126}} % ---------------- % LBRACE (tt font left brace), can be used inside \fbox environment \newcommand{\LBRACE}{\ttsymbol{123}} % ---------------- % RBRACE (tt font right brace), can be used inside \fbox environment \newcommand{\RBRACE}{\ttsymbol{125}} % ---------------------------------------------------------------- % Library environment. Used by generated code. \newenvironment{libverbatim} {\vspace*{-1.0em} \verbatim} {\endverbatim } \newenvironment{smcenterboxverbatim} {\center \small \boxedverbatim} {\endboxedverbatim {\endcenter} } \newenvironment{centerboxverbatim} {\center \boxedverbatim} {\endboxedverbatim {\endcenter }} % ---------------------------------------------------------------- \newcommand\lineup{\vspace*{-0.6em}} \newcommand\com[1]{} \newcommand{\te}[1]{\texttt{#1}} \newcommand{\nterm}[1]{\emph{#1}} \newcommand{\term}[1]{\texttt{#1}} \newcommand{\many}[1]{\{ #1 \}} \newcommand{\opt}[1]{[ #1 ]} \newcommand{\alt}{{$\mid$}} \newcommand{\gram}[2]{ \hm\makebox[10em][l]{\it #1}\makebox[1.5em][l]{::=} #2} \newcommand{\grammore}[1]{\hm\makebox[10em][l]{ }\makebox[1.5em][l]{} #1} \newcommand{\gramalt}[1]{ \hm\makebox[10em][l]{ }\makebox[1.5em][l]{\alt} #1} \newcommand{\tbd}[1]{{\sf TBD: #1}} \newcommand{\note}[1]{\vspace*{2mm}{\sf {\large \bf Note\\} #1}\vspace{2mm}} \newcommand{\begindescrlist}[1]{ \begin{list}{\arabic{enumi}}{ \settowidth{\labelwidth}{#1} \setlength{\leftmargin}{\labelwidth} % {#1} \addtolength{\leftmargin}{\labelsep} \setlength{\parsep}{0ex} \setlength{\itemsep}{0ex} \usecounter{enumi} } } \newcommand{\litem}[1]{\item[#1\hfill]} % ``Quoted'' inline bluespec \newcommand{\qbs}[1]{``\mbox{\te{#1}}''} \newcommand{\obsolete}[1]{} % ---------------------------------------------------------------- % ---------------------------------------------------------------- % HERE BEGINS THE DOCUMENT \makeindex \newindex{function}{fdx}{fnd}{Function and Module by Package} \newindex{typeclass}{tdx}{tnd}{Typeclasses} \input{version.tex} %\ifpdf %\hypersetup{ %pdfauthor = {B-Lang}, %pdftitle = {BSC Libraries Reference Guide}, %pdfsubject = {Bluespec}, %pdfkeywords = {Bluespec}, %pdfcreator = {Bluespec}} %\else %\fi \begin{document} \title{ \resizebox{2in}{!}{\includegraphics[width=\textwidth]{../common/B-Lang}}\\ \vspace{0.3in} Bluespec Compiler (BSC) \\ Libraries \\ Reference Guide \\ \vspace*{1in} \mbox{} } \maketitle % ---------------- \pagestyle{fancy} \lhead[Reference Guide]{BSC Libraries} \rhead[BSC Libraries]{Reference Guide} %\lfoot[\thepage]{} \cfoot{\thepage} %\rfoot[]{\thepage} % ---------------- \newpage {\large\bf Trademarks and copyrights} Verilog is a trademark of IEEE (the Institute of Electrical and Electronics Engineers). The Verilog standard is copyrighted, owned and maintained by IEEE. VHDL is a trademark of IEEE (the Institute of Electrical and Electronics Engineers). The VHDL standard is copyrighted, owned and maintained by IEEE. SystemVerilog is a trademark of IEEE. The SystemVerilog standard is owned and maintained by IEEE. SystemC is a trademark of IEEE. The SystemC standard is owned and maintained by IEEE. Bluespec is a trademark of Bluespec, Inc. % ------------------------------------------------------------ \newpage \clearpage \phantomsection \addcontentsline{toc}{section}{Table of Contents} \tableofcontents \newpage % ------------------------------------------------------------ \section{Introduction} TBD % ------------------------------------------------------------ \clearpage \section{The Standard Prelude package} \label{sec-prelude} \label{lib-prelude} \index{Standard Prelude} This section describes the type classes, data types, interfaces and functions provided by the \te{Prelude} package. The standard \te{Prelude} package is automatically included in all BSV packages. You do not need to take any special action to use any of the features defined in the \te{Prelude} package. % TBD: Mention \te{PreludeBSV} package Section {\ref{sec-additional-libs}} describes BSC's collection of standard libraries. To use any of these libraries in a design you must explicitly import the library package. \input{LibDoc/Prelude} % ------------------------------------------------------------ \clearpage \section{Standard Libraries} \label{sec-additional-libs} Section {\ref{sec-prelude}} defined the standard Prelude package, which is automatically imported into every package. This section describes {\BSV}'s collection of standard libraries. To use any of these libraries in a package you must explicitly import the library package using an \texttt{import} clause. % ---------------- \subsection{Storage Structures} \input{LibDoc/RegFile} \input{LibDoc/ConfigReg} \input{LibDoc/DReg} \input{LibDoc/RevertingVirtualReg} \input{LibDoc/BRAM} \input{LibDoc/BRAMCore} % ---------------- \subsection{FIFOs} \input{LibDoc/FIFO} \input{LibDoc/LevelFIFO} \input{LibDoc/BRAMFIFO} \input{LibDoc/SpecialFIFOs} \input{LibDoc/AlignedFIFOs} \input{LibDoc/Gearbox} \input{LibDoc/MIMO} % --------------- % Declares its own \subsection \input{LibDoc/Vector} % ---------------- % Declares its own \subsection \input{LibDoc/List} % ---------------- \subsection{Math} \input{LibDoc/Real} \input{LibDoc/OInt} \input{LibDoc/Complex} \input{LibDoc/FixedPoint} \input{LibDoc/NumberTypes} % \input{LibDoc/Divide} % \input{LibDoc/SquareRoot} % \input{LibDoc/FloatingPoint} % ---------------- \subsection{FSM} \input{LibDoc/StmtFSM} % ---------------- \subsection{Connectivity} % This file contains intro text for the subsection % and therefore must come first % TBD: move that text here? \input{LibDoc/GetPut} \input{LibDoc/Connectable} \input{LibDoc/ClientServer} \input{LibDoc/Memory} \input{LibDoc/CGetPut} \input{LibDoc/CommitIfc} % ---------------- \subsection{Utilities} \input{LibDoc/LFSR} \input{LibDoc/Randomizable} \input{LibDoc/Arbiter} %\input{LibDoc/Counter} \input{LibDoc/Cntrs} \input{LibDoc/GrayCounter} \input{LibDoc/Gray} \input{LibDoc/CompletionBuffer} \input{LibDoc/UniqueWrappers} % This is now in Prelude, but not documented above? %\input{LibDoc/FShow} \input{LibDoc/DefaultValue} \input{LibDoc/TieOff} \input{LibDoc/Assert} \input{LibDoc/Probe} \input{LibDoc/Reserved} \input{LibDoc/TriState} \input{LibDoc/ZBus} \input{LibDoc/CRC} \input{LibDoc/OVLAssertions} \input{LibDoc/Printf} \input{LibDoc/BuildVector} % \input{LibDoc/PCIE} % \input{LibDoc/Video} % \input{LibDoc/I2C} % ---------------- \subsection{Multiple Clock Domains and Clock Generators} \input{LibDoc/Clocks} % ---------------- \subsection{Special Collections} \input{LibDoc/ModuleContext} \input{LibDoc/ModuleCollect} \input{LibDoc/CBus} \input{LibDoc/HList} \input{LibDoc/UnitAppendList} % ------------------------------------------------------------ % The one reference (in LibDoc/Prelude.tex) is given instead % as a footnote, rather than far removed in a References % section at the end. %\clearpage %\bibliography{libraries_ref_guide} %\bibliographystyle{alpha} %\addcontentsline{toc}{section}{References} % ------------------------------------------------------------ \clearpage \phantomsection \addcontentsline{toc}{section}{Index} \printindex % ------------------------------------------------------------ \clearpage \phantomsection \addcontentsline{toc}{section}{Function and Module by Package} \printindex[function] % ------------------------------------------------------------ \clearpage \phantomsection \addcontentsline{toc}{section}{Typeclasses} \printindex[typeclass] % ------------------------------------------------------------ \end{document}