Tikz-timing:使用箭头表示像 G(故障)符号那样的垂直线?

Tikz-timing:使用箭头表示像 G(故障)符号那样的垂直线?

我刚刚问了这个问题:程序计数器是否总是需要改变(根据指令滴答)? - 堆栈内存溢出,其中我使用了以下代码:

% min-timing.tex
% pdflatex min-timing.tex                               # to obtain min-timing.pdf
% convert -density 300x min-timing.pdf min-timing.png   # to obtain min-timing.png

% \documentclass[border=0]{standalone} % incorrectly crops image - use minimal + preview
\documentclass{minimal}

% minimal doesn't have \scriptsize, \tiny:
\makeatletter
\def\scriptsize{\@setfontsize{\scriptsize}{7}{8pt}}
\def\tiny{\@setfontsize{\tiny}{5}{6pt}}
\def\ttiny{\@setfontsize{\ttiny}{4}{5pt}}
\makeatother

\usepackage{tikz}
\usetikzlibrary{arrows,chains,matrix,positioning,scopes,snakes,decorations.markings}
\usepackage{tikz-timing}
\usetikztiminglibrary[rising arrows]{clockarrows}
\usetikztiminglibrary{advnodes}

\usepackage[graphics,tightpage,active]{preview}
\PreviewEnvironment{tikzpicture}
\newlength{\imagewidth}
\newlength{\imagescale}

\usepackage{helvet}

\begin{document}


\begin{tikztimingtable}[%
    timing/nodes/advanced,
    timing/dslope=0.1,
    timing/name/.style={font=\sffamily\scriptsize},
    timing/d/text/.style={font=\sffamily\ttiny},
  ]
  %
  % start timing diagram
  %
  \textcolor{black}{Instruction} & [black]
    Z 2D{push}    4D{mov}     4D{sub}     4D{movl}    4D{mov}     2D{leave}   2D{ret}     2D{...} \\ %
  \textcolor{black}{PC Address} & [black]
    Z 2D{8048394} 4D{8048395} 4D{8048397} 4D{804839a} 4D{80483a1} 2D{80483a4} 2D{80483a5} 2D{...} \\ %
  \textcolor{red}{Instruction tick} & [red]
    S G 2{S}      G 4{S}      G 4{S}      G 4{S}      G 4{S}      G 2{S}      G 2{S}      G 2{S}  \\ %
  \textcolor{brown}{Clock} & [brown]
    Z 2{C}        4{C}        4{C}        4{C}        4{C}        2{C}        2{C}        2{C}    \\ %
  %
  % end timing diagram
  %
  % there must NOT be an uncommented line before \extracode!
  %
\extracode
  \tablerules
  \tablegrid
\end{tikztimingtable}

\end{document}

...获得此图像:

最小计时.png

我很疑惑——(如何)是否可以将“指令滴答”中的 G(故障)符号呈现为“向上箭头”,就像时钟上升沿一样?

答案1

您需要arrows库,然后可以使用A向上箭头(A = Arrow)和W向下箭头(W = arroW)。在箭头后插入一个与时间字母宽度相符的长度。这意味着4A等于G 4S

因此你需要的是:

  \textcolor{red}{Instruction tick} & [red]
    S 2A          4A          4A          4A          4A          2A          2A          2A      \

加载后:

\usetikztiminglibrary{arrows}

得出:

结果

有关该库的更多信息和示例,请参阅手册。


顺便说一句:请注意,您不需要使用4{S}来获得 4 的空间。您可以4S直接使用。区别在于4S直接创建一个宽度为 4 的空间,而内部4{S}将其转换为SSSS重复 { }代码然后4S由内部优化器合并,这当然不如4S直接编写效率高。

答案2

我认为你有两个选择:要么用箭头替换所有故障信号(0A而不是G):

\textcolor{red}{Instruction tick} & [red]
S 0A 2{S}      0A 4{S}      0A 4{S}      0A 4{S}      0A 4{S}      0A 2{S}      0A 2{S}      0A 2{S}  \\ %

您需要指定0A保留信号之间的间距(根本A不行,因为它会在符号后面插入额外的空间)。此外,您还需要加载arrows时序库:\usetikztiminglibrary{arrows}

或者,如果您想使代码在语义上正确,请使用覆盖(我建议使用这个,尽管它比前一个更冗长):

\textcolor{red}{Instruction tick} & [red]
S O{A}{G} 2{S}      O{A}{G} 4{S}      O{A}{G} 4{S}      O{A}{G} 4{S}      O{A}{G} 4{S}      O{A}{G} 2{S}      O{A}{G} 2{S}      O{A}{G} 2{S}  \\ %

再次,您将需要该arrows库以及该overlays库:\usetikztiminglibrary{arrows, overlays}

相关内容