Logictools Overlay
可進qq群進行相關Verilog知識交流:1073030956
Logictools Overlay
Logictools overlay 包含了可編程邏輯硬件區塊來與外部數字邏輯電路連接。Python可以做出有限狀態機(Finite State Machine)、布爾型邏輯函數和數字模式。一個可編程開關連接了硬件區和外部IO引腳之間的輸入和輸出。Logictools overlay也可以通過追蹤分析器(trace analyzer)來捕捉IO接口傳來的數據,方便我們分析調試。
Logictools IP包含了4個主要硬件區塊
- 模式生成器
- FSM生成器(有限狀態機生成器)
- 布爾型生成器
- 跟蹤分析器
每一個區塊不需要匯編配置文件,這意味著一個配置可以直接加載到生成器里并立即執行。
PYNQ-Z2 logic tools
PYNQ-Z2 logictools overlay有兩個logictools邏輯控制處理器(LCP),一個與Arduino header連接,一個與RPI header連接。
Arduino header有20個引腳,RPI有26個引腳,他們可以用作為LCP的GPIO。
板上的4個LED和4個按鈕可以連接到任意一個LCP上,使得擴展輸入成為了可能。注意!LED和按鈕是共享的,在一個時刻只能被一個LCP使用。
布爾型生成器
與BaseOverlay不一樣,我們要用LogicToolsOverlay來導入對應的logictools.bit。所謂布爾型生成器,就是用與、或、異或、非來構成最終的布爾型輸出。在代碼里,我們用“&”、“|”、“^”、“~”來分別代表上面四個運算。接下來,我們先構建一個簡單的表達式:
LD2為班上的一個LED,PB3/0為板上的兩個按鈕。這里我們的運算就是PB3和PB0做異或運算后,把1/0賦值給LD2進行輸出。
從bit文件轉換出的logictools_olay類里,我們可以找到布爾型生成器,用其初始化一個布爾型生成器出來,并用上面的表達式配置該生成器,隨后用run來運行。
這時候,我們可以按動板上的PB0/3并觀察LD2,發現確實是按照異或法則進行的。
調用stop函數即可停止生成器運作。
剛剛,我們使用列表存儲了一個表達式,事實上,我們可以使用可讀性更高的字典來存儲表達式,并且我們可以存儲不止一個。
在上面的代碼中,我們除了存儲了異或門,還增加了一個與門。
模式生成器
接下來我們展示一下如何操作模式生成器的單步模式。需要注意,并不是所有的logictool庫中生成器都是單步的。
在這個例子里,我們只用python代碼來模擬電路,并用追蹤生成器捕捉到的波形來驗證我們的結果。
首先,我們導入logictools overlay,并通過代碼形式模擬波形。波形的構造滿足一定格式。用{‘signal’:[]}來表明輸入的信號波形。在[]內,我們逐一添加波形信息。格式為:{‘name’:’’, ’pin’:’’, ‘wave’:’lh.’}其中l代表low波,h表示high波,‘.’表示重復前面波形。
然后我們用logictools里的Waveform來將上述格式的信息轉換為板能識別的波形。
接下來,我們按照上圖代碼為我們的模擬內容增加一點東西。外層的{‘signal’:[]}框架不變,在[]里,我們將之前的4個模擬波形信號用列表的方式打包,并命名為‘stimulus’(列表的第一個元素為名稱),以同樣的格式增加一欄‘analysis’。輸出的效果如圖所示。Analysis欄并沒有任何輸出,這是因為我們還未用模式生成器來追蹤它。Waveform函數只是一個把代碼轉換成模擬波形并輸出的函數而已,不具備追蹤功能。
按照上圖代碼,我們生成一個模式生成器,其創建方式與布爾型生成器一模一樣。在配置setup的時候,我們傳入之前我們自己寫的波形數據,并把模擬信號和分析內容指示給他。隨后,我們調用模式生成器的step函數,即可跟蹤模擬信號。重復運行step函數,我們可以看到,analysis欄波形按照上面stimulus欄的波形進行輸出。
最后,在使用完后,使用reset進行重制。
FSM生成器
最后,我們用FSM生成器來生成一個FSM(有限狀態機)。這個例子中,我們做出來的FSM是一個格雷碼計數器,它有三個狀態位并可以通過8(即23)個狀態來計數。計數器的輸出是用格雷碼編寫的,這意味狀態之間的轉換只有一個2進制位會被改動(這是格雷碼的特性)。
自然,我們先寫入logictools.bit。
然后,我們編寫相應的狀態位。(下面的例子是Z1板上的,Z2板上并沒有D0之類的接口)
可以看出,要配置一個狀態機,我們所需要描繪其輸入、輸出、狀態、狀態變換規則。這些均采用FSM規范格式。
隨后,使用logictools里的FSM生成器創建一個,并用上面的對該狀態機進行配置。
通過show_state_diagram()函數,該狀態機會返回一個我們所定義的狀態機邏輯圖,如下圖所示。
為了能看到我們所寫的結果,我們需要根據之前的input那一欄把D0與GND連接(邏輯歸0),把D1連接到3.3V接口(邏輯歸1),這些接口在Arduino區域可以找到。
-----------------------------------------------------------------------------------------------------------------------
-
The reset input is connected to pin D0 of the Arduino connector
-
- Connect the reset input to GND for normal operation
- When the reset input is set to logic 1 (3.3V), the counter resets to state 000
-
The direction input is connected to pin D1 of the Arduino connector
-
- When the direction is set to logic 0, the counter counts down
- Conversely, when the direction input is set to logic 1, the counter counts up
使用run命令來運行我們生成的狀態機。
最后用stop命令來完成善后工作。
總結
以上是生活随笔為你收集整理的Logictools Overlay的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: pyinstaller 生成exe之后不
- 下一篇: JAVA中startwith函数的用法