零基礎學FPGA(五)Verilog語法基基礎基礎(下)

2021-01-07 電子產品世界

  9、關於任務和函數的小結,挑幾點重要的說一下吧

本文引用地址:http://www.eepw.com.cn/article/267553.htm

  (1)任務具有多個輸入、輸入/輸出和輸出變量,在任務重可以使用延遲、事件和時序控制結構,在任務重可以調用其它任務和函數。與任務不同,函數具有返回值,而且至少要有一個輸入變量,而且在函數中不能使用延遲、事件和時序控制結構,函數可以條用函數,但是不能調用任務。

  (2)在聲明函數時,系統會自動的生成一個寄存器變量,函數的返回值通過這個寄存器返回到調用處。

  (3)函數和任務都包含在設計層次中,可以通過層次名對他們實行調用。這句話什麼意思啊?

  10、系統任務

  (1)$diplay和$write任務

  $display任務相當於C語言裡的printf,用於輸出信息,他的基本格式$display (p0,p1,p2);意思就是把p1、p2以p1的格式輸出,至於具體格式,C語言裡面講的很清楚,下面用一張圖幫大家回憶一下

  

 

  

 

  此外,在display中,輸出列表中的數據的現實寬度總是按照自動輸出格式進行調整的。因此,我們通常在%和表示進位的符號之間加一個0來確保總是用最少的位數來表示表達式的當前值。

  例如

  begin

  r1=10;

  $display("size=%d=%h",r1,r1);

  $display("size=%0d=%0h",r1,r1);

  輸出結果分別為 10,00a和10,a

  所以在以後寫程序時,為了養成良好習慣,應該注意加上0來保證代碼的可讀性。

  如果輸出的列表中含有不定值或者高阻態時,要遵循下列情況

  (1)如果按10進位輸出

  如果輸出列表全部為不定值,則輸出為小寫x;

  如果輸出列表部分為不定值,則輸出為大寫X;

  如果輸出列表全部為高阻態,則輸出為小寫的z;

  如果輸出列表部分為高阻態,則輸出為大寫的Z;

  (2)如果按十六進位或者8進位輸出

  那麼十六進位對應的四位或者8進位對應的3位中,如果部分是高阻態或者是不定值,那麼輸出結果為大寫的Z或者X否則就輸出小寫的z或者x;

  例如

  

 

  (2)$monitor

  系統任務$monitor提供了監控和輸出參數列表中的表達式或變量值的功能,其參數列表中輸出控制格式字符串和輸出列表的規則和$display一樣,當啟動一個帶有一個或者多個的$monitor任務時,仿真器則創立一個仿真機制,使得每當參數列表中的表達式或值發生變化時,整個參數列表中的變量或者表達式的值都將輸出顯示,如果在同一時刻,兩個或者多個參數的值發生變化,則在這時刻只輸出顯示一次,但在$monitor任務中,參數可以是$time系統函數,這樣參數列表中變量或者表達式的值同時發生變化的時刻可以通過標明同一時刻的多行輸出來顯示。

  例如

  

 

  $monitoron和$monitoroff的功能就是通過打開或者關閉監控標誌來控制監控任務$monitor的啟動和停止。這樣可以使得程式設計師很容易的控制$monitor什麼時候執行了。

  (3)時間度量系統函數$time

  在verilog hdl語法中有兩種時間度量系統函數,分別是$time和$realtime,用這兩個系統函數可以得到當前的仿真時刻。$time可以返回一個64位的值來記錄當前的仿真時刻。

  (4)$finish

  系統任務$finish的作用是退出仿真器,返回主作業系統,也就是結束仿真過程。格式是

  $finish或者$finish(1);如果不帶參數,則默認參數為1,下面是具體參數下系統輸出的特徵信息。

  0 不輸出任何信息

  1 輸出當前仿真時刻和位置

  2 輸出當前仿真時刻、位置和在仿真過程中所用memory及CPU時間的統計。

  表示看不懂...

fpga相關文章:fpga是什麼

c語言相關文章:c語言教程


相關焦點

  • 零基礎學FPGA(三)Verilog語法基基礎基礎(上)
    這幾天複習了一下Verilog的語法知識,就藉此寫寫我對這些東西的想法吧。感覺呢,是和C語言差不多,具有C語言基礎的朋友學起來應該沒什麼問題,和C語言相同的地方就不說了吧,重點說一下不同點吧。  小結  在verilog語法中,所有的過程塊(包括initial塊,always塊),連續賦值語句,實例引用都是並行的,也就是說在一個模塊中遇到這些語句就是同時執行的,而且沒有先後次序。只有連續賦值語句assign和實例引用語句可以獨立於過程塊存在於模塊的功能定義部分,即這兩種語句可以不用在那兩個過程塊裡執行,也可以在模塊的功能定義部分執行,例如第一個例子。
  • 零基礎學FPGA(四)Verilog語法基基礎基礎(中)
    (1)順序快  順序快就好比C語言裡的大括號「{ }」,在Verilog語法中,用begin…end代替。這裡只需要知道,在begin…end中間的語句是順序執行的就行了。  (2)並行塊  並行塊可以算是一個新的知識點,與順序塊最大的不同就是並行塊中的語句是同時開始執行的,要想控制語句的先後順序,可以加延時語句控制。
  • 通過點燈的邏輯體驗FPGA的編程流程以及Verilog語法基礎
    作為「寒假在家一起練」的第二次直播講座,我們今天就基於1個LED做了1個多小時的分享,從創建第一個FPGA項目、寫下第一句Verilog代碼,到調用FPGA的IP Cores,體驗了FPGA的設計流程以及Verilog的基本語法規範。
  • 零基礎教你學FPGA之Verilog語法基礎(下)
    本文承接《零基礎教你學FPGA之Verilog語法基礎(中)》  9、關於任務和函數的小結,
  • 零基礎學FPGA-Verilog語法中
    (1)順序快    順序快就好比C語言裡的大括號「{    }」,在Verilog語法中,用begin…end代替。這裡只需要知道,在begin…end中間的語句是順序執行的就行了。   endendmoduleVerilog語法
  • verilog常用語法二讓您的FPGA設計更輕鬆
  • 零基礎教你學FPGA之Verilog語法基礎(上)
    關於功能定義是模塊中最重要的部分,有三種方法可在模塊中產生邏輯  (1)用assign聲明語句,assign 語句主要用於組合邏輯電路  (2)用實例元件,例如 and #2 u1(q,a,b);(這個我自己概念也有點模糊,不知道怎麼解釋)  (3)用always塊,例如 always @(clk or clr)  begin
  • ​verilog相關基礎知識
    對於verilog基礎知識,這裡做簡單的介紹,對於已經熟悉verilog語言的讀者可以省略不看此部分。
  • FPGA學習筆記:前言+Verilog HDL語法基礎
    標識符的組成:由字母、數字字符、下劃線(_)和美元符號() 組 成 , 區 分 大 小 寫 , 其 第 一 個 字 符 必 須 是 英 文 字 母 或 下 劃 線 , 不 能 是 數 字 或 )組成,區分大小寫,其第一個字符必須是英文字母或下劃線,不能是數字或)組成,區分大小寫,其第一個字符必須是英文字母或下劃線,不能是數字或。
  • 零基礎教你學FPGA之Verilog語法基礎(中)
    (1)順序快  順序快就好比C語言裡的大括號「{ }」,在Verilog語法中,用begin…end代替。這裡只需要知道,在begin…end中間的語句是順序執行的就行了。  (2)並行塊  並行塊可以算是一個新的知識點,與順序塊最大的不同就是並行塊中的語句是同時開始執行的,要想控制語句的先後順序,可以加延時語句控制。
  • FPGA 高手養成記-Verliog語法基礎
    基本的語法略過,主要想寫一些關於框架,規範,技術難點的博文,這樣對於我們養成好的編碼習慣是有好處的,就定這樣一個flag吧.希望大家可以一起好好學習,共同進步.接口時序設計規範模塊和模塊之間的通過模塊的接口實現關聯, 因此規範的時序設計, 對於程序設計的過程, 以及程序的維護, 團隊之間的溝通都是非常必要的。
  • FPGA 入門到精通系列2:verilog基礎3-verilog代碼復用(generate、function)
    一直以來寫verilog代碼,特別是寫算法,比如圖像處理,總感覺寫的是軟體C語言的按照周期展開的計算邏輯,雖然很多都是ctrl+c和ctrl
  • 細談FPGA之Verilog HDL語法(一)
    前面淺談了一下FPGA(淺談FPGA),有人希望能繼續分享,那麼今天就來簡單講講FPGA的描述語言——Verilog HDL的語法,語法內容比較多
  • Verilog基礎知識學習筆記(一)
    DATA_LENGTH-1:0];  reg          [15:0]  Sig1  [`DATA_LENGTH-1:0]; integer data_file0;  integer   data_file1;  integer   i; initial begin data_file0 = $fopen("file/rd_data0_fp
  • FPGA程式語言——verilog語法
    如果讀者已經掌握C語言編程的基礎,那麼學習Verilog HDL並不困難。我們只要對Verilog HDL某些語句的特殊方面著重理解,並加強上機練習就能很好地掌握它,就能利用它的強大功能來設計複雜的數字邏輯電路系統。2.1.
  • verilog常用語法一讓您的FPGA設計更輕鬆
    verilog常用語法一讓您的FPGA設計更輕鬆作者:lee神1
  • Verilog基礎(上)
    localparam RAM_DEPTH = (1<<RAM_ADDR);三、`define作用:宏定義,常配合條件編譯指令進行代碼禁忌:不能濫用。在晶片設計中代碼規模一般比較龐大,每人負責一部分模塊,如果不加約束話,宏名定義很容易撞到,又由於其作用整個工程的,就會造成定義混亂.特別注意`define 定義常值變量時,使用時必須也要點`(`NUM).
  • 優秀的 Verilog/FPGA開源項目介紹(五)- USB通信
    優秀的 Verilog/FPGA開源項目介紹(五)- USB通信USB是我們生活中非常非常常見的接口,滑鼠、鍵盤以及常見的U 盤等,可以說現在的USB設備已經滲透到生活中的方方面面,下面就介紹幾個開源的USB IP,供大家學習。
  • 可編程邏輯培訓——Verilog 語言基礎
    不使用初始化語句;2、不使用延時語句;3、不使用循環次數不確定的語句,如:forever,while等;4、儘量採用同步方式設計電路;5、儘量採用行為語句完成設計;6、always過程塊描述組合邏輯,應在敏感信號表中列出所有的輸入信號;7、所有的內部寄存器都應該可以被復位;8、用戶自定義原件(UDP元件)是不能被綜合的。一:
  • 基於FPGA的任意分頻器設計
    如需要N分頻器(N為偶數),就可以由待分頻的時鐘觸發計數器進行計數,當計數器從0計數到N/2-1時,將輸出時鐘進行翻轉,並給計數器一個復位信號,以使下一個時鐘開始從零計數。以此循環,就可以實現偶數倍分頻。