零基礎(chǔ)學(xué)FPGA(五)Verilog語法基基礎(chǔ)基礎(chǔ)(下)
(4)系統(tǒng)任務(wù)$stop
本文引用地址:http://cafeforensic.com/article/267553.htm$stop任務(wù)作用是把EDA工具置成暫停模式,在仿真環(huán)境下給出一個(gè)交互式的命令操作符,將控制權(quán)交給用戶。這個(gè)任務(wù)可以帶有參數(shù)表達(dá)式,根據(jù)參數(shù)值(0、1、2)的不同,輸出不同的信息,參數(shù)值越大,輸出信息越多。
(5)系統(tǒng)任務(wù)$random
這個(gè)系統(tǒng)函數(shù)提供了一個(gè)產(chǎn)生隨機(jī)數(shù)的手段,當(dāng)函數(shù)被占用時(shí)返回一個(gè)32位的隨機(jī)數(shù),它是一個(gè)帶符號(hào)的整形數(shù)。
下面是一個(gè)產(chǎn)生隨機(jī)數(shù)的例子
reg[23:0] rand;
rand=$random %60;
上面的例子產(chǎn)生一個(gè)-59到59之間的隨機(jī)數(shù),所以$random的用法是產(chǎn)生一個(gè)(-b+1)到(b-1)之間的隨機(jī)數(shù)。
下面的例子通過并位產(chǎn)生一個(gè)值在0—59之間的隨機(jī)數(shù)
reg[23:0 rand];
rand = {$random} %60;
利用這個(gè)系統(tǒng)函數(shù)可以產(chǎn)生隨機(jī)脈沖序列或?qū)挾入S機(jī)的脈沖序列,用于電路的測試。
下面是個(gè)產(chǎn)生隨機(jī)脈沖序列的例子
(6)關(guān)于編譯預(yù)處理
編譯預(yù)處理這部分和C語言差不多,主要用到的是`define、`include、和時(shí)間尺度`timescale
`define 就是宏定義,在C語言了用的也比較多,在verilog中靈活的使用宏定義可以增加程序的可讀性,又方便修改。例如在聲明一個(gè)8位寄存器時(shí)用宏定義
`define WINDOWS 8
module
reg [1:`WINDOWS] date;
……
習(xí)慣上一般宏定義的內(nèi)容用大寫字母表示,這里的WINDOWS就代表數(shù)字8,在下面的程序中調(diào)用WINDOWS時(shí)加個(gè) `,表示調(diào)用,這樣宏定義的好處就是,在大的程序中如果想改變寄存器的大小,可以直接改數(shù)字8為16,這樣,所有的WINDOWS都變成了16,這樣改一個(gè)就可以改變所有的,給程序員帶來了方便。
對于`include,C語言里用的比較多這里就不在多提,主要是模塊化編程思想的應(yīng)用,這個(gè)很重要,練好模塊化編程,可以大大提高程序的可讀性和可移植性,也使修改程序變得更加方便。
對于`timescale,就是一個(gè)時(shí)間尺度,C語言里面沒有,這里說一下。
`timescale 包括兩部分,一部分是時(shí)間單位,一部分是時(shí)間精度,下面舉個(gè)例子
在這個(gè)例子中,時(shí)間單位是10ns,時(shí)間精度是1ns,這里d=1.55,也就是說d等于1.55乘10納秒,也就是15.5納秒,再看時(shí)間精度是一納秒,四舍五入就是16納秒,所以在16納秒時(shí),set置零,32納秒時(shí)set置一。
小結(jié)
(1)、在多模塊調(diào)試的情況下,$monitor需配合$monitoron和$monitoroff來使用。
(2)、$monitor和$diplay的區(qū)別在于$monitor是連續(xù)監(jiān)視數(shù)據(jù)的變化,因而往往只要在測試模塊的initial塊中調(diào)用一次就可以監(jiān)控被測模塊中所有感興趣的信號(hào)不需要,也不能在always塊中調(diào)用$monitor.
(3)、$time常在$monitor中作時(shí)間標(biāo)記
(4)、$stop 和 $finish 常用在測試模塊的initial塊中,配合時(shí)間延遲用來控制仿真的持續(xù)時(shí)間。
(5)、$random在編寫程序是非常有用的,可以用來產(chǎn)生邊沿不穩(wěn)定的波形和隨機(jī)出現(xiàn)的脈沖。正確的使用它能有效的發(fā)現(xiàn)設(shè)計(jì)中出現(xiàn)的問題。
(6)、$readman在編寫測試程序時(shí)很有用,可以用來生成給定的復(fù)雜數(shù)據(jù)流。復(fù)雜數(shù)據(jù)可以用C語言產(chǎn)生,存在文件中。用$readman取出存入存儲(chǔ)器,再按節(jié)拍輸出這在驗(yàn)證算法邏輯電路中特別有用。
(7)、在用`timescale時(shí)要注意當(dāng)多個(gè)帶不同`timescale定義的模塊包含在一起時(shí),只有最后一個(gè)才起作用,所以屬于一個(gè)項(xiàng)目,但`timescale定義不同的多個(gè)模塊最好分開編譯,以免把時(shí)間單位搞混。
(8)、宏定義字符串和include引用時(shí),不要忘記用“`”這個(gè)標(biāo)號(hào)。
語法就到這里吧,謝謝大家!
fpga相關(guān)文章:fpga是什么
c語言相關(guān)文章:c語言教程
評論