Tikz教程:一个异步FIFO设计步骤示意图的画法
如上圖(圖片來源:異步FIFO),如何用Tikz來畫出這個圖形呢?
作圖思路: 使用流程圖的作圖方法可以很容易作出這幅圖形。使用node來畫出節(jié)點,并用node輸入圖中不帶框的文字。使用“->”工具來連線。連線時要用到節(jié)點的錨點坐標(biāo)。
下面詳細介紹一下作圖步驟:
一、定義節(jié)點風(fēng)格
定義兩種風(fēng)格的節(jié)點:rec1設(shè)置為最小寬度1.4cm, 最小高度為1cm,畫出邊框,默認為長方形框,填充顏色為gray!10, 透明度為0.8。另一種rec2與rec1只有最小高度的區(qū)別。
\begin{tikzpicture}[rec1/.style={minimum width=1.4cm, minimum height=1cm,draw,fill=gray!10,opacity=0.8}, rec2/.style={minimum width=1.4cm, minimum height=2cm,draw,fill=gray!10,opacity=0.8},]二、安排節(jié)點位置
圖中節(jié)點錯落有致,可以分為五列,有一定的對稱性。大致將五列安排在x=0,3,6,9,12x=0,3,6,9,12x=0,3,6,9,12的直線上。圖中上中下三行大致安排在y=6,3,0y=6,3,0y=6,3,0的直線上。
這樣,先用node安排好13個節(jié)點。
三、連線
高級技巧1: 如圖3,兩個紅色的節(jié)點之間由一條折線相連,我們不需要計算直角頂點的坐標(biāo),而是用|-來連接,這個路徑是由一個豎直線段再加一個水平線段組成的。
高級技巧2 坐標(biāo)的計算,第二個紅點(右下方)的坐標(biāo)是由節(jié)點(equalbelow.west)的左側(cè)錨點豎直向上平移0.2cm得到的。計算時,用$ 將數(shù)學(xué)表達式括起來:
($(equalbelow.west)+(0,0.2)$)
連完線后,得到的成圖如下:
完整代碼:
\begin{tikzpicture}[font=\footnotesize,background rectangle/.style={fill=yellow!20},show background rectangle,pin distance=1.8cm, rec1/.style={minimum width=1.4cm, minimum height=1cm,draw,fill=gray!10,opacity=0.8}, rec2/.style={minimum width=1.4cm, minimum height=2cm,draw,fill=gray!10,opacity=0.8},xscale=1.2,yscale=1.2 ]\node [rec1] (rdbinptr) at (0,0) {$rd\_bin\_ptr$}; \node [rec1] (wrbinptr) at (0,6) {$wr\_bin\_ptr$};\node [rec1] (bin2graybelow) at (3,0) {bin2gray}; \node [rec1] (bin2grayabove) at (3,6) {bin2gray}; \node [rec2] (RAM) at (3,3) {RAM};\node [rec1] (doublesynffbelow) at (6,1.5) {$double\_syn\_ff$}; \node [rec1] (doublesynffabove) at (6,4.5) {$double\_syn\_ff$};\node [rec1] (equalbelow) at (9,0.2) {$==$}; \node [rec1] (gray2binbelow) at (9,1.5) {gray2bin}; \node [rec1] (gray2binabove) at (9,4.5) {gray2bin}; \node [rec1] (equalabove) at (9,5.8) {$==$};\node [rec1] (A-Bbelow) at (12,-1) {\begin{minipage}[]{1.5cm}A \par \qquad A-B \par B\end{minipage}};\node [rec1] (A-Babove) at (12,7) {\begin{minipage}[]{1.5cm}A \par \qquad A-B \par B\end{minipage}};\draw[dashed,gray](-2.5,3)--(14,3); \draw [-latex](-2,-0.25)--node[below]{rd\_empty}($(rdbinptr.west)+(0,-0.25)$); \draw [-latex](-2,0.25)--node[above]{rd\_en}($(rdbinptr.west)+(0,0.25)$);\node [below] at (-1.5,3) {讀時鐘域}; \node [above] at (-1.5,3) {寫時鐘域};\draw [-latex](-2,5.75)--node[below]{rd\_full}($(wrbinptr.west)+(0,-0.25)$); \draw [-latex](-2,6.25)--node[above]{rd\_en}($(wrbinptr.west)+(0,0.25)$);\draw [-latex](rdbinptr)--(bin2graybelow); \node [below]at(1.2,0){n:0}; \node [below]at(1.8,1.1){n-1:0};\draw [-latex](wrbinptr)--(bin2grayabove); \draw [-latex](1.5,3.3)--node[above]{wr\_data}($(RAM.west)+(0,0.3)$); \node [below]at(1.2,6){n:0}; \node [below]at(1.8,5.2){n-1:0};\draw [-latex](1.5,6)|-($(A-Babove.west)+(0,0.3)$); \draw [-latex](1.5,6)|-($(RAM.west)+(0,0.7)$); \node [above]at(2,3.7){wr\_addr};\draw [-latex](1.5,0)|-($(A-Bbelow.west)+(0,-0.3)$); \draw [-latex](1.5,0)|-($(RAM.west)+(0,-0.7)$); \draw [-latex]($(RAM.east)+(0,-0.5)$)--node[above]{rd\_data}(4.5,2.5); \node [below]at(2,2.3){rd\_addr};\draw [-latex](bin2graybelow.east)--($(equalbelow.west)+(0,-0.2)$); \draw [-latex](4.8,0)|-(doublesynffabove.west); \draw [-latex](bin2grayabove.east)--($(equalabove.west)+(0,0.2)$); \draw [-latex](4.5,6)|-(doublesynffbelow.west); \draw [-latex](doublesynffbelow)--(gray2binbelow.west); \draw [-latex](doublesynffabove)--(gray2binabove.west); \draw [-latex](7.5,1.5)|-($(equalbelow.west)+(0,0.2)$); \draw [-latex](7.5,4.5)|-($(equalabove.west)+(0,-0.2)$);\draw [-latex](gray2binbelow)--(10.5,1.5)|-($(A-Bbelow.west)+(0,0.3)$); \draw [-latex](gray2binabove)--(10.5,4.5)|-($(A-Babove.west)+(0,-0.3)$);\draw[-latex](equalbelow.east)--(13.5,0.2)node[above left]{rd\_empty}; \draw[-latex](equalabove.east)--(13.5,5.8)node[above left]{wr\_full}; \draw[-latex](A-Bbelow.east)--node[above]{rd\_cnt}++(0.8,0); \draw[-latex](A-Babove.east)--node[above]{wr\_cnt}++(0.8,0);\fill(1.5,6)circle(1pt)(1.5,0)circle(1pt); \fill(4.8,0)circle(1pt); \fill(4.5,6)circle(1pt); \fill(7.5,1.5)circle(1pt);\end{tikzpicture}今天的介紹就到這里,喜歡的話歡迎點擊下方點贊、轉(zhuǎn)發(fā)、分享,謝謝啦!
【LaTeX微信交流加群:】
如果你希望交流LaTeX使用或者TikZ作圖或者Beamer制作幻燈片方面的問題,請先添加作者微信:niltxz,然后加入作者的LaTeX+TikZ+Beamer 交流微信群。
總結(jié)
以上是生活随笔為你收集整理的Tikz教程:一个异步FIFO设计步骤示意图的画法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 外设测试 - CAN 接口测试
- 下一篇: java 二进制 base64编码_ja