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

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

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

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

Verilog generate語(yǔ)句的類型

數(shù)字前端ic芯片設(shè)計(jì) ? 來(lái)源:未知 ? 作者:李倩 ? 2018-03-16 14:34 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

Verilog的generate語(yǔ)句能夠幫助我們寫(xiě)出可配置可綜合的RTL,主要用于重復(fù)性實(shí)例化模塊或者有條件地實(shí)例化模塊。這篇文章將簡(jiǎn)單回顧一下verilog generate語(yǔ)句。

Verilog generate語(yǔ)句的類型一

有兩種不同的generate語(yǔ)句結(jié)構(gòu)。

Generate loop能夠?qū)⒁欢未a例化多次,通過(guò)一個(gè)index變量來(lái)控制。

conditional generate語(yǔ)句能夠在多段代碼中選擇一段進(jìn)行例化。Conditional generate包括了if-generate和case-generate兩種不同模式。

Verilog的generate語(yǔ)句在仿真/綜合的elaborate階段進(jìn)行分析,這個(gè)步驟發(fā)生在HDL語(yǔ)言解析之后,在仿真/綜合之前。因此generate結(jié)構(gòu)中包含的所有表達(dá)式在elaborate的時(shí)候都要是確定的表達(dá)式,不能包含動(dòng)態(tài)變量。比如,generate中的語(yǔ)句能受parameter影響,但不能被動(dòng)態(tài)變量影響。

一個(gè)verilog generate模塊創(chuàng)建了一個(gè)新的層次,就像實(shí)例化了一個(gè)模塊一樣。

關(guān)鍵字generate和end generate(以及begin/end)實(shí)際上不是必須的,如果使用的話,那么他們就定義了一塊generate的區(qū)域,generate的區(qū)域只能存在于在module這個(gè)scope里。

generate loop一

Generate loop的語(yǔ)法和for loop很類似。Index變量要先用genvar關(guān)鍵字來(lái)定義,genvar所定義的index變量會(huì)被用在elaboration中。Genvar可以存在于generate region(由generate-endgenerate關(guān)鍵字來(lái)限定)之內(nèi)或之外。同一個(gè)genvar定義的index可以被用在多個(gè)generate loop中,只要這些loop沒(méi)有互相嵌套。

如果將generate loop展開(kāi),在每個(gè)generate loop instance中,都會(huì)創(chuàng)建一個(gè)隱含的localparam,其名字和類型與genvar所定義的index相同,其值就是當(dāng)前的循環(huán)次數(shù)。這個(gè)localparam能夠用來(lái)控制生成代碼。

Generate loop所生成的模塊可以被命名也可以不被命名。如果被命名,那么將會(huì)生成以所給名字開(kāi)頭的一個(gè)數(shù)組,每個(gè)數(shù)組元素是一個(gè)模塊hierarchy。有些工具對(duì)于未命名的generate loop會(huì)給予警告,因此最好將其命名。

下面的例子是一個(gè)使用verilog generate loop來(lái)生成的格雷碼->二進(jìn)制碼的轉(zhuǎn)換器

另外一個(gè)來(lái)自verilog-2005 LRM的例子闡述了每個(gè)verilog generate loop是如何生成一個(gè)新的scope的。注意到wire t1,t2,t3都是在generate loop中被聲明的,每個(gè)loop iteration都創(chuàng)建了完全不沖突的三個(gè)t1,t2,t3。他們都被用于在每個(gè)不同的數(shù)組模塊中連接相應(yīng)的電路。并且注意到這些被實(shí)例化的xor,and的命名方式。

generate loop同樣能嵌套。只需要單一一個(gè)generate/endgenerate來(lái)包裹這些嵌套的generate loop。每個(gè)generate loop都建立一個(gè)新的scope。

if-generate一

Conditional if-generate會(huì)從一組互斥的generate block中最多選擇一個(gè)generate block。注意到這里說(shuō)的是最多選擇一個(gè),也有可能一個(gè)都不選。而這個(gè)判斷語(yǔ)句在elaborate的時(shí)候也必須是常量表達(dá)式。

與generate loop一樣,conditional if-generate可以命名也可以不命名,可以使用也可以不使用begin-end。它同樣會(huì)創(chuàng)建一個(gè)新的scope以及hierarchy層次。因?yàn)閏onditional generate選擇至多一個(gè)block的代碼,對(duì)于互斥的block code,在同一個(gè)if-generate結(jié)構(gòu)里可以有同樣的命名。這能夠幫助保留層次名,無(wú)論哪個(gè)block的代碼被選擇。而不同的generate結(jié)構(gòu)則一定要有不同的名字。

case-generate一

與if-generate類似。case-generate最多會(huì)從一組互斥的generate block中選擇一個(gè)generate block。它的用法和傳統(tǒng)的case語(yǔ)句一樣。

嵌套的 conditional generate block沒(méi)有用begin end來(lái)切割會(huì)被歸為單獨(dú)一個(gè)scope/hierarchy。這能夠避免在同一個(gè)module中創(chuàng)建沒(méi)變要的scope/hierarchy。下面的例子是一個(gè)嵌套conditional generate block的例子

generate結(jié)構(gòu)會(huì)選擇至多一個(gè)叫u1的generate block。而g1的hierarchcal名字是test.u1.g1。當(dāng)嵌套if-generate 結(jié)構(gòu)的時(shí)候,else永遠(yuǎn)屬于最近的if。注意到這里任何多余的begin-end會(huì)違反這個(gè)direct nest規(guī)則,從而生成新的hierarchy。

generate模塊命名一

推薦給generate construct命名來(lái)簡(jiǎn)化層次索引。并且有些工具對(duì)于不命名的generate block會(huì)報(bào)錯(cuò)。

如果不命名的話,首先,每個(gè)generate construct在一個(gè)scope中都被賦予了一個(gè)數(shù)字,從1開(kāi)始??雌湓趓tl code中是第幾個(gè)出現(xiàn)的generate就被賦值為幾。這個(gè)數(shù)字對(duì)于命名和未命名的generate block都有。所有未命名的block都會(huì)被取一個(gè)叫g(shù)enblk【n】的名字,n就是被賦予的數(shù)字。

很明顯隨著RTL規(guī)則的改動(dòng)這些未命名的generate construct的名字也會(huì)改變。這樣對(duì)于保證RTL層次化會(huì)有困難。因此建議總是對(duì)generate block進(jìn)行命名。

小結(jié)一

Generate 結(jié)構(gòu)在創(chuàng)建可配置的RTL的時(shí)候很有用。Generate loop能夠讓語(yǔ)句實(shí)例化多次,通過(guò)index來(lái)控制。而conditional generate能夠選擇性地實(shí)例化語(yǔ)句。最重要的是要記得對(duì)generate construct進(jìn)行命名,這能夠幫助簡(jiǎn)化層次對(duì)象以及代碼維護(hù)。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(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)投訴
  • Verilog
    +關(guān)注

    關(guān)注

    29

    文章

    1367

    瀏覽量

    112310

原文標(biāo)題:Verilog——關(guān)于generate語(yǔ)句

文章出處:【微信號(hào):ic_frontend,微信公眾號(hào):數(shù)字前端ic芯片設(shè)計(jì)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    Verilog之for語(yǔ)句

    以前很少用for語(yǔ)句,以為是不可綜合的。在印象中好像只用循環(huán)生成(for...generate語(yǔ)句綜合過(guò)多個(gè)模塊。最近在仔細(xì)研讀《輕松成為設(shè)計(jì)高手——Verilog HDL使用精解》
    發(fā)表于 08-13 14:59

    Veriloggenerate if 語(yǔ)句如何用systemc實(shí)現(xiàn)?

    Veriloggenerate if語(yǔ)句如何用systemc實(shí)現(xiàn)?例如:generateif (SIZE < 8)assign y = a & b & c;else
    發(fā)表于 08-28 12:06

    Veriloggenerate if語(yǔ)句如何用systemc實(shí)現(xiàn)?

    1.Veriloggenerate if語(yǔ)句如何用systemc實(shí)現(xiàn)?例如:generateif (SIZE < 8)assign y = a & b & c;else
    發(fā)表于 08-29 16:11

    新手求解verilog 中的生成塊語(yǔ)句 的意思

    verilog 中的 generate for 語(yǔ)句好理解,但是 generate if 和 generate case
    發(fā)表于 12-21 12:44

    【夢(mèng)翼師兄今日分享】 generate語(yǔ)句塊的講解

    的列舉就會(huì)變得很笨拙甚至是不可行的。C語(yǔ)言處理這種問(wèn)題通常情況下會(huì)使用如for循環(huán)語(yǔ)句來(lái)完成多次的相同操作。而verilog 語(yǔ)言呢?同樣的為我們提供了generate語(yǔ)句塊來(lái)幫助我們
    發(fā)表于 12-04 10:33

    veriloggenerate語(yǔ)句的用法分享

    generateverilog中的生成語(yǔ)句,當(dāng)對(duì)矢量中的多個(gè)位進(jìn)行重復(fù)操作時(shí),或者當(dāng)進(jìn)行多個(gè)模塊的實(shí)例引用的重復(fù)操作時(shí),或者根據(jù)參數(shù)的定義來(lái)確定程序中是否應(yīng)該包含某段Verilog
    發(fā)表于 12-23 16:59

    generate語(yǔ)句的基本概念與用法

    生成語(yǔ)句GENERATE)是一種可以建立重復(fù)結(jié)構(gòu)或者是在多個(gè)模塊的表示形式之間進(jìn)行選擇的語(yǔ)句。由于生成語(yǔ)句可以用來(lái)產(chǎn)生多個(gè)相同的結(jié)構(gòu),因此使用生成
    的頭像 發(fā)表于 11-21 07:08 ?6536次閱讀

    Verilog可綜合的循環(huán)語(yǔ)句

    Verilog中提供了四種循環(huán)語(yǔ)句,可用于控制語(yǔ)句的執(zhí)行次數(shù),分別為:for,while,repeat,forever。其中,for,while,repeat是可綜合的,但循環(huán)的次數(shù)需要在編譯之前就確定,動(dòng)態(tài)改變循環(huán)次數(shù)的
    發(fā)表于 10-13 12:23 ?2w次閱讀

    Verilog教程之Verilog HDL程序設(shè)計(jì)語(yǔ)句和描述方式

    本文檔的主要內(nèi)容詳細(xì)介紹的是Verilog教程之Verilog HDL程序設(shè)計(jì)語(yǔ)句和描述方式。
    發(fā)表于 12-09 11:24 ?47次下載
    <b class='flag-5'>Verilog</b>教程之<b class='flag-5'>Verilog</b> HDL程序設(shè)計(jì)<b class='flag-5'>語(yǔ)句</b>和描述方式

    verilog中的initial語(yǔ)句說(shuō)明

    解釋verilog HDL中的initial語(yǔ)句的用法。
    發(fā)表于 05-31 09:11 ?0次下載

    簡(jiǎn)述Verilog HDL中阻塞語(yǔ)句和非阻塞語(yǔ)句的區(qū)別

    ? 在Verilog中有兩種類型的賦值語(yǔ)句:阻塞賦值語(yǔ)句(“=”)和非阻塞賦值語(yǔ)句(“=”)。正確地使用這兩種賦值
    的頭像 發(fā)表于 12-02 18:24 ?6777次閱讀
    簡(jiǎn)述<b class='flag-5'>Verilog</b> HDL中阻塞<b class='flag-5'>語(yǔ)句</b>和非阻塞<b class='flag-5'>語(yǔ)句</b>的區(qū)別

    Verilog語(yǔ)法之generate for、generate if、generate case

    Verilog-2005中有3個(gè)generate 語(yǔ)句可以用來(lái)很方便地實(shí)現(xiàn)重復(fù)賦值和例化(generate for)或根據(jù)條件選擇性地進(jìn)行編譯(ge
    的頭像 發(fā)表于 12-28 15:21 ?3444次閱讀

    Verilog中的If語(yǔ)句和case語(yǔ)句介紹

    我們?cè)谏弦黄恼轮幸呀?jīng)看到了如何使用程序塊(例如 always 塊來(lái)編寫(xiě)按順序執(zhí)行的 verilog 代碼。 我們還可以在程序塊中使用許多語(yǔ)句來(lái)控制在我們的verilog設(shè)計(jì)中信號(hào)賦值的方式
    的頭像 發(fā)表于 05-11 15:37 ?5784次閱讀
    <b class='flag-5'>Verilog</b>中的If<b class='flag-5'>語(yǔ)句</b>和case<b class='flag-5'>語(yǔ)句</b>介紹

    如何使用參數(shù)化編寫(xiě)可重用的verilog代碼

    我們將介紹如何使用verilog參數(shù)和generate語(yǔ)句來(lái)編寫(xiě)可重用的verilog 代碼。 與大多數(shù)編程語(yǔ)言一樣,我們應(yīng)該嘗試使盡可能多的代碼可重用。這使我們能夠減少未來(lái)項(xiàng)目
    的頭像 發(fā)表于 05-11 15:59 ?1483次閱讀

    Verilog常用的循環(huán)語(yǔ)句及用途

    本文主要介紹verilog常用的循環(huán)語(yǔ)句,循環(huán)語(yǔ)句的用途,主要是可以多次執(zhí)行相同的代碼或邏輯。
    的頭像 發(fā)表于 05-12 18:26 ?3316次閱讀