拼接符

在Verilog HDL語言有一個特殊的運算符:位拼接運算符{},用這個運算符可以把兩個或多個信號的某些位拼接起來進行運算操作。

基本介紹

  • 中文名:拼接符
  • 領域:Verilog HDL語言
簡介,運算符,其他語言,空白符,注釋,大小寫,標識符,保留字,轉義字元,

簡介

在Verilog HDL語言有一個特殊的運算符:位拼接運算符{},用這個運算符可以把兩個或多個信號的某些位拼接起來進行運算操作。其使用方法如下:把某些倍號的某些位詳細地列出來,中間用逗號分開,最後用大括弧括起來表示一個整體信號。在位拼接表達式中不允許存在沒有指明位數的信號。這是因為在計算拼接信號的位寬的大小時必需知道其中每個信號的位寬。位拼接也可以用重複法來簡化表達式,還可以用嵌套的方式來表達。

運算符

Verilog的許多運算符和C語言類似,但是有一部分運算符是特有的,例如拼接運算符、縮減運算符、帶有無關位的相等運算符等。
  • 按位
  • 按位取反(~):1個多位運算元按位取反。例如:a=4'b1011,則~a的結果為4'b0100
  • 按位與(&):2個多位運算元按位進行與運算,各位的結果按順序組成一個新的多位數。例如:a=2'b10,b=2'b11,則a&b的結果為2'b10
  • 按位或(|):2個多位運算元按位進行或運算,各位的結果按順序組成一個新的多位數。例如:a=2'b10,b=2'b11,則a|b的結果為2'b11
  • 按位異或(^):2個多位運算元按位進行異或運算,各位的結果按順序組成一個新的多位數。例如:a=2'b10,b=2'b11,則a^b的結果為2'b01
  • 按位同或(~^或^~):2個多位運算元按位進行同或運算,各位的結果按順序組成一個新的多位數。例如:a=2'b10,b=2'b11,則a~^b的結果為2'b10
邏輯
  • 邏輯取反(!):對1個運算元進行邏輯取反,如果這個運算元為0,則結果為1;如果這個運算元不為0,則結果為0
  • 邏輯與(&&):對2個運算元進行邏輯與,如果二者同為0或同不為0,則結果為1,否則為0。例如:3 && 0的結果為0。
  • 邏輯或(||):對2個運算元進行邏輯或,如果二者其中至少有一個不為0,則結果為1,否則為0。例如:3||0的結果為1。
縮減
  • 縮減與(&):對一個多位運算元進行縮減與操作,先將它最高位與次高位進行與操作,其結果再與第二次高位進行與操作,直到最低位。例如:&(4'b1011)的結果為0
  • 縮減與非(~&):對一個多位運算元進行縮減與非操作,先將它最高位與次高位進行與非操作,其結果再與第二次高位進行與非操作,直到最低位。例如:~&(4'b1011)的結果為1
  • 縮減或(|):對一個多位運算元進行縮減或操作,先將它最高位與次高位進行或操作,其結果再與第二次高位進行或操作,直到最低位。例如:|(4'b1011)的結果為1
  • 縮減或非(~|):對一個多位運算元進行縮減或非操作,先將它最高位與次高位進行或非操作,其結果再與第二次高位進行或非操作,直到最低位。例如:~|(4'b1011)的結果為0
  • 縮減異或(^):對一個多位運算元進行縮減異或操作,先將它最高位與次高位進行異或操作,其結果再與第二次高位進行異或操作,直到最低位。例如:^(4'b1011)的結果為1
  • 縮減同或(~^or^~):對一個多位運算元進行縮減同或操作,先將它最高位與次高位進行同或操作,其結果再與第二次高位進行同或操作,直到最低位。例如:~^(4'b1011)的結果為0
算術
  • 加(+):2個運算元相加
  • 減(-):2個運算元相減或取1個運算元的負數(二進制補碼表示)
  • 乘(*):2個運算元相乘
  • 除(/):2個運算元相除
  • 求冪(**)}}:2個運算元求冪,前一個運算元為底數,後一個運算元為指數
關係
  • 大於(>):比較2個運算元,如果前者大於後者,結果為真
  • 小於(<):比較2個運算元,如果前者小於後者,結果為真
  • 大於或等於(>=):比較2個運算元,如果前者大於或等於後者,結果為真
  • 小於或等於(<=):比較2個運算元,如果前者小於或等於後者,結果為真
  • 邏輯相等(==):2個運算元比較,如果各位均相等,結果為真。如果其中任何一個運算元中含有x或z,則結果為x
  • 邏輯不等(!=):2個運算元比較,如果各位不完全相等,結果為真。如果其中任何一個運算元中含有x或z,則結果為x
  • case相等(===):2個運算元比較,如果各位(包括x和z位)均相等,結果為真
  • case不等(!==):2個運算元比較,如果各位(包括x和z位)不完全相等,結果為真
移位
  • 邏輯右移(>>):1個運算元向右移位,產生的空位用0填充
  • 邏輯左移(<<):1個運算元向左移位,產生的空位用0填充
  • 算術右移(>>>):1個運算元向右移位。如果是無符號數,則產生的空位用0填充;有符號數則用其符號位填充
  • 算術左移(<<<):1個運算元向左移位,產生的空位用0填充
拼接({,}):2個運算元分別作為高低位進行拼,例如:{2'b10,2'b11}的結果是a'b1011
重複({n{m}}):將運算元m重複n次,拼接成一個多位的數。例如:A=2'b01,則{2{A}}的結果是4'b0101
條件(?:):根據?前的表達式是否為真,選擇執行後面位於:左右兩個語句。例如:(a>b)?(a=a-1):(b=b-2),如果a大於b,則將a-1的值賦給a,否則將b-2的值賦給b

其他語言

Verilog的設計初衷是成為一種基本語法與C語言相近的硬體描述語言。這是因為C語言在Verilog設計之初,已經在許多領域得到廣泛套用,C語言的許多語言要素已經被許多人習慣。一種與C語言相似的硬體描述語言,可以讓電路設計人員更容易學習和接受。不過,Verilog與C語言還是存在許多差別。另外,作為一種與普通計算機程式語言不同的硬體描述語言,它還具有一些獨特的語言要素,例如向量形式的線網和暫存器、過程中的非阻塞賦值等。總的來說,具備C語言的設計人員將能夠很快掌握Verilog硬體描述語言。

空白符

空白符是指代碼中的空格(對應的轉義標識符為\b)、制表符(\t)和換行(\n)。如果這些空白符出現在字元串里,那么它們不可忽略。除此之外,代碼中的其他空白符在編譯的時候都將會被視為分隔標識符,即使用2個空格或者1個空格並無影響。不過,在代碼中使用合適的空格,可以讓上下行代碼的外觀一致(例如使賦值運算符位於同一個豎直列),從而提高代碼的可讀性。

注釋

為了方便代碼的修改或其他人的閱讀,設計人員通常會在代碼中加入注釋。與C語言一樣,有兩種方式書寫注釋。第一種為多行注釋,即注釋從/*開始,直到*/才結束;另一種為單行注釋,注釋從//開始,從這裡到這一行末尾的內容會被系統識別為注釋。
某些電子設計自動化工具,會識別出代碼中以特殊格式書寫、含有某些預先約定關鍵字的注釋,並從這些注釋所提取有用的信息。這些注釋不是供人閱讀,而是向第三方工具提供有關設計項目的額外信息。例如,某些邏輯綜合工具可以從注釋中讀取綜合的約束信息。

大小寫

Verilog是一種大小寫敏感的硬體描述語言。其中,它的所有系統關鍵字都是小寫的。

標識符

Verilog代碼中用來定義語言結構名稱的字元稱為標識符,包括變數名、連線埠名、模組名等等。標識符可以由字母、數字、下劃線以及美元符($)來表示。但是標識符的第一個字元只能是字母、數字或者下劃線,不能為美元符,這是因為以美元符開始的標識符和系統任務的保留字衝突。

保留字

和其他許多程式語言類似,Verilog也有許多保留字(或稱為關鍵字),用戶定義的標識符不能夠和保留字相同。Verilog的保留字均為小寫。變數類型中的wire、reg、integer等、表示過程的initial、always等,以及所有其他的系統任務、編譯指令,都是關鍵字。可以查閱官方文獻以完整的關鍵字的列表。

轉義字元

轉義字元(又稱轉義標識符),是由\開始,以空白符結束的一種特殊程式語言結構。這種結構可以用來表示那些容易與系統語言結構相同的內容(例如"在系統中被用來表示字元串,如果字元串本身的內容包含一個與之形式相同的雙引號,那么就必須使用轉義標識符)。下面列出了常用的幾種轉義標識符。除此之外,在反斜線之後也可以加上字元的ASCII,這種轉義標識符相當於一個字元。常用的轉義標識符有\n(換行)、\t(定位點)、\b(空格)、\\(反斜槓)和\"(英文的雙引號)等。

相關詞條

熱門詞條

聯絡我們