chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

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

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

cocotb中的基礎(chǔ)語(yǔ)法

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

掃碼添加小助手

加入工程師交流群

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

非阻塞賦值

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

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

在cocotb的手冊(cè)里提到:

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中這樣來(lái)進(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

阻塞賦值

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

setimmediatevalue(value)

因而對(duì)于阻塞賦值,我們?cè)赾ocotb中可以這樣寫:

dut.input_signal.setimmediatevalue(1)

信號(hào)值讀取

對(duì)于信號(hào)的讀取,我們?cè)赟ystemVerilog中,可以直接讀取信號(hào)值,而在cocotb中,其為接口變量提供了value方法屬性用于獲取信號(hào)值。

讀取方式: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.

信號(hào)的讀取我們可以這么來(lái)寫:

# 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里,我們通過(guò)Timer來(lái)實(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í)行的時(shí)間長(zhǎng)度是依賴于仿真器的,因此Timer延遲的執(zhí)行需調(diào)用await:

await Timer(1, units='ns')

邊沿檢測(cè)

在SystemVerilog中我們常用posedge、negedge來(lái)檢測(cè)上升沿和下降沿,在cocotb里,針對(duì)邊沿檢測(cè),其提供了四個(gè)調(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.

檢測(cè)等待指定到個(gè)數(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.

我們?cè)谑褂脮r(shí),可以這么來(lái)寫:

#等待信號(hào)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ā)起一個(gè)線程但不等待線程的結(jié)束,在cocotb中,相應(yīng)的語(yǔ)法為fork:

cocotb.fork()

Schedule a coroutine to be run concurrently

在寫仿真代碼時(shí),我們可以這么寫:

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是起一個(gè)協(xié)程,因而resut_dut需添加async聲明。

fork-join

與SystemVerilog中相對(duì)應(yīng)的,cocotb等待一個(gè)協(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語(yǔ)法,cocotb并無(wú)專門的對(duì)應(yīng)語(yǔ)法,但卻有相似的方法供調(diào)用:

class cocotb.triggers.First(*triggers)

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

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

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

event

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

class cocotb.triggers.Event(name=None)

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

方法:

set(data=None):?jiǎn)拘阉械却撌录膮f(xié)程

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

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

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

旗語(yǔ)

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

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é)程中無(wú)需沒(méi)有進(jìn)程間同步問(wèn)題)。

審核編輯 :李倩

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

    關(guān)注

    30

    文章

    4940

    瀏覽量

    73053
  • 語(yǔ)法
    +關(guān)注

    關(guān)注

    0

    文章

    44

    瀏覽量

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

    關(guān)注

    0

    文章

    11

    瀏覽量

    10105

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

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

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    匯編程序段的定義介紹

    指令部分)... MOVAX, 4C00H INT21H CODE ENDS ENDSTART 語(yǔ)法解讀: 程序開(kāi)始的兩條指令都是用于裝載數(shù)據(jù)段寄存器DS的。進(jìn)入程序后,代碼段寄存器CS的值
    發(fā)表于 11-21 08:19

    堆棧的定義,堆棧的使用方法

    堆棧的定義 堆棧也是用戶使用的存儲(chǔ)器的一部分,用于存放臨時(shí)性的數(shù)據(jù)和一些其他信息。堆棧段的定義語(yǔ)法如下: 堆棧名SEGMENTSTACK (堆棧內(nèi)容) 堆棧名ENDS 語(yǔ)法解釋: 堆棧
    發(fā)表于 11-21 06:49

    語(yǔ)法糾錯(cuò)和testbench的自動(dòng)生成

    在編寫Verilog代碼時(shí),我一般都是先在編輯器上寫完,因?yàn)榫庉嬈鱲scode或者notepad++可以提供語(yǔ)法高亮和自動(dòng)補(bǔ)全等功能,然后用仿真器跑仿真,但是在編寫過(guò)程不可避免的會(huì)有一些語(yǔ)法的錯(cuò)誤
    發(fā)表于 10-27 07:07

    如何解決將e203的rtl導(dǎo)入vivado后報(bào)語(yǔ)法錯(cuò)誤的問(wèn)題

    主要內(nèi)容是介紹一下如何解決將e203的rtl導(dǎo)入vivado后,報(bào)語(yǔ)法錯(cuò)誤的問(wèn)題。 二、分享內(nèi)容 如圖所示,導(dǎo)入源碼后跑仿真,會(huì)報(bào)語(yǔ)法錯(cuò)誤。 這是因?yàn)檫@些文件里面有用system verilog
    發(fā)表于 10-24 09:49

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

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

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

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

    termux輸出Hello termux

    的 Python 語(yǔ)法 Python 腳本文件只需包含純 Python 代碼,無(wú)需添加 `python` 命令或 HTML 標(biāo)簽(如 ``)。錯(cuò)誤信息的 `python` 導(dǎo)致解釋器無(wú)法識(shí)別
    發(fā)表于 08-29 12:16

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    SSM開(kāi)發(fā)的常見(jiàn)問(wèn)題及解決方案

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