MyHDL中文手冊(二) 背景

2021-08-30 13:17:53 字數 2049 閱讀 2331

(本系列基於myhdl 0.10.0 版 on python3)

譯自 您需要對python有基本理解,以便使用myhdl。如果您不了解python,請不要擔心:它是學習最容易程式語言之一。學習python是工程專業人員能夠做的最好的時間投資之一。

一種硬體描述語言如verilog或vhdl的工作知識也會很有幫助。

本手冊中的**示例有時為了清晰起見縮短了時間。完整的可執行示例可以在示例/手動/中找到。

生成器在python 2.2中引入。因為生成器是的myhdl關鍵概念,這裡包含了一段小教程。

考慮以下不合理的函式:

def function():

for i in range(5):

return i

這不太有意義。一旦輸入第乙個迴圈迭代,函式返回:

>>> function()

0

返回對於函式呼叫來說是致命的。進一步迴圈迭代永遠不會得到機會,當返回時函式呼叫中沒有任何東西會被丟擲。

為了將函式轉換為生成器函式,我們用yield替換return

def generator():

for i in range(5):

yield i

現在我們得到了:

>>> generator()

當呼叫生成器函式時,它返回生成器物件。生成器物件支援迭代器協議,這是一種高代價的方法,可以通過呼叫它的next方法來生成後續值:

>>> g = generator()

>>> g.next()

0>>> g.next()

1>>> g.next()

2>>> g.next()

3>>> g.next()

4>>> g.next()

traceback (most recent call last):

file "", line 1, in ?

stopiteration

現在我們可以根據需求從for迴圈生成後續值,直到它們耗盡為止。結果是,yield語句就像乙個return,除了它不是致命的:生成器在yield語句執行生成後記住它的狀態和**中的位置。高階**器可以通過呼叫生成器next方法來決定何時獲得下乙個值。我們說生成器是可恢復的函式。

如果您熟悉硬體描述語言,那麼這聽起來很熟悉。在硬體**中,也有乙個高階**,**器,它與這種可恢復函式相互作用; vhdl稱為process過程, verilog成為always塊。同樣,python生成器提供了一種優雅高效的方法來建模併發,而不必依賴某種形式的執行緒。

使用生成器來建模併發性是myhdl的第乙個關鍵概念。第二個關鍵概念是乙個相關的概念:在myhdl中,所產生的值指定了生成器在恢復之前應該等待什麼條件。換句話說,yield語句作為一般敏感性列表。

python 2.4引入了乙個名為裝飾器的特性。myhdl利用此特性定義一些有助於硬體描述的裝飾器。然而,一些使用者可能還不熟悉裝飾器。因此,這裡稍作介紹。

乙個裝飾器由函式宣告前面的特殊語法組成。它指的是乙個裝飾函式。裝飾函式自動將宣告函式轉換為其他可呼叫物件。

裝飾功能裝飾在裝飾說明中使用如下:

@deco

def func(arg1, arg2, ...):

此**與下列**等效:

def func(arg1, arg2, ...):

func = deco(func)

注意,裝飾語句直接在函式宣告前面,並且函式名函式自動重用為最終結果。

myhdl使用修飾符從本地函式定義建立現成的**生成器。他們的功能和用法後面將進一步描述。

man手冊,安裝中文手冊

一 man手冊。1 什麼是man手冊?man手冊就是linux提供給使用者檢視linux語法的一本書,當使用者遇到一些不懂的命令 函式時,不用刻意去記住命令 函式的用法,只需要記住怎麼在man手冊去查詢即可。遇到不懂的命令 查閱man手冊 得知 命令功能,命令引數,命令使用方法。遇到不懂的函式 查閱...

EOS RPC API中文手冊

eos rpc api是應用訪問eos區塊鏈上智慧型合約的必備開發介面,根據所實現外掛程式的不同,eos rpc api被歸入不同的分組 chain分組中的rpc api,為開發者提供訪問區塊鏈的能力,主要包含以下api history分組中的rpc api,為開發者提供訪問歷史交易的能力,主要包含...

systemctl中文手冊

systemctl 控制 systemd 系統與服務管理器 systemctl options.command name.systemctl可用於檢查和控制 systemd 1 系統與服務管理器的狀態。能夠識別的命令列選項如下 模式 pattern 引數的語法與檔名匹配語法類似 用 匹配任意數量的字...