《電子技術應用》
您所在的位置:首頁 > 可編程邏輯 > 業界動態 > 零基礎教你學FPGA之Verilog語法基礎(下)

零基礎教你學FPGA之Verilog語法基礎(下)

2015-02-09
關鍵詞: FPGA Verilog 基礎

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

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

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

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

  10、系統任務

  (1)$diplay和$write任務

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

  

360桌面截圖20140311213804.jpg

 

  

360桌面截圖20140311213848.jpg

 

  此外,在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;

  例如

  

360桌面截圖20140324223251.jpg

 

  (2)$monitor

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

  例如

  

360桌面截圖20140325161107.jpg

 

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

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

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

  (4)$finish

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

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

  0 不輸出任何信息

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

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

(4)系統任務$stop

  $stop任務作用是把EDA工具置成暫停模式,在仿真環境下給出一個交互式的命令操作符,將控制權交給用戶。這個任務可以帶有參數表達式,根據參數值(0、1、2)的不同,輸出不同的信息,參數值越大,輸出信息越多。

  (5)系統任務$random

  這個系統函數提供了一個產生隨機數的手段,當函數被占用時返回一個32位的隨機數,它是一個帶符號的整形數。

  下面是一個產生隨機數的例子

  reg[23:0] rand;

  rand=$random %60;

  上面的例子產生一個-59到59之間的隨機數,所以$random的用法是產生一個(-b+1)到(b-1)之間的隨機數。

  下面的例子通過并位產生一個值在0—59之間的隨機數

  reg[23:0 rand];

  rand = {$random} %60;

  利用這個系統函數可以產生隨機脈沖序列或寬度隨機的脈沖序列,用于電路的測試。

  下面是個產生隨機脈沖序列的例子

  

360桌面截圖20140417132822.jpg

 

  

360桌面截圖20140417133014.jpg

 

  (6)關于編譯預處理

  編譯預處理這部分和C語言差不多,主要用到的是`define、`include、和時間尺度`timescale

  `define 就是宏定義,在C語言了用的也比較多,在verilog中靈活的使用宏定義可以增加程序的可讀性,又方便修改。例如在聲明一個8位寄存器時用宏定義

  `define WINDOWS 8

  module

  reg [1:`WINDOWS] date;

  ……

  習慣上一般宏定義的內容用大寫字母表示,這里的WINDOWS就代表數字8,在下面的程序中調用WINDOWS時加個 `,表示調用,這樣宏定義的好處就是,在大的程序中如果想改變寄存器的大小,可以直接改數字8為16,這樣,所有的WINDOWS都變成了16,這樣改一 個就可以改變所有的,給程序員帶來了方便。

  對于`include,C語言里用的比較多這里就不在多提,主要是模塊化編程思想的應用,這個很重要,練好模塊化編程,可以大大提高程序的可讀性和可移植性,也使修改程序變得更加方便。

  對于`timescale,就是一個時間尺度,C語言里面沒有,這里說一下。

  `timescale 包括兩部分,一部分是時間單位,一部分是時間精度,下面舉個例子

  

360桌面截圖20140417142814.jpg

 

  在這個例子中,時間單位是10ns,時間精度是1ns,這里d=1.55,也就是說d等于1.55乘10納秒,也就是15.5納秒,再看時間精度是一納秒,四舍五入就是16納秒,所以在16納秒時,set置零,32納秒時set置一。

  小結

  (1)、在多模塊調試的情況下,$monitor需配合$monitoron和$monitoroff來使用。

  (2)、$monitor和$diplay的區別在于$monitor是連續監視數據的變化,因而往往只要在測試模塊的initial塊中調用一次就可以監控被測模塊中所有感興趣的信號不需要,也不能在always塊中調用$monitor.

  (3)、$time常在$monitor中作時間標記

  (4)、$stop 和 $finish 常用在測試模塊的initial塊中,配合時間延遲用來控制仿真的持續時間。

  (5)、$random在編寫程序是非常有用的,可以用來產生邊沿不穩定的波形和隨機出現的脈沖。正確的使用它能有效的發現設計中出現的問題。

  (6)、$readman在編寫測試程序時很有用,可以用來生成給定的復雜數據流。復雜數據可以用C語言產生,存在文件中。用$readman取出存入存儲器,再按節拍輸出這在驗證算法邏輯電路中特別有用。

  (7)、在用`timescale時要注意當多個帶不同`timescale定義的模塊包含在一起時,只有最后一個才起作用,所以屬于一個項目,但`timescale定義不同的多個模塊最好分開編譯,以免把時間單位搞混。

  (8)、宏定義字符串和include引用時,不要忘記用“`”這個標號。

本站內容除特別聲明的原創文章之外,轉載內容只為傳遞更多信息,并不代表本網站贊同其觀點。轉載的所有的文章、圖片、音/視頻文件等資料的版權歸版權所有權人所有。本站采用的非本站原創文章及圖片等內容無法一一聯系確認版權者。如涉及作品內容、版權和其它問題,請及時通過電子郵件或電話通知我們,以便迅速采取適當措施,避免給雙方造成不必要的經濟損失。聯系電話:010-82306118;郵箱:aet@chinaaet.com。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
亚洲精品在线看| 在线成人免费观看| 久久av在线| 国内精品久久久久影院色| 久久米奇亚洲| 99在线精品视频在线观看| 日韩一区二区福利| 国产欧美欧美| 久久躁日日躁aaaaxxxx| 一本一道久久综合狠狠老精东影业| 日韩一区二区精品在线观看| 亚洲国产高清视频| 欧美午夜宅男影院在线观看| 久久久精品久久久久| 一本久道久久久| 亚洲免费福利视频| 亚洲免费一在线| 亚洲福利视频一区| 在线日韩中文字幕| 国产精品无码永久免费888| 久久欧美中文字幕| 久久久亚洲高清| 老巨人导航500精品| 亚洲在线免费| 欧美肥婆在线| 亚洲激情视频网| 国产精品xxxav免费视频| 欧美激情精品久久久久| 亚洲欧美综合| 亚洲精品一区二区三区蜜桃久| 亚洲国产片色| 亚洲婷婷免费| 亚洲二区在线观看| 亚洲国产精品va在线看黑人动漫| 亚洲国产精品一区制服丝袜 | 欧美一区二区三区日韩| 亚洲精品永久免费| 国产专区一区| 在线日本成人| 一本色道久久88亚洲综合88| 狠狠色丁香久久婷婷综合_中| 国产精品白丝黑袜喷水久久久| 国产精品盗摄久久久| 欧美国产大片| 国产精品成人aaaaa网站| 国产偷国产偷精品高清尤物| 国产精品日本精品| 国产三级精品在线不卡| 亚洲成人在线免费| 亚洲特级毛片| 亚洲福利视频三区| 性欧美超级视频| 宅男在线国产精品| 日韩亚洲视频| 亚洲欧美日韩国产综合在线| 一本大道久久精品懂色aⅴ| 亚洲影音一区| 亚洲日本理论电影| 亚洲黄色小视频| 亚洲午夜视频在线观看| 亚洲毛片在线看| 亚洲男人天堂2024| 亚洲午夜精品一区二区| 久久国产精品久久国产精品| 亚洲欧美一区在线| 免费观看在线综合色| 久热精品视频| 欧美视频一区二| 欧美日韩理论| 欧美日韩另类丝袜其他| 国内久久视频| 一区二区三区不卡视频在线观看| 午夜视频一区在线观看| 性感少妇一区| 99精品国产在热久久下载| 久久高清国产| 欧美日韩一区二区国产| 欧美日韩一区二区高清| 黄色成人在线网址| 中国女人久久久| 亚洲日本在线视频观看| 欧美中文在线观看| 久久国产精品网站| 欧美日韩成人在线播放| 韩国在线一区| 亚洲一区二区免费视频| 亚洲欧美日韩国产综合| 99国产精品| 麻豆国产精品一区二区三区 | 国产日韩欧美黄色| 99综合电影在线视频| 亚洲欧洲日产国产网站| 亚洲人成人一区二区三区| 欧美一区二区福利在线| 久久动漫亚洲| 国产精品v片在线观看不卡| 亚洲三级影院| 亚洲片区在线| 裸体女人亚洲精品一区| 国产亚洲精品aa午夜观看| 亚洲专区国产精品| 亚洲伊人网站| 欧美日在线观看| 亚洲美女av电影| 亚洲午夜在线观看视频在线| 亚洲免费高清| 欧美激情bt| 亚洲国产精品va| 亚洲激情小视频| 久久综合九色九九| 国产一区二区黄| 亚洲国产精品一区| 久久精品av麻豆的观看方式| 亚洲精品一区二区三区av| 久久亚洲国产精品日日av夜夜| 国产欧美在线观看| 亚洲欧美日韩综合一区| 欧美一区二粉嫩精品国产一线天| 国产精品乱码一区二区三区| 精品88久久久久88久久久| 亚洲日韩视频| 亚洲精品久久嫩草网站秘色| 欧美成年人在线观看| 亚洲二区视频| 99这里有精品| 欧美日韩午夜精品| 日韩一级黄色大片| 久久www成人_看片免费不卡| 午夜精品久久久久久久99热浪潮| 欧美日韩中文字幕在线| 日韩一级精品| 亚洲欧美日韩成人| 国产欧美日韩一区二区三区在线| 亚洲午夜精品网| 亚洲视频观看| 夜夜爽99久久国产综合精品女不卡| 欧美1区2区| 国产欧美日韩一级| 香蕉久久夜色精品| 久久久五月天| 亚洲福利视频一区| 一区二区久久| 国产精品女主播| 新狼窝色av性久久久久久| 玖玖精品视频| 在线欧美小视频| 一区二区三区欧美视频| 国产精品每日更新| 欧美在线视频观看| 欧美成人午夜激情在线| 亚洲天堂av电影| 99精品欧美一区二区蜜桃免费| 欧美激情国产高清| 99伊人成综合| 亚洲欧美日韩国产一区二区三区| 国产欧美 在线欧美| 欧美性片在线观看| 亚洲午夜未删减在线观看| 久久精品国产99精品国产亚洲性色| 好吊日精品视频| 9人人澡人人爽人人精品| 国产精品黄色| 久久精品国产亚洲a| 欧美看片网站| 在线成人性视频| 国产精品99久久久久久宅男| 国产欧美一区二区精品忘忧草| 久久精品99久久香蕉国产色戒| 欧美日韩精品久久久| 性欧美18~19sex高清播放| 欧美福利精品| 亚洲一区二区三区高清不卡| 老色鬼精品视频在线观看播放| 日韩视频国产视频| 欧美亚洲视频在线观看| 国产精品爱啪在线线免费观看| 亚洲在线一区| 你懂的国产精品永久在线| 一区二区三区欧美亚洲| 久久综合免费视频影院| 国产精品久久一卡二卡| 国产精品伊人日日| 欧美在线精品一区| 欧美激情一二三区| 欧美日韩精品一区二区天天拍小说 | 亚洲福利视频二区| 欧美性理论片在线观看片免费| 欧美在线播放高清精品| 欧美日韩伦理在线免费| 久久9热精品视频| 欧美视频一区| 亚洲精品一区二区三区四区高清| 国产欧美日韩亚州综合| 亚洲久久视频| 国产自产v一区二区三区c| 亚洲香蕉网站| 亚洲国产精品福利| 久久久久国产精品麻豆ai换脸| 一本在线高清不卡dvd| 亚洲国产日韩在线一区模特|