色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

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

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

電路和微電子考研 ? 來(lái)源:CSDN技術(shù)社區(qū) ? 2022-12-28 15:21 ? 次閱讀

Verilog-2005中有3個(gè)generate 語(yǔ)句可以用來(lái)很方便地實(shí)現(xiàn)重復(fù)賦值和例化(generate for)或根據(jù)條件選擇性地進(jìn)行編譯(generate if和generate case)等功能。接下來(lái)就一起看下這3個(gè)語(yǔ)句的應(yīng)用場(chǎng)景和應(yīng)用方法吧。

PART ONE

generate for

假設(shè)我希望把2個(gè)輸入a[4:0]和b[4:0]做一個(gè)異或操作,但是順序要顛倒,也就是這樣:

module xor_test(

input[4:0]a,

input[4:0]b,

output[4:0]out);

assignout[4] = a[4] ^ b[0];

assignout[3] = a[3] ^ b[1];

assignout[2] = a[2] ^ b[2];

assignout[1] = a[1] ^ b[3];

assignout[0] = a[0] ^ b[4];

endmodule

在vivado中分析出來(lái)是這樣的:很簡(jiǎn)單就是兩個(gè)輸出的不同為做一個(gè)異或運(yùn)算。

871fc956-8673-11ed-bfe3-dac502259ad0.png

vivado綜合出來(lái)是這樣的:用了幾個(gè)LUT來(lái)實(shí)現(xiàn)異或功能。

87375788-8673-11ed-bfe3-dac502259ad0.png

1應(yīng)用場(chǎng)景

上面的例子限于篇幅我只假設(shè)了輸入為5bit的位寬,所以這樣寫并不會(huì)讓人覺(jué)得有多麻煩,但是假想一下如果位寬變成10、20、100呢?那我手不寫斷去?

當(dāng)你需要進(jìn)行一些重復(fù)性的工作時(shí),比如多次例化同一模塊、同一語(yǔ)句等,可以使用generate for語(yǔ)句來(lái)解放雙手,節(jié)省工作量。當(dāng)然你用腳本語(yǔ)言來(lái)生成或者直接用某些編輯器也能很快地實(shí)現(xiàn)這個(gè)功能,不過(guò)在這里我們就不提了。

上面的例子用generate for語(yǔ)句寫是這樣的:

module xor_test(

input[4:0]a,

input[4:0]b,

output[4:0]out

);

genvar i;//定義常量作為重復(fù)判斷條件

generate

for (i = 0; i < 8; i = i + 1)//重復(fù)條件

begin: XOR_INST//begin要起個(gè)名字

assignout[i] = a[i] ^ b[4-i];//需要重復(fù)的語(yǔ)句

end

endgenerate

endmodule

在vivado中分析出來(lái)是這樣的:(與上面的方式一致)

875a2dbc-8673-11ed-bfe3-dac502259ad0.png

vivado綜合出來(lái)是這樣的:(仍然與上面的方式一致)

876f8874-8673-11ed-bfe3-dac502259ad0.png

這樣看, generate for是個(gè)不錯(cuò)的提高效率的方案。當(dāng)然,該語(yǔ)句不光可以對(duì)assign進(jìn)行重復(fù)賦值,還適用以下場(chǎng)景:

(1)模塊module;(2)用戶定義原語(yǔ)UDP;(3)門級(jí)語(yǔ)句;(4)連續(xù)賦值語(yǔ)句assign;(5)initial和always塊。

2格式

generate for語(yǔ)句的一般用法:

// Declare the loop variable

genvar;

// Code for the

generate

for (;;) begin

// Code to execute

end

endgenerate

如果你是一個(gè)基于xilinx的開(kāi)發(fā)者,可以使用vivado自帶的語(yǔ)法模板:

(1)打開(kāi)語(yǔ)法模板:

8790b512-8673-11ed-bfe3-dac502259ad0.png

(2)搜索generate:

87ba5e80-8673-11ed-bfe3-dac502259ad0.png

(3)把上圖右側(cè)的語(yǔ)句復(fù)制到你自己的代碼里邊。

關(guān)于generate for語(yǔ)句的使用需要注意:

generate for 語(yǔ)句必須使用genvar關(guān)鍵字定義for循環(huán)變量

generate for 循環(huán)必須加 begin…end, 哪怕只有一句

不要使用 i++這種C語(yǔ)言式的自增語(yǔ)句(Verilog沒(méi)有i++這個(gè)語(yǔ)法),而是使用 i = i + 1

generate后不加begin,里面的語(yǔ)法:for循環(huán)、if…else…、case語(yǔ)句 后面的begin后面一定要加名字,且名字唯一,否則會(huì)導(dǎo)致無(wú)法比對(duì)通過(guò)的問(wèn)題

過(guò)多的generate會(huì)導(dǎo)致收集覆蓋率緩慢,要注意使用

PART TWO

generate if

generate if的使用場(chǎng)景和條件編譯語(yǔ)句類似,比如你的代碼中包含了一個(gè)加法模塊和一個(gè)減法模塊,對(duì)于2個(gè)輸入a和b,希望使用POL來(lái)進(jìn)行控制:如POL=1則進(jìn)行加法,反之亦然----POL=1----out = a + b;POL=0----out = a - b。

代碼是這樣寫的:

module xor_test(

input[4:0]a,

input[4:0]b,

output[4:0]out

);

localparamintegerPOL = 1;//根據(jù)POL的值來(lái)生成對(duì)應(yīng)的電路

generate

if (POL == 1) begin: POL1

assignout = a + b;

end else begin: POL0

assignout = a - b;

end

endgenerate

endmodule

定義成POL = 1時(shí)會(huì)由vivado綜合成一個(gè)加法器:

87f0ba02-8673-11ed-bfe3-dac502259ad0.png

定義成POL = 0時(shí)則會(huì)由vivado綜合成一個(gè)減法器:

8820fc3a-8673-11ed-bfe3-dac502259ad0.png

假如不使用generate if語(yǔ)法,則代碼是這樣的:

module xor_test(

input[4:0]a,

input[4:0]b,

inputPOL,

outputreg[4:0]out

);

always@(*)begin

if(POL == 1)

out = a + b;

else

out = a - b;

end

endmodule

這樣綜合出來(lái)的就是加法電路和減法電路一起:

8840964e-8673-11ed-bfe3-dac502259ad0.png

使用generate if可以根據(jù)需要來(lái)靈活地生成對(duì)應(yīng)電路,不會(huì)浪費(fèi)資源,適用于某些根據(jù)特定需求來(lái)實(shí)現(xiàn)電路的場(chǎng)景。而不使用該語(yǔ)句則會(huì)把所有潛在的電路均綜合出來(lái),會(huì)使電路面積增大,但是靈活性卻較高。

這是vivado自帶的語(yǔ)法模板:

generate

if () begin:

;

end else if () begin:

;

end else begin:

;

end

endgenerate

PART TWO

generate case

generate case和generate if作用上是差不多的,都是用于選擇性綜合電路,區(qū)別就是if語(yǔ)句和case語(yǔ)句的區(qū)別,如果你會(huì)用其中一個(gè),那另一個(gè)也很簡(jiǎn)單,模板如下:

generate

case ()

: begin:

end

: begin:

end

default: begin:

end

endcase

endgenerate

上面的例子照著改就是這樣了:

module xor_test(

input[4:0]a,

input[4:0]b,

output[4:0]out

);

localparamintegerPOL = 1;//根據(jù)POL的值來(lái)生成對(duì)應(yīng)的電路

generate

case(POL)

1'b1: begin: POL1

assignout = a + b;

end

1'b0: begin: POL0

assignout = a - b;

end

defaultDEFAULT end

endcase

endgenerate

endmodule

審核編輯:湯梓紅

聲明:本文內(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)投訴
  • Verilog
    +關(guān)注

    關(guān)注

    28

    文章

    1351

    瀏覽量

    110077
  • 編譯
    +關(guān)注

    關(guān)注

    0

    文章

    657

    瀏覽量

    32852
  • Vivado
    +關(guān)注

    關(guān)注

    19

    文章

    812

    瀏覽量

    66473

原文標(biāo)題:【科普】Verilog語(yǔ)法之generate for、generate if、generate case

文章出處:【微信號(hào):feifeijiehaha,微信公眾號(hào):電路和微電子考研】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    Generate Waveform.vi

    Generate Waveform.vi
    發(fā)表于 07-09 11:09

    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

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

    的列舉就會(huì)變得很笨拙甚至是不可行的。C語(yǔ)言處理這種問(wèn)題通常情況下會(huì)使用如for循環(huán)語(yǔ)句來(lái)完成多次的相同操作。而verilog 語(yǔ)言呢?同樣的為我們提供了generate語(yǔ)句塊來(lái)幫助我們完成這些過(guò)程
    發(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代碼的時(shí)候
    發(fā)表于 12-23 16:59

    怎樣去使用在Verilog語(yǔ)法中的Generate for功能呢?有哪些注意事項(xiàng)

    Generate for的用法:對(duì)于FPGA工程師來(lái)講verilog語(yǔ)法可以說(shuō)是不能再熟悉了,在veriloggenerate for可以
    發(fā)表于 08-02 14:57

    Using References to Generate O

    This application report describes the process for using references to generate offsets forTexas Instrument’s TLC55XX family data converters.
    發(fā)表于 06-02 08:39 ?13次下載

    DAC and Op Amp Generate Variab

    Abstract: This design idea describes a simple circuit to generate a programmable negative control
    發(fā)表于 04-20 15:16 ?763次閱讀
    DAC and Op Amp <b class='flag-5'>Generate</b> Variab

    How to Generate PWM Waveforms

    of microcontrollers to generate desired PWM waveforms. The action will require that the compare functionality be enabled. The note includes
    發(fā)表于 04-23 16:16 ?1300次閱讀
    How to <b class='flag-5'>Generate</b> PWM Waveforms

    DAC and Op Amp Generate Variab

    Abstract: This design idea describes a simple circuit to generate a programmable negative control
    發(fā)表于 05-07 09:16 ?2032次閱讀
    DAC and Op Amp <b class='flag-5'>Generate</b> Variab

    Delphi資源生成器Delphi Resource Generate免費(fèi)下載

    Delphi Resource Generate用來(lái)生成我們經(jīng)常使用的資源文件。省去了去使用命令brcc32.exe的麻煩!提高效率很重要!
    發(fā)表于 12-12 14:54 ?1次下載
    Delphi資源生成器Delphi Resource <b class='flag-5'>Generate</b>免費(fèi)下載

    Verilog generate語(yǔ)句的類型

    Generate 結(jié)構(gòu)在創(chuàng)建可配置的RTL的時(shí)候很有用。Generate loop能夠讓語(yǔ)句實(shí)例化多次,通過(guò)index來(lái)控制。而conditional generate能夠選擇性地實(shí)例化語(yǔ)句。最重要的是要記得對(duì)
    的頭像 發(fā)表于 03-16 14:34 ?2.2w次閱讀
    <b class='flag-5'>Verilog</b> <b class='flag-5'>generate</b>語(yǔ)句的類型

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

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

    generate的用法與結(jié)構(gòu)

    主要是generate的用法,整個(gè)文件的功能是實(shí)現(xiàn)可選多通道數(shù)據(jù)發(fā)送,我們知道Cameralink中對(duì)于多通道傳輸時(shí)有一部分功能代碼時(shí)相同的,只不過(guò)需要多通道復(fù)用,我們知道generate有一個(gè)功能就是重復(fù)操作多個(gè)模塊的實(shí)例引用,當(dāng)然就適合本例程。
    的頭像 發(fā)表于 09-27 09:02 ?4523次閱讀

    時(shí)序分析基本概念介紹&lt;generate clock&gt;

    今天我們要介紹的時(shí)序分析概念是generate clock。中文名為生成時(shí)鐘。generate clock定義在sdc中,是一個(gè)重要的時(shí)鐘概念。
    的頭像 發(fā)表于 07-06 10:34 ?2271次閱讀
    時(shí)序分析基本概念介紹&lt;<b class='flag-5'>generate</b> clock&gt;
    主站蜘蛛池模板: 四虎国产精品永久一区高清| 在线视频a| 北条麻妃久久99精品| 精品人伦一区二区三区潘金莲| 日韩欧美一级| 99精品福利视频| 久草大| 污污内射在线观看一区二区少妇| 99热这里只有的精品| 久久精品视频在线看| 亚洲 日韩 欧美 另类 蜜桃| va亚洲va天堂va视频在线| 快播av种子| 伊人22222| 韩国精品无码少妇在线观看网站| 四虎精品久久| 国产 欧美 亚洲 日韩视频| 女性露出奶头流出精子| 张津瑜的9分58秒7段免费| 国产在线精品视频资源| 无码国产欧美日韩精品| 成片免费观看视频在线网| 你是淫荡的我的女王| 找老女人泻火对白自拍| 久久精品热在线观看30| 亚洲精品一区三区三区在线观看| 国产精品 日韩精品 欧美| 日韩精品亚洲专区在线影院| a级精品九九九大片免费看| 蜜桃TV成人网站免费打开| 在线观看国产区| 九九久久久2| 亚洲精品成人a在线观看| 国产欧美日韩视频怡春院 | 男助理憋尿PLAY灌尿BL出去| 在线亚洲视频无码天堂| 久久91精品国产91久| 幺妹视频福利视频| 九九热精品在线观看| 亚洲视频第二页| 九色PORNY真实丨国产大胸|