1、環境變量PATH
程序是由操作系統執行 是吧!要執行程序,你的找到它吧,這就是 PATH 環境變量做的事。
比如 win下PATH中的路徑,是指在DOS下,你可以直接輸入一個可執行文件的名字,它就能就行了。否則,就要先 cd 到那個可執行文件所在的目錄下,之后才能在DOS直接輸入名字運行。
2、$readmemh readmemb
$readmemb ("<數據文件名>",<存貯器名>,<起始地址>,<結束地址>)
$readmemb("<數據文件名>",<存貯器名>
下面舉例說明: 先定義一個有256個地址的字節存貯器
mem: reg[7:0] mem[1:256];
下面給出的系統任務以各自不同的方式裝載數據到存貯器mem中。
initial $readmemh("mem.data",mem);
initial $readmemh("mem.data",mem,16);
initial $readmemh("mem.data",mem,128,1);
第一條語句在仿真時刻為0時,將裝載數據到以地址是1的存貯器單元為起始存放單元的存貯器中去。
第二條語句將裝載數據到以單元地址是16的存貯器單元為起始存放單元的存貯器中去,一直到地址是256的單元為止。
第三條語句將從地址是128的單元開始裝載數據,一直到地址為1的單元。在第三種情況中,當裝載完畢,系統要檢查在數據文件里是否有128個數據,如果沒有,系統將提示錯誤信息。
文件可以包含顯式的地址形式。
形式一
11001
11010
形式二:對指定地址進行賦值(地址是十六進制的數)
@hex_address value
@5 11001000 // 將11001存入mem[5]
@2 11010000 //將11010存入mem[2]
@5 //以直至5開始
11001000
00000000
111111111
在這種情況下,值被讀入存儲器指定的地址。
命名規則:reg[n-1:0] 存儲器名[m-1:0]
說明:這是m個n位的存儲器,該存儲器的地址范圍是0-(m-1)
舉例:reg[3:0] memo[255:0]
說明:這是256個4位存儲器,該存儲器地址范圍是0-255
賦值:memo[200] = 4'b1010;
說明:給第200地址單元賦值4'b1010;
精確到位:memo[56][2]
說明:第56地址的第2位數據
賦值:wire data=memo[56][1];
說明:把memo中第56地址的第1位數據賦值給data;
integer類型也是一種寄存器數據類型,integer類型的變量為有符號數,而reg類型的變量則為無符號數,除非特別聲明為有符號數,還有就是integer的位寬為宿主機的字的位數,但最小為32位,用integer的變量都可以用reg定義,只是對於用於計數更方便而已。reg,integer,real,time都是寄存器數據類型,定義在Verilog中用來保存數值的變量,和實際的硬件電路中的寄存器有區別
今天看代碼時遇到了integer,只知道這是個整數類型,可詳細的內容卻一竅不通,查看了資料---《verilog數字VLSI設計教程》。其中是這么寫到的:
大多數的矢量類型(reg或者net)都被默認當做無符號數。integer和real是個例外,它們被默認為當做有符號數。通常,real類型是不可綜合的。
假設在沒有溢出的情況下,不管是無符號數還是有符號數,它們都是二進制的一串數值而已;而當這個值被當做某種類型比較時:又符號數的MSB被用來表示這個數字的符號,而無符號數的MSB則是位權最高的那一位。無論采用什么樣的二進制格式,一個無符號數永遠也不能成為負值。采用integer配合FOR語句,行數比較少,但是integer不能綜合,只能用來仿真。
位拼接符號的使用時的注意事項
問題一
reg [7:0] reg2;
reg2<={2'b11,reg2};//不能實現預定的功能;
reg2<={reg2,2'b11,};//能實現預定的功能;
reg2<={2'b11,reg2[7:2]};能實現預定的功能;
在利用拼接符號時,一定要指定每一個元素的位寬;在位拼接表達式中不允許存在沒有指明位數的信號
在想允許綜合的風格代碼中,一般不對RAM復位
RAM一般會占用大量的面積,所以不是用綜合出來的RAM