作為SpinalHDL語(yǔ)法篇的第一節(jié),我們也從最簡(jiǎn)單的開始。
Bool類型定義
Bool類型就是Verilog中的單bit類型,定義方式如下:
| Syntax | Description | Return |
|---|---|---|
| Bool() | 創(chuàng)建Bool類型變量 | Bool |
| True | 創(chuàng)建Bool類型變量,并賦值true | Bool |
| False | 創(chuàng)建Bool類型變量,并賦值false | Bool |
| Bool(value: Boolean) | 創(chuàng)建Bool類型變量,并使用Scala表達(dá)式賦值 | Bool |
Example:
vala=Bool() valb=True valc=False vald=Bool(1>2)
生成的Verilog代碼如下:
wirea; wireb; wirec; wired; assignb=1'b1; assignc=1'b0; assignd=1'b0;
邏輯運(yùn)算
下圖為官方的邏輯運(yùn)算解釋,也不翻譯了,很容易理解。
| Operator | Description | Return type |
|---|---|---|
| !x | Logical NOT | Bool |
| x && y | Logical And | Bool |
| x & y | Logical And | Bool |
| x || y | Logical OR | Bool |
| x | y | Logical OR | Bool |
| x ^ y | Logical XOR | Bool |
| x.set[()] | Set x to True | Bool |
| x.clear[()] | Set x to False | Bool |
| x.setWhen(cond) | Set x when cond is True | Bool |
| x.clearWhen(cond) | Clear x when cond is True | Bool |
| x.riseWhen(cond) | Set x when x is False and cond is True | Bool |
| x.fallWhen(cond) | Clear x when x is True and cond is True | Bool |
vale=a&b
valf=a|b
valg=a^b
valh=!a
vali=Bool()
i.set()
valj=Bool()
j.clear()
valk=True#這里必須有初值,否則下一句會(huì)報(bào)錯(cuò)
k.clearWhen(b)
vall=True
when(b){
l:=False
}
valm=RegInit(False)#關(guān)于寄存器類型,這里先熟悉一下,后面章節(jié)會(huì)講到
m.riseWhen(b)
邊緣檢測(cè)
| Operator | Description | Return type |
|---|---|---|
| x.edge[()] | Return True when x changes state | Bool |
| x.edge(initAt: bool) | Same as x.edge but with a reset value | Bool |
| x.rise[()] | Return True when x was low at the last cycle and is now high | Bool |
| x.rise(initAt: Bool) | Same as x.rise but with a reset value | Bool |
| x.fall[()] | Return True when x was high at the last cycle and is now low | Bool |
| x.fall(initAt: Bool) | Same as x.fall but with a reset value | Bool |
| x.edges[()] | Return a bundle (rise, fall, toggle) | BoolEdges |
| x.edges(initAt: Bool) | Same as x.edges but with a reset value | BoolEdges |
vala=Bool()
valb=False
when(a.edge()){
b:=True
}
valc=a.edge(False)
轉(zhuǎn)換后的代碼為:
moduleDemoBool( inputclk, inputreset ); wirea; regb; rega_regNext; wirewhen_DemoBool_l35; rega_regNext_1; wirec; always@(*)begin b=1'b0; if(when_DemoBool_l35)begin b=1'b1; end end assignwhen_DemoBool_l35=(a^a_regNext); assignc=(a^a_regNext_1); always@(posedgeclk)begin a_regNext<=?a; ??end ??always?@(posedge?clk?or?posedge?reset)?begin ????if(reset)?begin ??????a_regNext_1?<=?1'b0; ????end?else?begin ??????a_regNext_1?<=?a; ????end ??end endmodule
valedgeBundle=myBool_2.edges(False)
when(edgeBundle.rise){
//dosomethingwhenarisingedgeisdetected
}
when(edgeBundle.fall){
//dosomethingwhenafallingedgeisdetected
}
when(edgeBundle.toggle){
//dosomethingateachedge
}
數(shù)值比對(duì)
| Operator | Description | Return type |
|---|---|---|
| x === y | Equality | Bool |
| x =/= y | Inequality | Bool |
審核編輯:湯梓紅
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。
舉報(bào)投訴
-
Verilog
+關(guān)注
關(guān)注
30文章
1374瀏覽量
114534 -
HDL
+關(guān)注
關(guān)注
8文章
332瀏覽量
48978
原文標(biāo)題:SpinalHDL語(yǔ)法篇之Bool類型
文章出處:【微信號(hào):傅里葉的貓,微信公眾號(hào):傅里葉的貓】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
熱點(diǎn)推薦
至芯科技之altera 系列FPGA教程 第八篇 verilog基礎(chǔ)語(yǔ)法
至芯科技之altera 系列FPGA教程 第八篇 verilog基礎(chǔ)語(yǔ)法
發(fā)表于 08-11 03:24
STM32如何去使用bool類型
Q:STM32 如何使用bool類型?通常進(jìn)行stm32相關(guān)編程的時(shí)候,bool類型表現(xiàn)更加直白,但編程過程中又不能直接使用,就可以參照工程中的頭文件進(jìn)行添加定義。如:stm32f10
發(fā)表于 08-04 08:10
bool定義的類型
[]bool定義的類型只有真和假兩種值。[]Static申明的局部變量,存儲(chǔ)在靜態(tài)存儲(chǔ)區(qū)。靜態(tài)局部變量的初始化語(yǔ)句塊第一次執(zhí)行起作用。在隨后的運(yùn)行過程中,變量將保持上一次執(zhí)行的值。[]枚舉
發(fā)表于 08-12 07:11
在SpinalHDL里switch方法有何用處呢
可以更快速高效的實(shí)現(xiàn)tkeep到byteCnt的轉(zhuǎn)換:SpinalHDL在生成RTL時(shí),僅SpinalHDL提供的語(yǔ)法會(huì)生成RTL電路,而其他代碼則是起指導(dǎo)生成電路的作用,在上面代碼里
發(fā)表于 06-22 14:25
在SpinalHDL中定義各種各樣的復(fù)合數(shù)據(jù)類型
通過繼承Bundle,在SpinalHDL中我們可以定義各種各樣的復(fù)合數(shù)據(jù)類型。今天,關(guān)于Bundle的幾個(gè)容易被忽略的點(diǎn),一同來看下?!稡undle個(gè)人在使用SpinalHDL來描述電路時(shí),凡是
發(fā)表于 06-28 15:21
在SpinalHDL中關(guān)于casez的使用
我們常常采用?表示我們不關(guān)心的位,而在SpinalHDL中,也存在這么一種表示方式。SpinalHDL整體的數(shù)據(jù)結(jié)構(gòu)如下圖所示:針對(duì)BitVector及其子類,SpinalHDL定義了一種特殊的
發(fā)表于 07-06 10:59
SpinalHDL的UInt與SInt數(shù)據(jù)類型能夠進(jìn)行有符號(hào)/無符號(hào)數(shù)操作
在Bits的基礎(chǔ)上,SpinalHDL提供了UInt、SInt數(shù)據(jù)類型,從而能夠進(jìn)行有符號(hào)/無符號(hào)數(shù)操作。變量定義/初始化UInt/SInt的初始化與Bits類型相似:邏輯操作符UInt/SInt
發(fā)表于 07-14 14:45
SpinalHDL中Bundle與普通數(shù)據(jù)類型之間的連接賦值轉(zhuǎn)換
SpinalHDL中Bundle與SystemVerilog中的packed struct很像,在某些場(chǎng)景下,與普通數(shù)據(jù)類型之間的連接賦值可以通過asBits,assignFromBits來實(shí)現(xiàn)
發(fā)表于 10-18 14:22
在SpinalHDL中的對(duì)應(yīng)關(guān)系及聲明形式
針對(duì)SpinalHDL中的兩大類型Reg、Wire,來梳理下在SpinalHDL中的對(duì)應(yīng)關(guān)系及聲明形式。
SpinalHDL中Bundle數(shù)據(jù)類型的轉(zhuǎn)換
SpinalHDL中Bundle與SystemVerilog中的packed struct很像,在某些場(chǎng)景下,與普通數(shù)據(jù)類型之間的連接賦值可以通過asBits,assignFromBits來實(shí)現(xiàn)。
SpinalHDL語(yǔ)法之Bool類型
作為SpinalHDL語(yǔ)法篇的第一節(jié),我們也從最簡(jiǎn)單的開始。
Bool類型定義
SpinalHDL語(yǔ)法篇之Bool類型
評(píng)論