国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Verilog常用運算符及表達(dá)式

這篇具有很好參考價值的文章主要介紹了Verilog常用運算符及表達(dá)式。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

本文詳細(xì)介紹了Verilog常用的運算符和表達(dá)式,特別是分享了處理“計算位寬溢出”和“負(fù)數(shù)”的可行方式,幫助讀者更加輕松地理解和掌握Verilog語言的運算符。

一、常見運算符以及表達(dá)式

算數(shù)運算符:加(+)、減(-)、乘(*)、除(/)、取余(%)

賦值運算符:非阻塞賦值(=)、阻塞賦值(<=);

關(guān)系運算符:大于(>)、小于(<)、等于(==)、不等于(!=)、大于等于(>=)、小于等于(<=)

邏輯運算符:與(&&)、或(||)、非(!);

條件運算符:(?:);

位運算符 : 取反(~)、或(|)、異或(^)、與(&);

移位運算符:左移(<<)、右移(>>);

拼接運算符:位拼接({}),復(fù)制{n};

二、詳細(xì)介紹

1、算數(shù)運算符

加(+)、減(-)、乘(*)、除(/)、取余(%)

+:加法運算或者正值運算,a+b、+a
— :減法運算或者負(fù)值運算:a—b、—a
* :乘法運算:a*b
/ :除法運算:a/b,b不能等于0
% :求余運算:a%b,%兩側(cè)的數(shù)據(jù)必須為整型數(shù)據(jù),b不能等于0

2、賦值運算符

非阻塞賦值(=)常用于組合邏輯,例如assign語句和always@(*)語句塊。

wire [5:0] data0;
reg [6:0] data1;
?
assign data0 = 'd6;
always@(*) begin
    data1 = 'd10;
end

阻塞賦值(<=)常用于時序邏輯,例如always@(posedge clk)語句塊。

reg [6:0] data1;
?
always@(posedge clk) begin
    data1 <= 'd10;
end

3、關(guān)系運算符

大于(>)、小于(<)、等于(==)

不等于(!=)、大于等于(>=)、小于等于(<=)

a < b  :a小于b
a > b  :a大于b
a == b :a等于b
a != b :a不等于b
a <= b :a小于或等于b
a >= b :a大于或等于b

4、邏輯運算符

(1)與(&&)

邏輯與:a&&b,a和b同時為真時才為真,否則為假

(2)或(||)

邏輯或:a||b,a和b同時為假時才為假,否則為真

(3)非(!)

a為真時,!a為假

5、條件運算符

條件表達(dá)式的值為真或假,如果為真,返回值1,否則返回值2。它主要用于簡化if-else語句的書寫和提高代碼的可讀性。

  條件表達(dá)式 ? 值1 : 值2

assign a = (b) ? 'b1 : 'b0; 如果b為真,那么a = 'b1,否則a = 'b0。

6、位運算符

(1)與(&)

對兩個數(shù)的二進(jìn)制形式進(jìn)行“與”運算,只有兩個相應(yīng)位的值都為1時,結(jié)果才為1。

(2)或(|)

對兩個數(shù)的二進(jìn)制形式進(jìn)行“或”運算,只要有一個相應(yīng)位的值為1,結(jié)果就為1。

(3)異或(^)

對兩個數(shù)的二進(jìn)制形式進(jìn)行“異或”運算,當(dāng)兩個相應(yīng)位的值不同時,結(jié)果為1,否則為0。

(4)取反(~)

對一個數(shù)的二進(jìn)制形式進(jìn)行取反操作,即0變?yōu)?,1變?yōu)?。

~ :按位取反         a=1001   ~a=0110
& :按位與           a=1001   b=0011   a&b=0001
| :按位或           a=1001   b=0101   a|b=1101
^ :按位異或         a=1001   b=0101   a^b=1100

7、移位運算符

在Verilog中有兩種移位運算符:<< (左移位運算符) 和 >>(右移位運算符)。其使用方法如下:a>>n或a<<n,a是操作數(shù),n表示移動幾位,這兩種移位運算都用0填補移出的空位。

 reg [5:0] a,c;
 reg [7:0] b;
 a = 6'b101001;
 b = a<<2;    此時b=8'b10100100
 c = a>>2;    此時c=6'b1010

8、拼接運算符

位拼接運算符可以把兩個或多個信號的某些位拼接起來進(jìn)行運算操作,或者把單個信號復(fù)制多份。其使用方法如下:

wire [5:0] a, b;
wire [1:0] c
wire [4:0] d;
wire [11:0] e;
?
assign a = 6'b101101;
assign b = 6'h111000;
assign c = 2'h11;
assign d = {a[5],b[2:0],c};//即d = 100011
assign e = {2};          //即e = {b,b} = 111000111000
?
?
wire aa, bb, cc, dd;
assign {aa, bb, cc, dd} = 4'b1011;
//即 aa = 1,bb = 0,cc = 1,dd = 1;
  1. 運算符優(yōu)先級

Verilog常用運算符及表達(dá)式

三、常見問題和誤區(qū)

1、位寬溢出問題

加法和乘法的計算結(jié)果需要擴展位寬,如果定義的結(jié)果變量位寬未做擴展,則計算結(jié)果將丟失最高位,導(dǎo)致結(jié)果異常。

簡單處理辦法:結(jié)果賦值的寄存器或wire的位寬引入進(jìn)位即可。

module test
(
    input clk,
    output reg [7:0] a,c,d,
    output reg [8:0] b
);
?
reg [7:0] d0= 8'd145, d1= 8'd128;
?
always @ (posedge clk) begin
    a <= d0+ d1;
    b <= d0+ d1;
    c <= (d0+ d1) >> 1;
    d <= (d0+ d1 + 0) >> 1; 
end
?
endmodule

說明:

a <= d0+ d1,表達(dá)式中最大位寬是8bit,因此運算結(jié)果丟掉了進(jìn)位,得到17;

b <= d0+ d1,整個表達(dá)式中最大位寬是9bit,因此運算結(jié)果保留了進(jìn)位,得到273

c <= (d0+ d1) >> 1 ,表達(dá)式中最大位寬只有8bit,因此d0+ d1的中間結(jié)果也是8bit(丟掉進(jìn)位后的17),這樣不能起到保留最高有效位的效果。

d <= (d0+ d1+ 0) >> 1,表達(dá)式中多了一個未聲明位寬的常數(shù)0,其默認(rèn)位寬為32bit,這樣加法的中間結(jié)果便不會丟掉進(jìn)位。

2、負(fù)數(shù)問題

表達(dá)式中如果有一個操作數(shù)是“負(fù)數(shù)”,整個表達(dá)式的運算需要特別考慮,其實處理起來也很簡單。

(1)如果只涉及到加法和減法,負(fù)數(shù)與表達(dá)式中最大操作數(shù)的位寬必須保持一致,如下處理:

reg [8:0] a = -128;
reg [9:0] b = 512;
reg [9:0] c;
reg [10:0] d;
?
assign c = {a[8], a} + b;
assign d = {{2{a[8]}}, a} - {a[9], a}};

(2)如果涉及乘法,則將負(fù)數(shù)轉(zhuǎn)換為絕對值與符號位。

reg [8:0] a = -128;
reg [9:0] b = 512;
reg [17:0] c_abs;
reg [18:0] c;
reg a_sign;
reg [7:0] a_abs;
?
assign a_sign = a[8];
assign a_abs = a[8] ? (~a[7:0] + 1'b1) : a[7:0];
assign c_abs = a_abs*b; 
assign c = a_sign ? (~{1'b0, c_abs} + 1'b1') : {1'b0, c_abs};

本文將不斷定期更新中,關(guān)注,收藏,不走丟哦

有任何問題,都可以在評論區(qū)和我交流哦

本文由FPGA入門到精通原創(chuàng),公眾號為“FPGA入門到精通”,github開源代碼:“FPGA知識庫

您的支持是我持續(xù)創(chuàng)作的最大動力!如果本文對您有幫助,還請多多點贊、評論和收藏。文章來源地址http://www.zghlxwxcb.cn/news/detail-475025.html

到了這里,關(guān)于Verilog常用運算符及表達(dá)式的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 運算符、表達(dá)式和內(nèi)置對象

    運算符、表達(dá)式和內(nèi)置對象

    一、實驗?zāi)康?1.會使用IDLE編輯器編寫簡單數(shù)據(jù)類型; 2.掌握常量、變量的表示方式和簡單操作; 3.掌握Python語言中基本的輸入和輸出方法; 4.掌握Python語言的各種運算符以及這些運算符的表達(dá)式; 5.掌握字符串類型的格式化方法; 6.能綜合應(yīng)用所學(xué)基礎(chǔ)知識編寫一些基本的程

    2024年02月07日
    瀏覽(32)
  • 3.3 運算符和表達(dá)式

    3.3 運算符和表達(dá)式

    幾乎每一個程序都需要進(jìn)行運算,對數(shù)據(jù)進(jìn)行加工處理,否則程序就沒有意義了。要進(jìn)行運算,就需規(guī)定可以使用的運算符。C語言的運算符范圍很寬,把除了控制語句和輸入輸出以外幾乎所有的基本操作都作為運算符處理,例如將賦值符“=”作為賦值運算符、方括號作為下

    2024年02月11日
    瀏覽(28)
  • JS基礎(chǔ)-表達(dá)式和運算符

    表達(dá)式 :是由操作數(shù)和運算符(可選)構(gòu)成的并產(chǎn)生運算結(jié)果的語法結(jié)構(gòu)。例如:3+5 運算符 :進(jìn)行計算或者邏輯運算的符號,比如表達(dá)式中的 + 號 表達(dá)式分類:算術(shù)、關(guān)系、邏輯、賦值、組合 以下符號都是算數(shù)運算符,運算符的就是運算 意義 運算符 加 + 減 - 乘

    2024年02月09日
    瀏覽(28)
  • C++的運算符與表達(dá)式

    運算符是一種告訴編譯器執(zhí)行特定的數(shù)學(xué)或邏輯操作的符號。C++內(nèi)置了豐富的運算符,并且提供了以下類型的運算符: 算數(shù)運算符 關(guān)系運算符 邏輯運算符 位運算符 賦值運算符 雜項運算符 在程序中,運算符是用來操作數(shù)據(jù)的,因此這些數(shù)據(jù)也被稱為操作數(shù),使用運算符將操

    2024年02月06日
    瀏覽(19)
  • (77)TCL腳本命令【運算符(expr運算表達(dá)式)】

    1.1 TCL簡介 1.2?TCL的起源與發(fā)展 1.3?TCL語言與庫介紹 1.4?TCL運行環(huán)境 1.5 TCL腳本命令【運算符(expr運算表達(dá)式)】 1.6 結(jié)束語 Tcl 語言的全稱 Tool Command Language,即工具命令語言。這種需要在 EDA 工具中使用的相當(dāng)之多,或者說幾乎每個 EDA 工具都支持 Tcl 語言。所以對于 IC 專業(yè)的

    2024年02月16日
    瀏覽(34)
  • 三、C#—變量,表達(dá)式,運算符(3)

    三、C#—變量,表達(dá)式,運算符(3)

    變量名能不能用漢字? 全局變量 局部變量 錯誤1 錯誤2 錯誤3 2.2.1 值類型直接存儲值 例如: 2.2.2 簡單類型 2.2.3 整數(shù)類型 例如: 2.2.4 浮點類型 2.2.5 decimal 類型 注意: 定義decimal變量時的問題 2.2.6 bool類型 2.3.1 引用類型存儲對值得引用 2.3.2 Object 類 不區(qū)分大小寫得限制 2.3.3

    2024年02月09日
    瀏覽(33)
  • C++學(xué)習(xí)之運算符與表達(dá)式

    基本的算數(shù)運算有加法、減法、乘法、除法和取模(求余數(shù)),對應(yīng)的算數(shù)運算符分別為:+、-、*、/、%。至于用法,大家應(yīng)該耳熟能詳,這里不再過多贅述。 自增與自減運算符 運算符 說明 ++ 自增運算符,將數(shù)值增加一 - - 自減運算符,將數(shù)值減少一 該運算符主要有前置和

    2024年02月09日
    瀏覽(26)
  • 【python數(shù)據(jù)分析】運算符與表達(dá)式

    【python數(shù)據(jù)分析】運算符與表達(dá)式

    ??? 哈嘍大家好,本次是python數(shù)據(jù)分析、挖掘與可視化專欄第三期 ?本期內(nèi)容:運算符與表達(dá)式 ??系列專欄:Python數(shù)據(jù)分析、挖掘與可視化 ??保持開心,拒絕拖延,你想要的都會有,加油加油! 本期內(nèi)容為python的運算符與表達(dá)式~ 參考書籍:《Python數(shù)據(jù)分析、挖掘與可視

    2024年02月03日
    瀏覽(25)
  • Java-01變量、運算符、表達(dá)式、輸入與輸出

    tip:[start]編程是一種控制計算機的方式,和我們平時雙擊打開文件、關(guān)機、重啟沒有任何區(qū)別——閆學(xué)燦tip:[end] 內(nèi)置數(shù)據(jù)類型: 類型 字節(jié)數(shù) 舉例 byte整數(shù) 1 123 short整數(shù) 2 12345 int整數(shù) 4 123456789 long整數(shù) 8 1234567891011L float浮點數(shù) 4 1.2F double浮點數(shù) 8 1.2, 1.2D boolean 1 true or false char字符

    2024年02月05日
    瀏覽(22)
  • C#中使用 => 運算符的 switch 表達(dá)式

    目錄 一、關(guān)于switch 語句 1.switch 語句及語法結(jié)構(gòu) 2.switch 語句的一些重要注意事項 3.通常情況下的示例 1.示例1 2.示例2? 二、使用 = 運算符的 switch 表達(dá)式 1.關(guān)于switch表達(dá)式 2.示例1 3.示例2 ????????C# 中的 switch 語句是一種控制結(jié)構(gòu),允許您將一個表達(dá)式或值與多個值進(jìn)行比

    2024年02月20日
    瀏覽(29)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包