0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

SpinalHDL語法篇之Bool類型

傅里葉的貓 ? 來源:傅里葉的貓 ? 作者: 張大俠 ? 2022-10-31 10:56 ? 次閱讀

作為SpinalHDL語法篇的第一節(jié),我們也從最簡單的開始。

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表達式賦值 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;

邏輯運算

下圖為官方的邏輯運算解釋,也不翻譯了,很容易理解。

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#這里必須有初值,否則下一句會報錯
k.clearWhen(b)

vall=True
when(b){
l:=False
}

valm=RegInit(False)#關于寄存器類型,這里先熟悉一下,后面章節(jié)會講到
m.riseWhen(b)

邊緣檢測

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ù)值比對

Operator Description Return type
x === y Equality Bool
x =/= y Inequality Bool

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • Verilog
    +關注

    關注

    28

    文章

    1335

    瀏覽量

    109844
  • HDL
    HDL
    +關注

    關注

    8

    文章

    324

    瀏覽量

    47282

原文標題:SpinalHDL語法篇之Bool類型

文章出處:【微信號:傅里葉的貓,微信公眾號:傅里葉的貓】歡迎添加關注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關推薦

    至芯科技altera 系列FPGA教程 第八 verilog基礎語法

    至芯科技altera 系列FPGA教程 第八 verilog基礎語法
    發(fā)表于 08-11 03:24

    verilog語法練習實踐

    verilog語法練習晉級
    發(fā)表于 09-02 13:40

    STM32如何去使用bool類型

    Q:STM32 如何使用bool類型?通常進行stm32相關編程的時候,bool類型表現(xiàn)更加直白,但編程過程中又不能直接使用,就可以參照工程中的頭文件進行添加定義。如:stm32f10
    發(fā)表于 08-04 08:10

    bool定義的類型

    []bool定義的類型只有真和假兩種值。[]Static申明的局部變量,存儲在靜態(tài)存儲區(qū)。靜態(tài)局部變量的初始化語句塊第一次執(zhí)行起作用。在隨后的運行過程中,變量將保持上一次執(zhí)行的值。[]枚舉
    發(fā)表于 08-12 07:11

    請問在C語言中如何使用bool類型

    在C語言中如何使用bool類型?
    發(fā)表于 10-22 07:20

    SpinalHDL里switch方法有何用處呢

    可以更快速高效的實現(xiàn)tkeep到byteCnt的轉(zhuǎn)換:SpinalHDL在生成RTL時,僅SpinalHDL提供的語法會生成RTL電路,而其他代碼則是起指導生成電路的作用,在上面代碼里
    發(fā)表于 06-22 14:25

    SpinalHDL中定義各種各樣的復合數(shù)據(jù)類型

    通過繼承Bundle,在SpinalHDL中我們可以定義各種各樣的復合數(shù)據(jù)類型。今天,關于Bundle的幾個容易被忽略的點,一同來看下?!稡undle個人在使用SpinalHDL來描述電路時,凡是
    發(fā)表于 06-28 15:21

    SpinalHDL中關于casez的使用

    我們常常采用?表示我們不關心的位,而在SpinalHDL中,也存在這么一種表示方式。SpinalHDL整體的數(shù)據(jù)結(jié)構(gòu)如下圖所示:針對BitVector及其子類,SpinalHDL定義了一種特殊的
    發(fā)表于 07-06 10:59

    SpinalHDL的UInt與SInt數(shù)據(jù)類型能夠進行有符號/無符號數(shù)操作

    在Bits的基礎上,SpinalHDL提供了UInt、SInt數(shù)據(jù)類型,從而能夠進行有符號/無符號數(shù)操作。變量定義/初始化UInt/SInt的初始化與Bits類型相似:邏輯操作符UInt/SInt
    發(fā)表于 07-14 14:45

    SpinalHDL中Bundle與普通數(shù)據(jù)類型之間的連接賦值轉(zhuǎn)換

    SpinalHDL中Bundle與SystemVerilog中的packed struct很像,在某些場景下,與普通數(shù)據(jù)類型之間的連接賦值可以通過asBits,assignFromBits來實現(xiàn)
    發(fā)表于 10-18 14:22

    硬件語法

    硬件語法,VHDL資料,又需要的下來看看
    發(fā)表于 08-08 15:17 ?26次下載

    KEIL-MDK和STM32的數(shù)據(jù)類型-入門pdf資料下載

    數(shù)據(jù)類型-入門
    發(fā)表于 04-14 10:50 ?7次下載
    KEIL-MDK和STM32的數(shù)據(jù)<b class='flag-5'>類型</b>-<b class='flag-5'>之</b>入門<b class='flag-5'>篇</b>pdf資料下載

    SpinalHDL中的對應關系及聲明形式

    針對SpinalHDL中的兩大類型Reg、Wire,來梳理下在SpinalHDL中的對應關系及聲明形式。
    的頭像 發(fā)表于 07-03 11:02 ?1474次閱讀

    SpinalHDL中Bundle數(shù)據(jù)類型的轉(zhuǎn)換

    SpinalHDL中Bundle與SystemVerilog中的packed struct很像,在某些場景下,與普通數(shù)據(jù)類型之間的連接賦值可以通過asBits,assignFromBits來實現(xiàn)。
    的頭像 發(fā)表于 10-17 09:51 ?1244次閱讀

    SpinalHDL語法Bool類型

    作為SpinalHDL語法的第一節(jié),我們也從最簡單的開始。 Bool類型定義
    的頭像 發(fā)表于 05-05 16:01 ?567次閱讀