在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

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

Verilog賦值和結(jié)構(gòu)說明語(yǔ)句

FPGA之家 ? 來源:時(shí)沿科技 ? 作者:Nemo_Yxc ? 2022-03-15 11:51 ? 次閱讀

“本文主要分享了在Verilog設(shè)計(jì)過程中一些經(jīng)驗(yàn)與知識(shí)點(diǎn),主要包塊語(yǔ)句、阻塞賦值和非阻塞賦值以及結(jié)構(gòu)說明語(yǔ)句(initial, always, task, function)。”

01

塊語(yǔ)句

順序塊 begin…end

塊內(nèi)的語(yǔ)句是按照順序執(zhí)行的;

塊內(nèi)的每條語(yǔ)句延時(shí)控制都是相對(duì)于上條語(yǔ)句結(jié)束的時(shí)刻;

仿真時(shí),執(zhí)行到最后一條語(yǔ)句該語(yǔ)句塊執(zhí)行結(jié)束。

并行塊fork…end

塊內(nèi)的語(yǔ)句是按照獨(dú)立的同時(shí)開始執(zhí)行的;

塊內(nèi)的每條語(yǔ)句延時(shí)控制都是相對(duì)于程序進(jìn)入該語(yǔ)句塊的時(shí)刻而言;

仿真時(shí),所需最長(zhǎng)時(shí)間的語(yǔ)句執(zhí)行結(jié)束后,該語(yǔ)句塊執(zhí)行結(jié)束。

例:

reg  [7:0]    l1,l2;  reg[7:0]k1,k2;initialbeginl1=0;l2=0;#15l1=2;#10l2=8;endinitialforkk1=0;k2=0;#15k1=2;#10k2=8;join
仿真結(jié)果如下:

c6f5f9e0-9198-11ec-952b-dac502259ad0.png

從仿真結(jié)果可以看出:在順序塊中,15ns的時(shí)候,l1被賦值為8’h2,在25ns的時(shí)候,l2被賦值為8’h8;而在并行塊中,10ns的時(shí)候,k2被賦值為8’h8,在15ns的時(shí)候,k1被賦值為8’h2。可以很容易明白順序塊和并行塊的特性。

02

阻塞賦值和非阻塞賦值

  • 阻塞賦值(Blocking)

阻塞賦值用“=”表示:在賦值時(shí),先計(jì)算等號(hào)(“=”)右邊部分的值,這時(shí)賦值語(yǔ)句不允許其他的語(yǔ)句干擾,直到賦值完成,也就是說“阻塞”是指在當(dāng)前的賦值完成前阻塞其他類型的賦值任務(wù)
  • 非阻塞賦值(Non_Blocking)

非阻塞賦值用“<=”表示:在賦值操作時(shí)刻開始計(jì)算非阻塞賦值右邊部分的值,賦值操作結(jié)束時(shí)刻才更新左邊部分

例1:組合邏輯中的阻塞與非阻塞

阻塞代碼如下:
always@(a,b,c,d)  begin    i1 = a & b;    i2 = c & d;    i3 = i1 & i2;end
仿真結(jié)果如下:

c71bc0a8-9198-11ec-952b-dac502259ad0.png

非阻塞代碼如下:
always@(a,b,c,d)  begin    i1 <= a & b;    i2 <= c & d;    i3 <= i1 & i2;end

仿真結(jié)果如下:

c73d7d74-9198-11ec-952b-dac502259ad0.png

可以看出i1和i2在阻塞和非阻塞中結(jié)果相同,但是i3的結(jié)果卻不同。這是因?yàn)樵谧枞x值中,i3的賦值使用的是i1和i2更新后的值,而非阻塞賦值中i3的賦值則使用的是i1和i2更新前的值。要想解決這一問題,則需要將“always@(a,b,c,d)”改成“always@(a,b,c,d,i1,i2)”代碼如下:
always@(a,b,c,d,i1,i2)  begin    i1<=a&b;    i2 <= c & d;    i3 <= i1 & i2;  end
仿真結(jié)果如下:

c75bfbbe-9198-11ec-952b-dac502259ad0.png

綜上,組合邏輯中更適合用阻塞賦值語(yǔ)句

例2:時(shí)序邏輯中的阻塞和非阻塞。

以反饋振蕩器的代碼為例。非阻塞賦值代碼:
always@(posedge  clk,posedge  rst)    begin      if(rst)  a1 <=0;      else    a1 <=a2;    endalways@(posedge  clk,posedge  rst)    begin      if(rst)  a2 <=1;      else    a2 <=a1;end

阻塞賦值代碼:

always@(posedge  clk,posedge  rst)  begin      if(rst)   b1 = 0;      else      b1 = b2;  endalways@(posedgeclk,posedgerst)  begin      if(rst)   b2 = 1;      else      b2 = b1;  end

仿真結(jié)果如下:

c77723c6-9198-11ec-952b-dac502259ad0.png

可以看出阻塞賦值語(yǔ)句并不能達(dá)到我們想要的效果;而且綜合后阻塞賦值語(yǔ)句中,無法確定哪個(gè)always塊中的時(shí)鐘沿先到達(dá),哪個(gè)always塊中的時(shí)鐘后到達(dá),所以存在一個(gè)冒險(xiǎn)競(jìng)爭(zhēng)的問題。綜上,時(shí)序邏輯中更適合用非阻塞賦值語(yǔ)句

03

結(jié)構(gòu)說明語(yǔ)句(initial, always, task, function)

  • 語(yǔ)句initial

語(yǔ)法格式如下:
initial begin  // Add code hereend
一般initial語(yǔ)句用于測(cè)試文件的編寫;但是隨著編譯器的進(jìn)步,現(xiàn)在也可以綜合,常用于一些變量的初始化。無論是用在什么場(chǎng)景,initial語(yǔ)句只執(zhí)行一次。
  • 語(yǔ)句always

語(yǔ)法格式如下: always <時(shí)序控制> <語(yǔ)句>

例1:生成仿真時(shí)的信號(hào)波形

always可以用于仿真時(shí)的波形生成:always #5 clk = ~clk;這個(gè)例子就形成了一個(gè)周期為10ns(時(shí)間單位ns根據(jù)`timescale確定)的方波,常用來描述時(shí)鐘信號(hào)(如果將#5去掉,那么會(huì)生成一個(gè)延遲為0的無限循環(huán)跳變過程,會(huì)發(fā)生仿真鎖死,這是不推薦的)。仿真結(jié)果如下:

c79f5666-9198-11ec-952b-dac502259ad0.png

例2:

實(shí)現(xiàn)鎖存器和觸發(fā)器

always@(posedge  clk or posedge   rst)   begin    if(rst)  cnt <= 0;      else    cnt <= cnt + 1;  endalways@(posedge  clk , posedge   rst)  begin    //add codesend
多個(gè)敏感事件可以用“or”或者“,”區(qū)分(rst為復(fù)位信號(hào),可以是posedge也可以是negedge)。

c7c624a8-9198-11ec-952b-dac502259ad0.png

例3:實(shí)現(xiàn)組合邏輯

利用always實(shí)現(xiàn)組合邏輯時(shí),要將所有的信號(hào)放進(jìn)敏感列表,而時(shí)序邏輯中則不需要。
always@(aorborc)  beginx=x+1;end
上面的代碼表示,a、b、c中任意電平發(fā)生變化,begin…end語(yǔ)句就會(huì)被觸發(fā)。仿真結(jié)果如下所示:

c7e60fde-9198-11ec-952b-dac502259ad0.png

always@(a or b or c or d or e)     begin       out = a + b + c + d + e;end
如上所示,因?yàn)槊舾辛斜肀容^長(zhǎng),容易寫錯(cuò),所以Verilog又提供了兩個(gè)特殊的符號(hào):@*和@(*)。簡(jiǎn)化代碼如下:
always@(*)beginout=a+b+c+d+ e;end
仿真結(jié)果如下圖所示:

c808a6a2-9198-11ec-952b-dac502259ad0.png

注意:always模塊內(nèi)被賦值的每一個(gè)信號(hào)都必須定義為reg型
  • 語(yǔ)句task

語(yǔ)句task的定義:

task <任務(wù)名>;

<端口及數(shù)據(jù)類型聲明語(yǔ)句>;

<語(yǔ)句1>;

<語(yǔ)句n>;

endtask

示例代碼如下:
reg      [7:0]      j,k,i,x;  always@(posedge  clk  or posedge  rst)    begin      if(rst)        begin          i <= 0;          j <= 0;          k <= 0;          x <= 0;          task1(i,j,k);        end      else        begin          i <= i + 1;          x <= i + 10;          task1(i,j,k);        endend  task task1;      input    [7:0]      i;      output   [7:0]      j1;      output   [7:0]      k1;    begin      j1 = i + 10;      k1 = i + 11;    endendtask
仿真結(jié)果如下圖所示:

c825969a-9198-11ec-952b-dac502259ad0.png

  • 語(yǔ)句function

函數(shù)(function)的目的是返回一個(gè)用于表達(dá)式的值。

語(yǔ)句function的定義:

function<返回值的類型或范圍>(函數(shù)名)

<端口說明語(yǔ)句>

<變量類型說明語(yǔ)句>

begin

end

endfunction

示意代碼如下:
  reg      [7:0]      i,j;  reg      [8:0]      sum_data;    always@(posedge  clk  or posedge  rst)    begin      if(rst)        begin          i <= 100;          j <= 31;          sum_data <= sum(i,j);        end      else        begin          i <= i + 1;          j <= j + 2;          sum_data <= sum(i,j);        end    end
  function  [8:0]  sum;    input  [7:0]  i1;    input  [7:0]  j1;      begin        sum = i1 + j1;      end  endfunction

仿真結(jié)果如下圖所示:

c85401ba-9198-11ec-952b-dac502259ad0.png

注意:initial、always、task和function都是可以綜合的

審核編輯:郭婷

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

    關(guān)注

    28

    文章

    1362

    瀏覽量

    111281

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

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

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    Verilog語(yǔ)言中阻塞和非阻塞賦值的不同

    來源:《Verilog數(shù)字系統(tǒng)設(shè)計(jì)(夏宇聞)》 阻塞和非阻塞賦值的語(yǔ)言結(jié)構(gòu)Verilog 語(yǔ)言中最難理解概念之一。甚至有些很有經(jīng)驗(yàn)的Verilog
    的頭像 發(fā)表于 08-17 16:18 ?6547次閱讀

    考慮x和z在verilog條件語(yǔ)句中的使用情況

    首先,考慮x和z在verilog條件語(yǔ)句中的使用情況,然后我們?cè)倏紤]在verilog中用x和z給其他reg/wire賦值的情況。
    的頭像 發(fā)表于 11-02 09:40 ?2129次閱讀
    考慮x和z在<b class='flag-5'>verilog</b>條件<b class='flag-5'>語(yǔ)句</b>中的使用情況

    煉獄傳奇-賦值語(yǔ)句之戰(zhàn)

    Verilog HDL語(yǔ)言中存在兩種賦值語(yǔ)言:● 非阻塞型賦值語(yǔ)句● 阻塞型賦值語(yǔ)句1. 非阻塞
    發(fā)表于 03-22 10:23

    Verilog過程賦值語(yǔ)句提問

    `在書上看到的,講解阻塞型賦值語(yǔ)句時(shí),舉了一個(gè)例子說的是,本想采用觸發(fā)器的方式,設(shè)計(jì)一個(gè)延時(shí)來使得dreg的輸出比areg慢3個(gè)時(shí)鐘節(jié)拍,但是結(jié)果是dreg的輸出只比areg慢一個(gè)時(shí)鐘節(jié)拍輸出程序
    發(fā)表于 09-20 15:10

    verilog中g(shù)enerate語(yǔ)句的用法分享

    不同的賦值語(yǔ)句或者邏輯語(yǔ)句,如果在參數(shù)量很大的的情況下,原本的列舉就會(huì)顯得心有余而力不足。c語(yǔ)言中常用for語(yǔ)句來解決此類問題,verilog
    發(fā)表于 12-23 16:59

    verilog語(yǔ)句中,非阻塞賦值和小于等于均使用符號(hào)“<=”,如何區(qū)分<=所表示的含義?

    )中,\"<=\"作為非阻塞賦值的一部分。 verilog中,一個(gè)語(yǔ)法結(jié)構(gòu)不可能同時(shí)允許“表達(dá)式”和“語(yǔ)句”, 如果某處可以出現(xiàn)表達(dá)式,那么就不允許出現(xiàn)
    發(fā)表于 08-08 09:32

    FPGA視頻教程之Verilog中兩種不同的賦值語(yǔ)句的資料說明

    本文檔的主要內(nèi)容詳細(xì)介紹的是FPGA視頻教程之Verilog中兩種不同的賦值語(yǔ)句的資料說明免費(fèi)下載。
    發(fā)表于 03-27 10:55 ?6次下載
    FPGA視頻教程之<b class='flag-5'>Verilog</b>中兩種不同的<b class='flag-5'>賦值</b><b class='flag-5'>語(yǔ)句</b>的資料<b class='flag-5'>說明</b>

    verilog中阻塞賦值和非阻塞賦值到底有什么區(qū)別

    1、阻塞賦值操作符用等號(hào)(即 = )表示。“阻塞”是指在進(jìn)程語(yǔ)句(initial和always)中,當(dāng)前的賦值語(yǔ)句阻斷了其后的語(yǔ)句,也就是說
    發(fā)表于 04-25 08:00 ?0次下載
    <b class='flag-5'>verilog</b>中阻塞<b class='flag-5'>賦值</b>和非阻塞<b class='flag-5'>賦值</b>到底有什么區(qū)別

    Verilog中的賦值語(yǔ)句的區(qū)別

    連續(xù)賦值語(yǔ)句總是處于激活狀態(tài)。只要任意一個(gè)操作數(shù)發(fā)生變化,表達(dá)式就會(huì)被立即重新計(jì)算,并且將結(jié)果賦給等號(hào)左邊的線網(wǎng)。
    的頭像 發(fā)表于 11-26 10:04 ?3767次閱讀
    <b class='flag-5'>Verilog</b>中的<b class='flag-5'>賦值</b><b class='flag-5'>語(yǔ)句</b>的區(qū)別

    Verilog HDL語(yǔ)言中連續(xù)賦值的特征

    數(shù)據(jù)流模型化 本章講述Verilog HDL語(yǔ)言中連續(xù)賦值的特征。連續(xù)賦值用于數(shù)據(jù)流行為建模;相反,過程賦值用于(下章的主題)順序行為建模。組合邏輯電路的行為最好使用連續(xù)
    的頭像 發(fā)表于 03-05 15:38 ?4356次閱讀
    <b class='flag-5'>Verilog</b> HDL語(yǔ)言中連續(xù)<b class='flag-5'>賦值</b>的特征

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

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

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

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

    Verilog設(shè)計(jì)過程中的一些經(jīng)驗(yàn)與知識(shí)點(diǎn)

     “ 本文主要分享了在Verilog設(shè)計(jì)過程中一些經(jīng)驗(yàn)與知識(shí)點(diǎn),主要包括塊語(yǔ)句、阻塞賦值和非阻塞賦值 以及結(jié)構(gòu)
    的頭像 發(fā)表于 03-15 12:19 ?2527次閱讀

    verilog中阻塞賦值和非阻塞賦值的區(qū)別

    阻塞賦值操作符用等號(hào)(即 = )表示。“阻塞”是指在進(jìn)程語(yǔ)句(initial和always)中,當(dāng)前的賦值語(yǔ)句阻斷了其后的語(yǔ)句,也就是說后面
    發(fā)表于 12-19 16:49 ?7884次閱讀

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

    。這些語(yǔ)句統(tǒng)稱為順序語(yǔ)句。case 語(yǔ)句和 if 語(yǔ)句都是 verilog 中順序語(yǔ)句的示例。在
    的頭像 發(fā)表于 05-11 15:37 ?5223次閱讀
    <b class='flag-5'>Verilog</b>中的If<b class='flag-5'>語(yǔ)句</b>和case<b class='flag-5'>語(yǔ)句</b>介紹
    主站蜘蛛池模板: 窝窝视频成人影院午夜在线 | 网友自拍区一区二区三区 | 欧美成人猛男性色生活 | 欧美影院一区二区三区 | 四虎影院永久网站 | 久久国产福利 | 很黄网站 | 亚洲成人高清 | 久久人精品 | 曰曰摸天天摸人人看久久久 | 久久久精品久久久久久久久久久 | 欧美极品在线播放 | 特级黄一级播放 | 亚洲一区二区综合 | 色综合 成人| h色小视频| 欧美三级网站 | 97天天摸天天碰天天爽 | 日韩一级免费毛片 | 天天欲色 | 国产亚洲精品自在久久77 | 亚洲合集综合久久性色 | 东北美女野外bbwbbw免费 | 久久精品国产亚洲5555 | 在线看片福利 | 亚洲人成网站在线在线 | www.91在线| 欧美一区亚洲 | 一本大道一卡二卡 | 午夜撸 | 久久精品女人天堂 | 国产在线视频你懂得 | 午夜三级福利 | 免费在线看黄色 | 天堂中文字幕在线 | 亚洲欧美日韩在线观看你懂的 | 久久99精品久久久久久久野外 | 色爱综合区五月小说 | 手机在线色 | 老师你好大好白好紧好硬 | 国模精品视频 |