18video性欧美19sex,欧美高清videosddfsexhd,性少妇videosexfreexxx片中国,激情五月激情综合五月看花,亚洲人成网77777色在线播放

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

cocotb中的基礎(chǔ)語法

FPGA之家 ? 來源:FPGA之家 ? 作者:FPGA之家 ? 2022-07-21 09:18 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

cocotb的出現(xiàn)使得我們能夠在做RTL仿真驗(yàn)證時依托Python來進(jìn)行測試用例的構(gòu)建,當(dāng)我們習(xí)慣了用Verilog、SystemVerilog來構(gòu)建測試用例時,切換到cocotb后最直觀的方式便是我們能夠建立cocotb中的基礎(chǔ)語法與SystemVerilog中仿真常用的關(guān)鍵字又一個對應(yīng),能夠使我們又一個初步的對照。本篇就cocotb中的基礎(chǔ)語法與SystemVerilog中的常用語法做一個對照總結(jié)。

非阻塞賦值

在使用Systemverilog進(jìn)行仿真時,對于接口信號,往往建議采用非阻塞賦值進(jìn)行操作,其符號為“<=”.

在cocotb中,對于信號的賦值,其提供相應(yīng)的非阻塞賦值方式,其符號也同樣為“<=”。

在cocotb的手冊里提到:

The syntaxsig<=?new_value?is a short form of?sig.value?=?new_value. It not only resembles HDL syntax, but also has the same semantics: writes are not applied immediately, but delayed until the next write cycle.

因而我們可以在cocotb中這樣來進(jìn)行非阻塞賦值:

# Get a reference to the "clk" signal and assign a valueclk = dut.clkclk.value = 1
# Direct assignment through the hierarchydut.input_signal <= 12
# Assign a value to a memory deep in the hierarchydut.sub_block.memory.array[4] <= 2

阻塞賦值

針對阻塞賦值(立即生效),cocotb提供了相應(yīng)的語法:

setimmediatevalue(value)

因而對于阻塞賦值,我們在cocotb中可以這樣寫:

dut.input_signal.setimmediatevalue(1)

信號值讀取

對于信號的讀取,我們在SystemVerilog中,可以直接讀取信號值,而在cocotb中,其為接口變量提供了value方法屬性用于獲取信號值。

讀取方式:sig.value

返回類型:BinaryValue

Accessing thevalueproperty of a handle object will return aBinaryValueobject. Any unresolved bits are preserved and can be accessed using thebinstrattribute, or a resolved integer value can be accessed using theintegerattribute.

信號的讀取我們可以這么來寫:

# Read a value back from the DUTcount=dut.counter.valueprint(count.binstr)1X1010# Resolve the value to an integer (X or Z treated as 0)print(count.integer)42# Show number of bits in a valueprint(count.n_bits)6

#Time

在仿真里延遲等待是經(jīng)常遇到的,在cocotb里,我們通過Timer來實(shí)現(xiàn)延遲:

cocotb.triggers.Timer(time_ps,units=None)

Parameters

time_ps (numbers.Real or decimal.Decimal) – The time value. Note that despite the name this is not actually in picoseconds but depends on the units argument.

units (str or None, optional) – One of None, 'fs', 'ps', 'ns', 'us', 'ms', 'sec'. When no units is given (None) the timestep is determined by the simulator.

由于cocotb是基于協(xié)程的,而延遲函數(shù)的執(zhí)行的時間長度是依賴于仿真器的,因此Timer延遲的執(zhí)行需調(diào)用await:

await Timer(1, units='ns')

邊沿檢測

在SystemVerilog中我們常用posedge、negedge來檢測上升沿和下降沿,在cocotb里,針對邊沿檢測,其提供了四個調(diào)用:

等待調(diào)變

class cocotb.triggers.Edge(*args, **kwargs)

Fires on any value change of signal.

等待上升沿

class cocotb.triggers.RisingEdge(*args, **kwargs)

Fires on the rising edge of signal, on a transition from 0 to 1.

等待下降沿

class cocotb.triggers.FallingEdge(*args, **kwargs)

Fires on the falling edge of signal, on a transition from 1 to 0.

檢測等待指定到個數(shù)邊沿

class cocotb.triggers.ClockCycles(signal,num_cycles,rising=True)

Fires after num_cycles transitions of signal from 0 to 1.

Parameters

signal – The signal to monitor.

num_cycles (int) – The number of cycles to count.

rising (bool, optional) – If True, the default, count rising edges. Otherwise, count falling edges.

我們在使用時,可以這么來寫:

#等待信號signalA發(fā)生變化await cocotb.triggers.Edge(dut.signalA)#等待signalA從0變?yōu)?await cocotb.triggers.RisingEdge(dut.signalA)#等待signalA從1變?yōu)?await cocotb.triggers.FallingEdge(dut.signalA)#等待signalA從0變?yōu)?三次awaitcocotb.triggers.ClockCycles(dut.signalA,3,true)

fork-join_none

SystemVerilog中的fork-join_none用于發(fā)起一個線程但不等待線程的結(jié)束,在cocotb中,相應(yīng)的語法為fork:

cocotb.fork()

Schedule a coroutine to be run concurrently

在寫仿真代碼時,我們可以這么寫:

async def reset_dut(reset_n, duration_ns):    reset_n <= 0    await Timer(duration_ns, units='ns')    reset_n <= 1    reset_n._log.debug("Reset complete")reset_thread = cocotb.fork(reset_dut(reset_n, duration_ns=500))

這里值得注意的是,由于fork是起一個協(xié)程,因而resut_dut需添加async聲明。

fork-join

與SystemVerilog中相對應(yīng)的,cocotb等待一個協(xié)程的結(jié)束同樣提供了join方法:

class cocotb.triggers.Join(*args, **kwargs)

Fires when a fork()ed coroutine completes.

The result of blocking on the trigger can be used to get the coroutine result:

使用方式:

async def coro_inner():    await Timer(1, units='ns')    return "Hello world"
task = cocotb.fork(coro_inner())result = await Join(task)assert result == "Hello world"

fork-any

相較于SystemVerilog中的join-any語法,cocotb并無專門的對應(yīng)語法,但卻有相似的方法供調(diào)用:

class cocotb.triggers.First(*triggers)

等待第一個協(xié)程結(jié)束即返回

t1 = Timer(10, units='ps')t2 = Timer(11, units='ps')t_ret = await First(t1, t2)

這里我們通過First等待t1、t2第一個返回的結(jié)果后await結(jié)束,并將第一個返回的協(xié)程的返回結(jié)果賦值給t_ret。

event

對于SystemVerilog中的event,在cocotb中同樣提供類似的event:

class cocotb.triggers.Event(name=None)

用于兩個協(xié)程間的同步

方法:

set(data=None):喚醒所有等待該事件的協(xié)程

wait(): 等待事件的出發(fā)(await),如果事件已經(jīng)觸發(fā),立即返回

clear(): 清楚以觸發(fā)的事件

is_set():判斷事件是否觸發(fā)

旗語

cocotb中提供了Lock操作用來實(shí)現(xiàn)與SystemVerilog中相似的操作,不過Lock不可聲明旗語為多個:

class cocotb.triggers.Lock(name=None)

方法:

locked : True if the lock is held.

acquire():Produce a trigger which fires when the lock is acquired.

release(): Release the lock.

mailbox

SystemVerilog中的mailbox主要用于不同進(jìn)程間的通信,在cocotb中,普通的Python的隊(duì)列即可實(shí)現(xiàn)該功能(協(xié)程中無需沒有進(jìn)程間同步問題)。

審核編輯 :李倩

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4927

    瀏覽量

    72497
  • 語法
    +關(guān)注

    關(guān)注

    0

    文章

    44

    瀏覽量

    10369
  • 非阻塞賦值
    +關(guān)注

    關(guān)注

    0

    文章

    11

    瀏覽量

    10099

原文標(biāo)題:cocotb—基礎(chǔ)語法對照篇

文章出處:【微信號:zhuyandz,微信公眾號:FPGA之家】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    nuclei studio生成的c語言文件是不支持c的語法嗎?

    nuclei studio 生成的c語言文件感覺不支持c的語法,因?yàn)閯偸褂眠@個軟件,還請各位大佬幫忙看看
    發(fā)表于 10-20 11:02

    程序編譯運(yùn)行正常但是顯示語法錯誤,為什么?

    樣例程序:can_sample.c rtconfig.h里啟用了#define RT_CAN_USING_HDR 代碼從圖中這里開始大段標(biāo)識語法錯誤: 跳轉(zhuǎn)到宏
    發(fā)表于 09-25 06:27

    鴻蒙開發(fā)如何顯示Markdown格式語法 -- markdown_hm介紹

    在開發(fā)過程,對于內(nèi)容的展示通常有富文本和Markdown兩種,后者更偏向于技術(shù)文檔、說明書一類的內(nèi)容展示。但是和富文本不同的是,沒有一個原生組件可以用來解析展示Markdown語法的內(nèi)容,所以
    發(fā)表于 06-30 18:47

    harmony OS NEXT-雙向數(shù)據(jù)綁定MVVM以及$$語法糖介紹

    # 鴻蒙Harmony-雙向數(shù)據(jù)綁定MVVM以及$$語法糖介紹 ## 1.1 雙向數(shù)據(jù)綁定概念 在鴻蒙(HarmonyOS)應(yīng)用開發(fā),雙向數(shù)據(jù)改變(或雙向數(shù)據(jù)綁定)是一種讓數(shù)據(jù)·模型和UI組件之間
    的頭像 發(fā)表于 04-29 16:52 ?1038次閱讀

    Python在嵌入式系統(tǒng)的應(yīng)用場景

    你想把你的職業(yè)生涯提升到一個新的水平?Python在嵌入式系統(tǒng)中正在成為一股不可缺少的新力量。盡管傳統(tǒng)上嵌入式開發(fā)更多地依賴于C和C++語言,Python的優(yōu)勢在于其簡潔的語法、豐富的庫和快速的開發(fā)周期,這使得它在某些嵌入式場景中非常有用,以下是Python在嵌入式系統(tǒng)
    的頭像 發(fā)表于 03-19 14:10 ?1037次閱讀

    基于鴻蒙原生ArkTS語法開發(fā)的圖表組件--柱狀圖

    大家好,我是陳楊。在上一篇文章,我簡要介紹了折線圖的實(shí)現(xiàn)邏輯,并解釋了整體圖表的繪制規(guī)則。根據(jù)這些規(guī)則,我們還可以繪制更多種類的圖表組件。在本期中,我將講解如何實(shí)現(xiàn)柱狀圖,并引入了一個新的功能
    的頭像 發(fā)表于 03-16 16:01 ?688次閱讀
    基于鴻蒙原生ArkTS<b class='flag-5'>語法</b>開發(fā)的圖表組件--柱狀圖

    在下載的源碼進(jìn)入bsp目錄下的一個板子執(zhí)行menuconfig報錯,怎么解決?

    在下載的源碼進(jìn)入bsp目錄下的一個板子執(zhí)行menuconfig報錯,如下: Kconfig:3:warning: ignoring unsupported character
    發(fā)表于 03-07 06:35

    標(biāo)準(zhǔn)網(wǎng)絡(luò)時鐘系統(tǒng):數(shù)字時代的通用語法

    特效與舞臺燈光保持幀級對齊——這些突破物理界限的協(xié)作,都依賴著數(shù)字世界的基礎(chǔ)語法:標(biāo)準(zhǔn)網(wǎng)絡(luò)時鐘系統(tǒng)。 數(shù)字世界的巴別塔解藥 ? ? ? 物聯(lián)網(wǎng)設(shè)備每秒產(chǎn)生2.5億個帶時間戳的數(shù)據(jù)點(diǎn),但若缺乏統(tǒng)一標(biāo)準(zhǔn),就像全球機(jī)場使用不同時區(qū):工業(yè)機(jī)
    的頭像 發(fā)表于 03-03 10:08 ?545次閱讀

    Verilog與VHDL的比較 Verilog HDL編程技巧

    Verilog 與 VHDL 比較 1. 語法和風(fēng)格 Verilog :Verilog 的語法更接近于 C 語言,對于有 C 語言背景的工程師來說,學(xué)習(xí)曲線較平緩。它支持結(jié)構(gòu)化編程,代碼更直觀,易于
    的頭像 發(fā)表于 12-17 09:44 ?2430次閱讀

    SSM開發(fā)的常見問題及解決方案

    在SSM(Spring + Spring MVC + MyBatis)框架的開發(fā)過程,開發(fā)者可能會遇到一些常見問題。以下是對這些問題的詳細(xì)分析以及相應(yīng)的解決方案: 一、配置文件問題 問題描述
    的頭像 發(fā)表于 12-17 09:16 ?1699次閱讀

    SQL錯誤代碼及解決方案

    在SQL數(shù)據(jù)庫開發(fā)和管理,常見的錯誤代碼及其解決方案可以歸納如下: 一、語法錯誤(Syntax Errors) 錯誤代碼 :無特定代碼,但通常會在錯誤消息明確指出是語法錯誤。 原因
    的頭像 發(fā)表于 11-19 10:21 ?9752次閱讀

    圖紙模板的文本變量

    “ ?文本變量和系統(tǒng)自帶的內(nèi)置變量,可以幫助工程師靈活、高效地配置標(biāo)題欄的信息,而不用擔(dān)心模板的文字對象被意外修改。 ? ” 文本變量的語法 文本變量以?${VARIABLENAME}?的方式
    的頭像 發(fā)表于 11-13 18:21 ?1001次閱讀
    圖紙模板<b class='flag-5'>中</b>的文本變量

    SUMIF函數(shù)在數(shù)據(jù)分析的應(yīng)用

    在商業(yè)和科學(xué)研究,數(shù)據(jù)分析是一項(xiàng)基本且關(guān)鍵的技能。Excel作為最常用的數(shù)據(jù)分析工具之一,提供了多種函數(shù)來幫助用戶處理和分析數(shù)據(jù)。SUMIF函數(shù)就是其中之一,它允許用戶根據(jù)特定的條件對數(shù)據(jù)進(jìn)行求和
    的頭像 發(fā)表于 11-11 09:14 ?1270次閱讀

    perl語法

    perl作為ICer必要學(xué)習(xí)的工具語言之一,有著舉足輕重的地位。 perl有著強(qiáng)大的文本處理能力,交互式使用linux命令,眾多的CPAN可以使用,使得perl立足于ICer行業(yè)不敗之地。
    發(fā)表于 11-04 10:33 ?0次下載

    條理清晰,淺顯易懂:Lua語法基礎(chǔ)知識(第二部分)

    今天我們繼續(xù)學(xué)習(xí)Lua語法基礎(chǔ)教程,中篇。 五、變量 5.1 number變量 變量,可以看作是一個桶,在里面裝你想要裝的內(nèi)容。這些內(nèi)容可以是Lua包含的所有合法類型。 例如:我想要新建一個桶,名叫
    的頭像 發(fā)表于 10-29 13:40 ?750次閱讀