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

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

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

Verilog邏輯設(shè)計(jì)中的循環(huán)語句和運(yùn)算符

FPGA之家 ? 來源:時沿科技 ? 作者:Nemo_Yxc ? 2022-03-15 11:41 ? 次閱讀

“本文主要分享了在Verilog設(shè)計(jì)過程中一些經(jīng)驗(yàn)與知識點(diǎn),主要包括循環(huán)語句(forever、repeat、while和for)、運(yùn)算符?!?/p>

01

循環(huán)語句

在Verilog中存在著4種類型的循環(huán)語句(forever、repeat、while和for),其中“while”與“for”的使用方法與C語言中的基本類似。

“forever”語句

語句格式如下: forever begin //add codes end

forever語句經(jīng)常用于仿真時產(chǎn)生周期性的波形,但是必須寫在initial塊中。示例代碼如下
rega;  initial begin    a = 0;    forever      begin        #5 a = ~a;      end  end
仿真效果如下:

fb1b5090-9197-11ec-952b-dac502259ad0.png

可以看出,clk每5ns實(shí)現(xiàn)一次電平翻轉(zhuǎn)。
  • “repeat”語句

語句格式如下: repeat(重復(fù)次數(shù)) begin // add codes end示意代碼如下:
  parameter      times = 3;reg[7:0]b_1,b_2;  initial    begin      b_1 = 0;      #10;      b_1 = 8'b0000_0100;      #10;end  always@(b_1)    begin      b_2 = b_1;        repeat(times)        begin          b_2 = b_2 << 1;        end    end
仿真結(jié)果如下:

fb2e4cc2-9197-11ec-952b-dac502259ad0.png

在10ns的時候,b_1賦值為8’b0000_0100,這時候repeat語句觸發(fā),b_2變成了8’b0010_0000,可見b_2右移了三位,也就是repeat內(nèi)的語句重復(fù)執(zhí)行了3次。

  • “while”語句

語句格式如下: while(表達(dá)式) begin end while后面的表達(dá)式為真時,while將會一直執(zhí)行,直到表達(dá)式為假時,才結(jié)束執(zhí)行while語句。示例代碼如下

reg[7:0]c_1,c_2;  initial    begin      c_1 = 0;      #10;      c_1 = 1;      c_2 = 8'b0000_0001;      while(c_1)        begin          c_2 = c_2 << 1;          #10;          if(c_2 == 8'b0001_0000)            c_1 = 0;          else            c_1 = 1;        end    end
仿真結(jié)果如下:

fb40361c-9197-11ec-952b-dac502259ad0.png

可以看出,當(dāng)c_1==1的時候,while中的語句在不停的執(zhí)行,當(dāng)c_1==0時,程序跳出while,不在執(zhí)行。
  • “for”語句

for語句的語句形式:for(表達(dá)式1;表達(dá)式2;表達(dá)式3)beginend 它的執(zhí)行過程如下:
  1. 先求表達(dá)式1;

  2. 求解表達(dá)式2。若其值為真,則執(zhí)行 for 語句中指定的內(nèi)嵌語句,然后執(zhí)行第3步;若表達(dá)式2值為假,則結(jié)束循環(huán),轉(zhuǎn)到第5步;

  3. 求解表達(dá)式3;

  4. 轉(zhuǎn)回上面第2步繼續(xù)執(zhí)行;

  5. 循環(huán)結(jié)束,執(zhí)行 for 語句下面的語句。

    示例代碼如下:

  reg    [7:0]    d_1,d_2;  initial    begin      d_2 = 10;      #10;      for(d_1=1;d_1<5;d_1=d_1+1)        begin          d_2 = d_2 + 3;          #5;        end    end

fb4fb506-9197-11ec-952b-dac502259ad0.png

02

運(yùn)算符

  • 基本算術(shù)運(yùn)算符

  1. + (加法運(yùn)算符);

  2. - (減法運(yùn)算符);

  3. * (加法運(yùn)算符);

  4. / (除法運(yùn)算符);

  5. % (模運(yùn)算符或者求余運(yùn)算符,要求%兩側(cè)均為整型數(shù)據(jù),結(jié)果取第一個操作數(shù)的符號位,-10%3的結(jié)果是-1,11%-3的結(jié)果是2);

  • 賦值運(yùn)算符

  1. =;

  2. <=;

  • 關(guān)系運(yùn)算符

  1. > (大于);

  2. >= (大于等于);

  3. <=? ? ? (小于等于);

  4. == (等于);

  5. != (不等于);

  6. === (等于,可以比較含有X和Z的操作數(shù),在仿真中用的比較多);

  7. !== (不等于,可以比較含有X和Z的操作數(shù),在仿真中用的比較多)。

  • 邏輯運(yùn)算符

  1. && (邏輯與);

  2. || (邏輯或);

  3. ! (邏輯非)。

  • 條件運(yùn)算符

?:

例子:y=x?a:b(當(dāng)x為真時,y=a,當(dāng)x為假時,y=b)。

  • 位運(yùn)算符

位運(yùn)算符的操作數(shù)是幾位,結(jié)果也是幾位。

  1. ~ (取反);

  2. & (按位與);

  3. | (按位或);

  4. ^ (按位異或,XOR,相同為0,不同為1);

  5. ^~ (按位同或,相同為1,不同為0);

  6. ~& (與非,先按與的操作,然后結(jié)果取反);

  7. ~| (或非,先按或的操作,然后結(jié)果取反)。

  • 移位運(yùn)算符

  1. <

  2. >> (右移,右移一位相當(dāng)于除以2)。

  • 拼接運(yùn)算符

{s1,s2,s3,s4}:將兩個或者多個信號拼接起來。

  • 縮減運(yùn)算符(一元簡約運(yùn)算符)

縮減運(yùn)算符對單個操作數(shù)進(jìn)行與、或、非遞推運(yùn)算,最后的結(jié)果是1位的二進(jìn)制數(shù)。具體過程如下:

  1. 先將操作數(shù)的第1位和第2位進(jìn)行與、或、非運(yùn)算;

  2. 運(yùn)算的結(jié)果與第3位進(jìn)行與、或、非運(yùn)算;

  3. 一次類推,知道最后一位。

例子:
reg    [3:0]     a;reg              b;b = &a;   等同于   b = ((a[0]&a[1])&a[2])&a[3]。
審核編輯:郭婷


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

    關(guān)注

    28

    文章

    1351

    瀏覽量

    110193
  • C語言
    +關(guān)注

    關(guān)注

    180

    文章

    7614

    瀏覽量

    137256

原文標(biāo)題:Verilog基礎(chǔ)知識學(xué)習(xí)筆記(三)

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

收藏 人收藏

    評論

    相關(guān)推薦

    煉獄傳奇-移位和位拼運(yùn)算符之戰(zhàn)

    運(yùn)算符,就會使程序編寫起來變得簡單了。代碼的意思就是,每次把最低位放到最高位,讓前三位放到后面,這樣邏輯“1”就實(shí)現(xiàn)了移位,形成了循環(huán)
    發(fā)表于 04-30 09:43

    求一道MATLAB編程題。要求: 使用循環(huán)語句編程,但不能使用數(shù)組運(yùn)算符和sum

    求求求~~~要求: 使用循環(huán)語句編程,但不能使用數(shù)組運(yùn)算符和sum; 使用數(shù)組運(yùn)算符和sum編程,不能使用循環(huán)結(jié)構(gòu)。
    發(fā)表于 06-03 17:22

    Java基礎(chǔ)之Java運(yùn)算符

    = 5.0f; long l = 5;f==l; 結(jié)果為true,浮點(diǎn)數(shù)與整數(shù)進(jìn)行比較,只要值相等就返回true。關(guān)系運(yùn)算符主要用于條件語句循環(huán)語句中的判斷條件。而條件結(jié)構(gòu)就是根據(jù)
    發(fā)表于 05-18 15:39

    邏輯運(yùn)算符是什么

    邏輯運(yùn)算符:與或非條件結(jié)構(gòu)if -else及其嵌套循環(huán)結(jié)構(gòu)whilefordo-while
    發(fā)表于 07-14 07:50

    Bitwise 邏輯運(yùn)算符進(jìn)行設(shè)計(jì)

    鎖定?! ND Bitwise 運(yùn)算符  攝像頭滑塊的主要位運(yùn)算符是 AND。該運(yùn)算器使用 C 語言編程的安培 (&) 符號,使用圖 1
    發(fā)表于 04-02 17:39

    條件運(yùn)算符是什么_條件運(yùn)算符有哪些

    運(yùn)算符優(yōu)先級高于賦值、逗號運(yùn)算符,低于其他運(yùn)算符。關(guān)系運(yùn)算實(shí)際上是邏輯比較運(yùn)算,它是
    發(fā)表于 11-16 16:02 ?1.1w次閱讀
    條件<b class='flag-5'>運(yùn)算符</b>是什么_條件<b class='flag-5'>運(yùn)算符</b>有哪些

    單目運(yùn)算符是什么_單目運(yùn)算符有哪些

    單目運(yùn)算符是指運(yùn)算所需變量為一個的運(yùn)算符,又叫一元運(yùn)算符,其中有邏輯運(yùn)算符:!、按位取反
    的頭像 發(fā)表于 02-24 15:42 ?6.1w次閱讀
    單目<b class='flag-5'>運(yùn)算符</b>是什么_單目<b class='flag-5'>運(yùn)算符</b>有哪些

    淺析MySQL的各類運(yùn)算符

    MySQL支持多種運(yùn)算符,我們在寫SQL腳本時經(jīng)常會需要用到各種各樣的運(yùn)算符,這些運(yùn)算符可以用來連接表達(dá)式,進(jìn)而從數(shù)據(jù)庫查詢我們需要的結(jié)果集等。這些類型主要包括算術(shù)
    的頭像 發(fā)表于 05-03 17:41 ?2076次閱讀
    淺析MySQL<b class='flag-5'>中</b>的各類<b class='flag-5'>運(yùn)算符</b>

    python運(yùn)算符是什么

    python運(yùn)算符 0. 什么是運(yùn)算符? 本章節(jié)主要說明Python的運(yùn)算符。舉個簡單的例子 4 +5 = 9 。 例子,4和5被稱為操作數(shù),“+”號為
    的頭像 發(fā)表于 02-21 16:44 ?2429次閱讀

    C語言總結(jié)_語句、運(yùn)算符

    當(dāng)前文章復(fù)盤C語言的: 位運(yùn)算運(yùn)算符、基本運(yùn)算符、數(shù)據(jù)類型、變量、for語句、while語句、goto
    的頭像 發(fā)表于 08-14 09:39 ?1032次閱讀

    什么是邏輯運(yùn)算符

    邏輯運(yùn)算符對其操作數(shù)求值,并返回一個值,該值指示求值結(jié)果是真還是假(true or false)。例如,運(yùn)算a && b測試a和b是否都為真,如果兩個操作數(shù)都為真,則運(yùn)算符返回真。否則,運(yùn)算符
    的頭像 發(fā)表于 02-09 15:55 ?2062次閱讀
    什么是<b class='flag-5'>邏輯運(yùn)算符</b>

    KUKA機(jī)器人的邏輯運(yùn)算符

    邏輯運(yùn)算符用于布爾變量、常數(shù)和簡單的、借助比較運(yùn)算符構(gòu)成的邏輯表達(dá)式的邏輯運(yùn)算。
    發(fā)表于 07-21 10:06 ?2597次閱讀
    KUKA機(jī)器人的<b class='flag-5'>邏輯運(yùn)算符</b>

    verilog邏輯運(yùn)算符

    寫在前面 之前曾經(jīng)整理過verilog的各類運(yùn)算符的表達(dá)方式,但是在學(xué)習(xí)的過程并未深入研究關(guān)于邏輯運(yùn)算符的相關(guān)知識,導(dǎo)致在實(shí)際使用過程
    的頭像 發(fā)表于 09-21 10:07 ?2531次閱讀
    <b class='flag-5'>verilog</b>的<b class='flag-5'>邏輯運(yùn)算符</b>

    python運(yùn)算符的優(yōu)先級大小

    解。 Python運(yùn)算符可以分為以下幾類:算術(shù)運(yùn)算符、比較運(yùn)算符、邏輯運(yùn)算符、位運(yùn)算符、賦值
    的頭像 發(fā)表于 11-29 16:21 ?3504次閱讀

    Verilog語法運(yùn)算符的用法

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