<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > EDA/PCB > 設(shè)計應(yīng)用 > Verilog HDL基礎(chǔ)教程之:數(shù)據(jù)類型和運算符

          Verilog HDL基礎(chǔ)教程之:數(shù)據(jù)類型和運算符

          作者: 時間:2013-08-23 來源:網(wǎng)絡(luò) 收藏

          2.寄存器型變量

          寄存器是數(shù)據(jù)儲存單元的抽象。寄存器型變量的關(guān)鍵字是reg。通過賦值語句可以改變寄存器儲存的值,其作用與改變觸發(fā)器儲存的值相當。

          語言提供了功能強大的結(jié)構(gòu)語句使設(shè)計者能有效地控制是否執(zhí)行這些賦值語句。這些控制結(jié)構(gòu)用來描述硬件觸發(fā)條件,例如時鐘的上升沿和多路器的選通信號。reg類型變量的缺省初始值為不定值,即x。

          reg型變量常用來表示用于“always”模塊內(nèi)的指定信號,常代表觸發(fā)器。通常,在設(shè)計中要由“always”塊通過使用行為描述語句來表達邏輯關(guān)系。在“always”塊內(nèi)被賦值的每一個信號都必須定義成reg型。和wire型變量類似,reg型變量的聲明格式如下:

          reg [n-1:0] 變量名1,變量名2,…,變量名i; //共有i條總線,每條總線內(nèi)有n條線路

          也可以如下表示:

          reg [n:1] 變量名1,變量名2,…,變量名i; //共有i條總線,每條總線內(nèi)有n條線路

          其中,reg是reg型變量的確認標識符,[n-1:0]和[n:1]代表該變量的位寬,即該變量有幾位(bit),最后跟著的是變量的名字。如果一次定義多個變量,變量名之間用逗號隔開。聲明語句的最后要用分號表示語句結(jié)束。如下所示:

          reg rega; //定義了一個一位的名為rega的reg型變量

          reg [3:0] regb; //定義了一個四位的名為regb的reg型變量

          reg [4:1] regc, regd; //定義了兩個四位的名為regc和regd的reg型變量

          reg型變量可以賦正值,也可以賦負值。但當一個reg型變量是一個表達式中的操作數(shù)時,它的值將被當作是無符號值,即正值。例如:當一個四位的寄存器用作表達式中的操作數(shù)時,如果開始寄存器被賦以值-1,則在表達式中進行運算時,其值被認為是+15。

          3.存儲器型變量

          通過對reg型變量建立數(shù)組來對存儲器建模,用于描述RAM型存儲器、ROM存儲器和reg文件。數(shù)組中的每一個單元通過一個數(shù)組索引進行尋址。由于在語言中沒有多維數(shù)組存在,因此memory型數(shù)據(jù)是通過擴展reg型數(shù)據(jù)的地址范圍來生成的。其格式如下:

          reg [n-1:0] 存儲器名[m-1:0];

          或:

          reg [n-1:0] 存儲器名[m:1];

          在這里,reg[n-1:0]定義了存儲器中每一個存儲單元的大小,即該存儲單元是一個n位的寄存器。存儲器名后的[m-1:0]或[m:1]則定義了該存儲器中有多少個這樣的寄存器。最后用分號結(jié)束定義語句。下面舉例說明:

          reg [7:0] mema[255:0]; //定義一個名為mema的256×8的存儲器

          這個例子定義了一個名為mema的存儲器,該存儲器有256個8位的存儲器。該存儲器的地址范圍是0~255。需要注意的是,對存儲器進行地址索引的表達式必須是常數(shù)表達式。

          另外,在同一個聲明語句里,可以同時定義存儲器型數(shù)據(jù)和reg型數(shù)據(jù)。 例如:

          parameter wordsize=16, memsize=256; //定義兩個參數(shù)

          reg [wordsize-1:0] mem[memsize-1:0],writereg, readreg; //使用可變參數(shù)來定義存儲器

          盡管memory型數(shù)據(jù)和reg型數(shù)據(jù)的定義格式很相似,但要注意其不同之處。如一個由n個1位寄存器構(gòu)成的存儲器組是不同于一個n位的寄存器的,如下所示:

          reg [n-1:0] rega; //一個n位的寄存器

          reg mema [n-1:0]; //一個由n個1位寄存器構(gòu)成的存儲器組

          一個n位的寄存器可以在一條賦值語句里進行賦值,而一個完整的存儲器則不行,例如:

          rega =0; //合法賦值語句

          mema =0; //非法賦值語句

          如果想對memory中的存儲單元進行讀寫操作,必須指定該單元在存儲器中的地址。下面的寫法是正確的。

          mema[3]=0; //給memory中的第3個存儲單元賦值為0。

          進行尋址的地址索引可以是表達式,這樣就可以對存儲器中的不同單元進行操作。表達式的值可以取決于電路中其他的寄存器的值。例如可以用一個加法計數(shù)器來做RAM的地址索引。

          常用運算符

          Verilog 語言的運算符范圍很廣,其運算符按其功能可分為以下幾類。

          算術(shù)運算符:(+,-,×,/,%)。

          賦值運算符:(=,=)。

          關(guān)系運算符:(>,,>=,=)。

          邏輯運算符:(,||,!)。

          條件運算符:(?:)。

          位運算符:(~,|,^,,^~)。

          移位運算符:(,>>)。

          拼接運算符:({ })。

          其他

          在Verilog HDL語言中運算符所帶的操作數(shù)是不同的,按其所帶操作數(shù)的個數(shù)運算符可分為以下3種。

          單目運算符(unary operator):可以帶一個操作數(shù),操作數(shù)放在運算符的右邊。

          二目運算符(binary operator):可以帶兩個操作數(shù),操作數(shù)放在運算符的兩邊。

          三目運算符(ternary operator):可以帶三個操作數(shù),這三個操作數(shù)用三目運算符分隔開。

          例如:

          clock = ~clock; // ~ 是一個單目取反運算符,clock是操作數(shù)。

          c = a | b; // | 是一個二目按位或運算符,a 和 b是操作數(shù)。

          r = s ? t : u; // ?: 是一個三目條件運算符,s,t,u是操作數(shù)。

          下面對常用的幾種運算符進行介紹。

          1.基本的算術(shù)運算符

          在Verilog HDL語言中,算術(shù)運算符又稱為二進制運算符,共有下面幾種。

          +:(加法運算符或正值運算符,如ega+regb、+3)。

          −:(減法運算符或負值運算符,如rega−3、−3)。

          ´:(乘法運算符,如rega´3)。

          /:(除法運算符,如5/3)。

          % :(模運算符或求余運算符,要求%兩側(cè)均為整型數(shù)據(jù),如7%3的值為1)。

          在進行整數(shù)除法運算時,結(jié)果值要略去小數(shù)部分,只取整數(shù)部分。而進行取模運算時,結(jié)果值的符號位采用模運算式里第一個操作數(shù)的符號位,例如:

          10%3 1 //余數(shù)為1

          11%3 2 //余數(shù)為2

          12%3 0 //余數(shù)為0,即無余數(shù)

          -10%3 -1 //結(jié)果取第一個操作數(shù)的符號位,所以余數(shù)為-1

          11%3 2 //結(jié)果取第一個操作數(shù)的符號位,所以余數(shù)為2.

          注意

          在進行算術(shù)運算操作時,如果某一個操作數(shù)有不確定的值x,則整個結(jié)果也為不定值x。



          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();