我刚刚问了这个问题:程序计数器是否总是需要改变(根据指令滴答)? - 堆栈内存溢出,其中我使用了以下代码:
% 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}
...获得此图像:
我很疑惑——(如何)是否可以将“指令滴答”中的 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}
。