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

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

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

3天內不再提示

Verilog設計過程中的一些經驗與知識點

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

“ 本文主要分享了在Verilog設計過程中一些經驗與知識點,主要包括塊語句、阻塞賦值和非阻塞賦值 以及結構說明語句(initial, always, task, function)

01塊語句

  • 順序塊 begin…end

    • 塊內的語句是按照順序執行的;

    • 塊內的每條語句延時控制都是相對于上條語句結束的時刻;

    • 仿真時,執行到最后一條語句該語句塊執行結束。

  • 并行塊fork…end

    • 塊內的語句是按照獨立的同時開始執行的;

    • 塊內的每條語句延時控制都是相對于程序進入該語句塊的時刻而言;

    • 仿真時,所需最長時間的語句執行結束后,該語句塊執行結束。

例:

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
仿真結果如下:

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

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

02阻塞賦值和非阻塞賦值

  • 阻塞賦值(Blocking)

阻塞賦值用“=”表示:在賦值時,先計算等號(“=”)右邊部分的值,這時賦值語句不允許其他的語句干擾,直到賦值完成,也就是說“阻塞”是指在當前的賦值完成前阻塞其他類型的賦值任務
  • 非阻塞賦值(Non_Blocking)

非阻塞賦值用“<=”表示:在賦值操作時刻開始計算非阻塞賦值右邊部分的值,賦值操作結束時刻才更新左邊部分。

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

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

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

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

仿真結果如下:

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

可以看出i1和i2在阻塞和非阻塞中結果相同,但是i3的結果卻不同。這是因為在阻塞賦值中,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
仿真結果如下:

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

綜上,組合邏輯中更適合用阻塞賦值語句。

例2:時序邏輯中的阻塞和非阻塞。

以反饋振蕩器的代碼為例。非阻塞賦值代碼:
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

仿真結果如下:

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

可以看出阻塞賦值語句并不能達到我們想要的效果;而且綜合后阻塞賦值語句中,無法確定哪個always塊中的時鐘沿先到達,哪個always塊中的時鐘后到達,所以存在一個冒險競爭的問題。綜上,時序邏輯中更適合用非阻塞賦值語句。

03結構說明語句(initial, always, task, function

  • 語句initial

語法格式如下:
initial begin  // Add code hereend
一般initial語句用于測試文件的編寫;但是隨著編譯器的進步,現在也可以綜合,常用于一些變量的初始化。無論是用在什么場景,initial語句只執行一次。
  • 語句always

語法格式如下: always <時序控制> <語句>

例1:生成仿真時的信號波形

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

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

例2:

實現鎖存器和觸發器

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

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

例3:實現組合邏輯

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

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

always@(a or b or c or d or e)     begin       out = a + b + c + d + e;end
如上所示,因為敏感列表比較長,容易寫錯,所以Verilog又提供了兩個特殊的符號:@*和@(*)。簡化代碼如下:
always@(*)beginout=a+b+c+d+ e;end
仿真結果如下圖所示:

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

注意:always模塊內被賦值的每一個信號都必須定義為reg型。
  • 語句task

語句task的定義:

task <任務名>;

<端口及數據類型聲明語句>;

<語句1>;

<語句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
仿真結果如下圖所示:

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

  • 語句function

函數(function)的目的是返回一個用于表達式的值。

語句function的定義:

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

<端口說明語句>

<變量類型說明語句>

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

?

仿真結果如下圖所示:

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

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

原文標題:Verilog基礎知識學習筆記(二)

文章出處:【微信公眾號:FPGA之家】歡迎添加關注!文章轉載請注明出處。

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

    關注

    50

    文章

    4070

    瀏覽量

    133552
  • Verilog
    +關注

    關注

    28

    文章

    1351

    瀏覽量

    110075
  • 程序
    +關注

    關注

    117

    文章

    3785

    瀏覽量

    81004
收藏 人收藏

    評論

    相關推薦

    一些小眾的C語言知識點

    一些小眾的C語言知識點,可能會比較有趣或者怪異,分享給大家看下。
    發表于 09-26 10:16 ?659次閱讀

    請問學習LLC電源需要掌握一些什么知識點

    我是個剛學習電源的萌新,請問學習LLC電源需要掌握一些什么知識點
    發表于 03-05 21:42

    使用WiFi的過程中總結的一些經驗

    簡述在我們做項目開發,經常會用到WiFi,這次給大家分享下我在使用WiFi的過程中總結的一些經驗,這次用到的是esp8266WiFi模塊
    發表于 08-05 07:30

    記錄一些飛控開發過程知識點

    寫在前面開這個專欄的目的主要是深感自己對飛控軟件、算法的知識點過于雜亂,很久沒有進行系統的總結了,因此決定寫幾篇文章記錄一些飛控開發過程知識點。主要是針對
    發表于 08-06 09:59

    記錄一些飛控開發過程知識點

    寫在前面開這個專欄的目的主要是深感自己對飛控軟件、算法的知識點過于雜亂,很久沒有進行系統的總結了,因此決定寫幾篇文章記錄一些飛控開發過程知識點。主要是針對
    發表于 08-09 08:40

    嵌入式開發過程中遇到的知識點記錄

    前言本篇主要是對嵌入式開發過程中遇到的一些很小的知識點進行記錄,就像閱讀篇英語文章,碰見一些不認識的,不熟悉的單詞,語法,查閱資料搞懂記錄
    發表于 12-14 07:37

    Verilog HDL數字系統設計教程》(第四版)學習筆記 part1 Verilog數字設計基礎——第知識點總結

    本教材,第四版是它的最新版本。在學習的過程中,博主對每章的知識點進行了梳理,對其中重要的知識點(博主認為的)都做了歸納,當然也有些知識點
    發表于 03-22 10:26

    關于紅外通信的一些問題知識點

    關于紅外通信的一些問題知識點
    發表于 05-05 17:40 ?4次下載

    單片機的通信數據傳輸一些知識點資料說明

    單片機的通信數據傳輸一些知識點資料說明包括了(中斷發送,大小端,IEEE754浮點型格式,共用體,空閑中斷,環形隊列)
    發表于 06-04 17:52 ?2次下載
    單片機的通信數據傳輸<b class='flag-5'>一些</b><b class='flag-5'>知識點</b>資料說明

    DSP入門學習必看的一些知識點詳細概述

    本文檔的主要內容詳細介紹的是DSP入門學習必看的一些知識點詳細資料概述。
    發表于 11-01 14:40 ?13次下載

    機智云入門知識點

    使用機智云的一些知識點,個人備用。水平有限,若參考,請慎重。
    發表于 12-07 17:21 ?11次下載
    機智云入門<b class='flag-5'>知識點</b>

    Verilog邏輯設計的循環語句和運算符

    “ 本文主要分享了在Verilog設計過程中一些經驗知識點,主要包括循環語句(forever、repeat、while和for)、運算符。”
    的頭像 發表于 03-15 11:41 ?5211次閱讀

    Verilog系統函數和邊沿檢測

    “ 本文主要分享了在Verilog設計過程中一些經驗知識點,主要包括Verilog仿真時常用的系統任務、雙向端口的使用(inout)、邊沿
    的頭像 發表于 03-15 13:34 ?2329次閱讀

    高速電路設計常見的知識點

    為了方便初次接觸高速信號的朋友們能快速入門,并應用到實際的電路設計。作者特地整理了高速電路設計中常見的一些知識點,具有較強的工程性、實用性,能直接應用到嵌入式硬件、手機等設計。(有
    的頭像 發表于 02-13 11:00 ?1449次閱讀

    介紹一些基礎的電力知識點

    電力是現代社會不可或缺的能源之,了解電力知識有助于我們更好地利用和管理能源資源,為可持續發展貢獻力量。本文將為您介紹一些基礎的電力知識點,讓我們共同探索能源的無限潛力。
    的頭像 發表于 08-15 15:01 ?1403次閱讀
    主站蜘蛛池模板: 色多多旧版污污破解版| silk118中文字幕无删减| 色戒2小时38分在线观看| 久久综合香蕉久久久久久久| 国产乱码卡二卡三卡4W| 北条麻妃夫の友人196| 99E久热只有精品8在线直播| 亚洲一级毛片免费在线观看| 无限资源在线完整高清观看1| 青青草在现线免费观看| 欧美日本高清动作片www网站| 麻豆XXXX乱女少妇精品| 久久re视频这里精品09首页 | 91精品国产高清久久久久久| 红尘影院在线观看| 国产精品久久久久影院| 国产高清视频在线观看97| 国产成人精选免费视频 | 亚洲 无码 在线 专区| 午夜性爽视频男人的天堂在线| 日韩人妻无码精品-专区| 色www精品视频在线观看| 日本人吃奶玩奶虐乳| 肉动漫h黄动漫日本免费观看| 中文字幕完整高清版| 中文字幕爆乳JULIA女教师| 在线色av| 成电影人免费网站| 国产色综合久久无码有码 | 中国女人内谢69xxxxxx直播| 973午夜伦伦电影论片| 阿v天堂2017在无码| 国产精品无码AV天天爽人妻蜜桃| 国产熟妇无码一区二| 久久影院中文字幕| 日韩一区二区三区视频在线观看| 十分钟免费看完整视频| 亚洲日本乱码中文论理在线电影| 2019天天射干| 国产在线精品亚洲另类| 免费的av不用播放器的|