精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

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

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

3天內不再提示

cocotb中的基礎語法與SystemVerilog中的常用語法對照總結

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

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.

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

#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.

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


fork-join_none

SystemVerilog中的fork-join_none用于發起一個線程但不等待線程的結束,在cocotb中,相應的語法為fork:

cocotb.fork()

Schedule a coroutine to be run concurrently

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

這里值得注意的是,由于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:

使用方式:


fork-any

相較于SystemVerilog中的join-any語法,cocotb并無專門的對應語法,但卻有相似的方法供調用:

class cocotb.triggers.First(*triggers)

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

這里我們通過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的隊列即可實現該功能(協程中無需沒有進程間同步問題)。

審核編輯就:劉清

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

    關注

    14

    文章

    1016

    瀏覽量

    83649
  • RTL
    RTL
    +關注

    關注

    1

    文章

    385

    瀏覽量

    59710
  • python
    +關注

    關注

    56

    文章

    4783

    瀏覽量

    84474
收藏 人收藏

    評論

    相關推薦

    VHDL語言的常用語法

    VHDL語言的常用語法[學習要求] 掌握VHDL硬件描述語言的基本描述語句。并可以利用這些語句進行簡單電路的設計。[重點與難點]重點:常用的并行語句與順序語句的語法。難點:部件(Component
    發表于 03-19 16:45

    PCB常用語匯總

    PCB常用語匯總
    發表于 11-13 12:03

    linux的常用命令總結

    授之以漁:了解命令學習方法、用途:不再死記硬背,拒絕漫無目的;準確無誤:所有命令執行通過(環境為centos7),拒絕復制粘貼;實用性高:命令多為實際工作中用到的,實例講解,拒絕純理論;條理清晰:分類歸納,快速找到想要的命令,拒絕天馬行空;總結性強:只列常用語法,易錯情況
    發表于 07-17 07:42

    labsql ADO 常用語句命令

    labsqlADO 常用語句命令
    發表于 08-14 16:21

    verilog HDL語法總結

    verilog HDL語法總結
    發表于 03-16 14:26

    單片機C語言編程常用語句有哪些?

    單片機C語言編程常用語句有哪些?
    發表于 10-21 08:45

    Linux內核GNU C擴展的一些常用C語言語法分析

    13.1 總結前面12節的課程,主要針對 Linux 內核 GNU C 擴展的一些常用 C 語言語法進行了分析。GNU C 的這些擴展語法
    發表于 12-14 06:29

    【使用指南】Markdown編輯器常用語法功能

    基本語法 一些常規的語法格式。 1.1 標題 標題用#+空格表示,不同數量的#可以表示不同的標題。建議帖子或回帖的頂級標題使用Heading3,不要使用1或2,因為1是系統站點級,2是帖子標題級。示例
    發表于 05-13 19:40

    VHDL語言的常用語法

    [學習要求] 掌握VHDL硬件描述語言的基本描述語句。并可以利用這些語句進行簡單電路的設計。[重點與難點]重點:常用的并行語句與順序語句的語法。難點:部件(Component
    發表于 03-18 22:03 ?100次下載

    SQL、LINQ、Lambda語法對照

    本文檔內容介紹了基于SQL、LINQ、Lambda語法對照圖,供參考
    發表于 02-27 17:03 ?8次下載

    關于verilog的學習經驗簡單分享

    學習verilog最重要的不是語法,“因為10%的語法就能完成90%的工作”,verilog語言常用語言就是always@(),if~else,case,assign這幾個了。
    發表于 03-26 14:06 ?2867次閱讀
    關于verilog的學習經驗簡單分享

    cocotb的基礎語法

    cocotb的出現使得我們能夠在做RTL仿真驗證時依托Python來進行測試用例的構建,當我們習慣了用Verilog、SystemVerilog來構建測試用例時,切換到cocotb后最直觀的方式便是我們能夠建立
    的頭像 發表于 07-21 09:18 ?2334次閱讀

    SQL語句的常用語法公式和常見的面試題目

    數據庫的相關SQL查詢語句是軟件測試工程師面試的一大重點,也是很多小伙伴面試中覺得比較困難的知識點。下面小編總結出一些SQL語句的常用語法公式和常見的面試題目。
    的頭像 發表于 11-07 10:10 ?1281次閱讀

    SystemVerilog至關重要的結構體和自定義類型

    在上一篇文章《SystemVerilog至關重要的的數據類型》,介紹了枚舉類型的本質和使用語法。本文接著介紹SV同樣不可忽略的結構體(
    的頭像 發表于 01-21 17:18 ?2079次閱讀
    <b class='flag-5'>SystemVerilog</b><b class='flag-5'>中</b>至關重要的結構體和自定義類型

    MySQL常用語

    MySQL是一個關系型數據庫管理系統,廣泛應用于Web應用程序的開發以及數據管理領域。在使用MySQL時,有一些常用的語句可以幫助我們進行數據的操作和管理。接下來,我將詳細介紹MySQL的常用語
    的頭像 發表于 11-21 11:11 ?495次閱讀