在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

cocotb中的基礎語法

FPGA之家 ? 來源:FPGA之家 ? 作者:FPGA之家 ? 2022-07-21 09:18 ? 次閱讀

cocotb的出現使得我們能夠在做RTL仿真驗證時依托Python來進行測試用例的構建,當我們習慣了用Verilog、SystemVerilog來構建測試用例時,切換到cocotb后最直觀的方式便是我們能夠建立cocotb中的基礎語法與SystemVerilog中仿真常用的關鍵字又一個對應,能夠使我們又一個初步的對照。本篇就cocotb中的基礎語法與SystemVerilog中的常用語法做一個對照總結。

非阻塞賦值

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

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

在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中這樣來進行非阻塞賦值:

# 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提供了相應的語法:

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

在仿真里延遲等待是經常遇到的,在cocotb里,我們通過Timer來實現延遲:

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是基于協程的,而延遲函數的執行的時間長度是依賴于仿真器的,因此Timer延遲的執行需調用await:

await Timer(1, units='ns')

邊沿檢測

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

等待調變

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.

檢測等待指定到個數邊沿

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發生變化await cocotb.triggers.Edge(dut.signalA)#等待signalA從0變為1await cocotb.triggers.RisingEdge(dut.signalA)#等待signalA從1變為0await cocotb.triggers.FallingEdge(dut.signalA)#等待signalA從0變為1三次awaitcocotb.triggers.ClockCycles(dut.signalA,3,true)

fork-join_none

SystemVerilog中的fork-join_none用于發起一個線程但不等待線程的結束,在cocotb中,相應的語法為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是起一個協程,因而resut_dut需添加async聲明。

fork-join

與SystemVerilog中相對應的,cocotb等待一個協程的結束同樣提供了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并無專門的對應語法,但卻有相似的方法供調用:

class cocotb.triggers.First(*triggers)

等待第一個協程結束即返回

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

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

event

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

class cocotb.triggers.Event(name=None)

用于兩個協程間的同步

方法:

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

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

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

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

旗語

cocotb中提供了Lock操作用來實現與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主要用于不同進程間的通信,在cocotb中,普通的Python的隊列即可實現該功能(協程中無需沒有進程間同步問題)。

審核編輯 :李倩

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 代碼
    +關注

    關注

    30

    文章

    4808

    瀏覽量

    68808
  • 語法
    +關注

    關注

    0

    文章

    44

    瀏覽量

    9844
  • 非阻塞賦值
    +關注

    關注

    0

    文章

    10

    瀏覽量

    10016

原文標題:cocotb—基礎語法對照篇

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

收藏 人收藏

    評論

    相關推薦

    SSM開發的常見問題及解決方案

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

    SQL錯誤代碼及解決方案

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

    Lua語法基礎教程(下篇)

    今天我們繼續學習Lua語法基礎教程,下篇。 九、函數 9.1 初識函數 函數是指一段在一起的、可以做某一件事兒的程序,也叫做子程序。 在前面的內容,我們已經接觸過了函數的調用,這個函數就是前面用到
    的頭像 發表于 10-26 11:41 ?302次閱讀
    Lua<b class='flag-5'>語法</b>基礎教程(下篇)

    Lua語法基礎教程(中篇)

    今天我們繼續學習Lua語法基礎教程,中篇。 五、變量 5.1 number變量 變量,可以看作是一個桶,在里面裝你想要裝的內容。這些內容可以是Lua包含的所有合法類型。 例如:我想要新建一個桶,名叫
    的頭像 發表于 10-26 11:39 ?281次閱讀
    Lua<b class='flag-5'>語法</b>基礎教程(中篇)

    Verilog語法運算符的用法

    verilog語法中使用以下兩個運算符可以簡化我們的位選擇代碼。
    的頭像 發表于 10-25 15:17 ?1083次閱讀
    Verilog<b class='flag-5'>語法</b><b class='flag-5'>中</b>運算符的用法

    Lua語法基礎教程(上篇)

    今天我們來學習Lua語法基礎教程。由于篇幅過長,將分為上中下三篇進行講解,本篇為上篇。 一、初識Lua Lua 是一種輕量小巧的腳本語言,它用標準C語言編寫并以源代碼形式開放。這意味著什么呢?這
    的頭像 發表于 10-24 07:17 ?251次閱讀

    《DNK210使用指南 -CanMV版 V1.0》第七章 基于CanMV的MicroPython語法開發環境搭建

    第七章 基于CanMV的MicroPython語法開發環境搭建 前面章節已經介紹了如何編譯CanMV固件,并將編譯好的CanMV固件燒錄至Kendryte K210,本章將介紹如何在Windows
    發表于 09-13 09:30

    TestStand表達式中常用的語法規則和運算符使用

    TestStand也有自己的語言嘛?在回答這個問題之前大家可以想一下在使用TestStand時有一個和語言密切相關的屬性。沒錯那就是表達式(Expressions),在這篇文章,小編將以Q&A的方式來帶著大家來理解并熟悉TestStand表達式較為常用的一些
    的頭像 發表于 08-15 18:10 ?1601次閱讀
    TestStand表達式中常用的<b class='flag-5'>語法</b>規則和運算符使用

    TINA-TI導入spice模型失敗,提示語法元素錯誤是哪里出了問題?

    在使用TINA-TI 導入器件的Spice模型時,提示錯誤語法元素錯誤,不能導入器件,其spice內容如下:煩請知道,非常感謝! * DRB501VM-40 D model * PKG: UMD2
    發表于 08-09 07:51

    用python寫驗證環境cocotb

    本文介紹了cocotb的安裝、python tb文件的寫法、用xrun仿真cocotb的腳本等,我們來看看體驗如何。
    的頭像 發表于 07-24 09:38 ?582次閱讀
    用python寫驗證環境<b class='flag-5'>cocotb</b>

    HarmonyOS Next 原生應用開發-ArkTS語法適配背景說明

    規則基于上述設計考慮進行了明確定義,同時,SDK增加了在編譯流程對.ets文件的ArkTS語法檢查,通過編譯告警或編譯失敗提示開發者適配新的ArkTS語法。 根據工程
    發表于 07-01 16:49

    FPGA學習筆記---基本語法

    Verilog語法是指硬件能夠實現的語法。它的子集很小。常用的RTL語法結構如下: 1、模塊聲明:module ... end module 2、端口聲明:input, output, inout
    發表于 06-23 14:58

    直流可編程電子負載IT8500系列編程與語法指南

    電子發燒友網站提供《直流可編程電子負載IT8500系列編程與語法指南.pdf》資料免費下載
    發表于 04-14 09:56 ?3次下載

    verilogrepeat必須用begin和end嗎

    在Verilog,repeat語句不需要使用begin和end塊。repeat語句是一種循環控制語句,允許重復執行一個代碼塊指定的次數。它的一般語法如下: repeat (n) statement
    的頭像 發表于 02-23 10:14 ?1277次閱讀

    鴻蒙之HML語法參考

    }} {{!flag1}} 卡片hml文件的變量需要在json文件的data字段下進行聲明: ? { "data": { "content": "Hello World!", "key1": "Hello
    的頭像 發表于 02-20 15:53 ?488次閱讀
    主站蜘蛛池模板: 午夜在线观看福利| 欧美黑粗| 国产在线精彩视频二区| 国产一区在线播放| 51成人网| 天天插天天插| 久久草在线视频国产一| 国产特黄特色的大片观看免费视频| 福利一级片| jzzjlzz亚洲乱熟在线播放| 亚洲一区欧美一区| 欲色视频| 四虎永久精品免费网址大全| 五月花亚洲| 天天襙| 日本加勒比黑人| 国产午夜精品福利| 国产成人啪午夜精品网站| 日本不卡在线视频| 亚色影视| 免费观看a黄一级视频| 啊用力太猛了啊好深视频免费| 午夜看片网| 99午夜高清在线视频在观看| 亚洲卡1卡2卡新区网站| 亚洲综合成人网在线观看| 日韩免费观看一级毛片看看| 精品国产综合区久久久久99| 亚洲精品在线视频| 在线视频网址免费播放| 久久久久久免费播放一级毛片| 天堂网2018| 精品国产免费一区二区| 午夜视频在线免费观看| 91在线网| 亚洲福利二区| 巨乳色网址| 天堂最新资源在线| 黄色网视频| 天天做人人爱夜夜爽2020| 国产做a爰片久久毛片a|