欧美性猛交xxxx免费看_牛牛在线视频国产免费_天堂草原电视剧在线观看免费_国产粉嫩高清在线观看_国产欧美日本亚洲精品一5区

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

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

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

Verilog表達(dá)式的位寬確定規(guī)則

ZYNQ ? 來(lái)源:ZYNQ ? 2024-10-22 15:41 ? 次閱讀

一般規(guī)則

很多時(shí)候,Verilog中表達(dá)式的位寬都是被隱式確定的,即使你自己設(shè)計(jì)了位寬,它也是根據(jù)規(guī)則先確定位寬后,再擴(kuò)展到你的設(shè)計(jì)位寬,這常常會(huì)導(dǎo)致結(jié)果產(chǎn)生意想不到的錯(cuò)誤。比如:

`timescale1ns/1ns
moduletb_test();

reg[3:0]a,b;
reg[1:0]c1,c2;

initialbegin
a=4'b0111;
b=4'b1111;
c1=a&b;
c2=a&&b;
end

endmodule

結(jié)果是這樣的:

2d027082-8f8a-11ef-a511-92fbcf53809c.png

a & b的結(jié)果本來(lái)應(yīng)該是4‘b0111 ,但是c1只有2位,所以高位被截?cái)?,?dǎo)致c1為2’b11;而a && b 的結(jié)果本來(lái)是1位的1’b1,但是c2有2位,所以會(huì)在高位補(bǔ)0,導(dǎo)致c2為2’b01。

類(lèi)似的情況還有很多,為了減少設(shè)計(jì)出錯(cuò)的可能性,有必要探究一下表達(dá)式的位寬確定規(guī)則。

Verilog語(yǔ)法規(guī)定了如下的確定表達(dá)式位寬的規(guī)則:

表達(dá)式的位寬由表達(dá)式中的操作數(shù)(operands)或表達(dá)式所處的上下文(context)決定。

自決定表達(dá)式(self-determined expression)就是表達(dá)式中所有操作數(shù)的位寬完全由自己決定。

上下文決定表達(dá)式(context-determined expression)就是表達(dá)式中所有操作數(shù)的位寬由整個(gè)表達(dá)式上下文環(huán)境中最大的位寬決定。

自決定表達(dá)式

這一類(lèi)表達(dá)式的位寬都是根據(jù)表達(dá)式自身的位寬和運(yùn)算結(jié)果來(lái)決定的。具體規(guī)則如下:

2d19e578-8f8a-11ef-a511-92fbcf53809c.png

1、無(wú)位寬常數(shù)

這種情況它的位寬等同于整數(shù)integer,在大多數(shù)編譯器中,integer的默認(rèn)位寬都為32位。例如modelsim環(huán)境下的測(cè)試:

`timescale1ns/1ns
moduletb_test();

initialbegin
$display("answer=%b",(1));//以2進(jìn)制形式打印
end

endmodule

打印結(jié)果是32位寬的 “1”:

answer = 00000000000000000000000000000001

2、給定位寬常數(shù)

沒(méi)什么好說(shuō)的,位寬就是給定的這個(gè)數(shù),比如 4‘d1的位寬就是4。例如:

//以2進(jìn)制形式打印`timescale1ns/1ns
moduletb_test();

reg[3:0]a;

initialbegin
a=4'd1;
$display("answer=%b",a);//以2進(jìn)制形式打印
end

endmodule

打印結(jié)果:

answer = 0001

3、運(yùn)算(1)

i 和 j 做以下運(yùn)算:+ - * / % & | ^ ^~ ~^ 時(shí),位寬等于 i 和 j 中位寬較大者的位寬。很好理解,這些運(yùn)算就是常見(jiàn)的 加減乘除取模 與或異或同或 運(yùn)算。例如4bits數(shù)和5bits數(shù)相加:

`timescale1ns/1ns
moduletb_test();

reg[3:0]a;
reg[4:0]b;

initialbegin
a=4'd1;
b=5'd1;
$display("answer=%b",(a+b));
end

endmodule

打印結(jié)果是5bits:

answer = 00010

4、運(yùn)算(2)

對(duì) i 做以下運(yùn)算:+ - ~ 時(shí),位寬等于它本身。也很好理解,就是正負(fù)表達(dá)和取反,所以位寬肯定不會(huì)改變。例如:

`timescale1ns/1ns
moduletb_test();

reg[3:0]a;

initialbegin
a=4'b1001;
$display("answer=%b",(~a));//取反
end

endmodule

打印結(jié)果仍是4bits:

answer = 0110

5、比較

二個(gè)數(shù)的比較結(jié)果只有 是 和 不是,所以位寬只需要1位,例如:=== !== == != > >= < <=。例如:

`timescale1ns/1ns
moduletb_test();

reg[3:0]a,b;

initialbegin
a=4'd5;
b=4'd3;
$display("answer=%b",(a>b));
end

endmodule

打印結(jié)果是1bit:

answer = 1

6、邏輯與、邏輯或

邏輯與&& 和 邏輯或 || 的結(jié)果也只有1bit。

`timescale1ns/1ns
moduletb_test();

reg[3:0]a,b;

initialbegin
a=4'd5;
b=4'd3;
$display("answer=%b",(a&&b));
end

endmodule

打印結(jié)果是1bit:

answer = 1

7、規(guī)約運(yùn)算(Reduction)

下面這些規(guī)約運(yùn)算的結(jié)果只有1位:& ~& | ~| ^ ~^ ^~ !。規(guī)約運(yùn)算就是對(duì)數(shù)據(jù)本身的所有位做同樣的對(duì)應(yīng)的運(yùn)算,例如規(guī)約與(該數(shù)的所有位相與):

`timescale1ns/1ns
moduletb_test();

reg[3:0]a,b;

initialbegin
a=4'b1101;
b=&a;//1&1&0&1
$display("answer=%b",(b));
end

endmodule

打印結(jié)果是1bit:

answer = 1

8、移位和乘方

移位和乘方運(yùn)算(>> << ** >>> <<<)的結(jié)果位寬是該數(shù)本身位寬。例如移位:

`timescale1ns/1ns
moduletb_test();

reg[3:0]a;

initialbegin
a=4'b1011;
$display("answer=%b",(a>>1));
end

endmodule

打印結(jié)果是4bits:

answer = 0101

乘方運(yùn)算的結(jié)果有可能會(huì)溢出,例如:

`timescale1ns/1ns
moduletb_test();

reg[3:0]a,b;

initialbegin
a=4'd3;
b=4'd3;
$display("answer=%b",(a**b));
end

endmodule

打印結(jié)果是4bits:

answer = 1011

3**3的結(jié)果原本是27,即1_1011,高位被截?cái)嗪?,成?bits的1011。

9、條件表達(dá)式

條件表達(dá)式(i ? j : k)的位寬等于 j 和 k 中的位寬較大者。例如:

`timescale1ns/1ns
moduletb_test();

reg[3:0]a;
reg[5:0]b;
regc;

initialbegin
c=1;
a=4'b1011;
$display("answer=%b",(c?a:b));
end

endmodule

打印結(jié)果是6bits:

answer = 001011

盡管c為真,所以該式的結(jié)果是a,但是位寬卻等于更寬的b,所以結(jié)果的高位會(huì)補(bǔ)2個(gè)0,擴(kuò)展到6bits。

10、拼接

第一種拼接:{i,…,j},位寬為二者之和。例如:

`timescale1ns/1ns
moduletb_test();

reg[3:0]a;
reg[5:0]b;

initialbegin
a=4'b1011;
b=6'b001011;
$display("answer=%b",({a,b}));
end

endmodule

打印結(jié)果是4 + 6 = 10bits:

answer = 1011001011

第二種拼接:{i{j,…,k}},位寬為二者之和與系數(shù)的乘積。例如:

`timescale1ns/1ns
moduletb_test();

reg[3:0]a;
reg[5:0]b;

initialbegin
a=4'b1011;
b=6'b001011;
$display("answer=%b",({2{a,b}}));
end

endmodule

打印結(jié)果是2*(4 + 6) = 20bits:

answer = 10110010111011001011

上下文決定表達(dá)式

上下文決定表達(dá)式其實(shí)就是各種自決定表達(dá)式的集合,所以需要視具體情況而具體分析。看一個(gè)例子:

`timescale1ns/1ns
moduletb_test();

reg[3:0]a;
reg[5:0]b;
reg[15:0]c;

initialbegin
a=4'hF;//15
b=6'hA;//10

$display("a*b=%b",a*b);//10*15

c={a**b};//15^10
$display("a**b=%b",c);

c=a**b;//15^10
$display("c=%b",c);
end

endmodule

打印結(jié)果:

a*b=010110

a**b=0000000000000001

c=1010110001100001

a*b原本是15×10=150,即1001_0110,但是結(jié)果的位寬是a、b中的較大位寬(6bits),所以被結(jié)果截?cái)嗟?01_0110;

a**b原本是15^10=576,650,390,625,即1000011001000011000010101010110001100001,但是乘法的結(jié)果位寬是a的位寬(4bits),所以結(jié)果被截?cái)嗟?0001;然后和 0 做拼接,相當(dāng)與位寬沒(méi)變,所以結(jié)果仍是0001,最后賦值給c,c的位寬為16,所以需要在高位補(bǔ)0,最終結(jié)果為0000000000000001

第三個(gè)和第二個(gè)的區(qū)別在于沒(méi)有拼接運(yùn)算符,a**b的位寬結(jié)果取決于上下文環(huán)境,即c的位寬。所以在計(jì)算時(shí),a和b都會(huì)被先拓展到16位,然后再計(jì)算結(jié)果。

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

    關(guān)注

    28

    文章

    1352

    瀏覽量

    110443
  • 運(yùn)算
    +關(guān)注

    關(guān)注

    0

    文章

    132

    瀏覽量

    25863
  • 語(yǔ)法
    +關(guān)注

    關(guān)注

    0

    文章

    44

    瀏覽量

    9869

原文標(biāo)題:如何確定Verilog表達(dá)式的位寬

文章出處:【微信號(hào):ZYNQ,微信公眾號(hào):ZYNQ】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    什么是正則表達(dá)式?正則表達(dá)式如何工作?哪些語(yǔ)法規(guī)則適用正則表達(dá)式?

    正則表達(dá)式又稱(chēng)規(guī)則表達(dá)式(Regular Expression,在代碼中常簡(jiǎn)寫(xiě)為 regex、regexp 或 RE),是一種用于匹配、查找、替換文本的強(qiáng)大工具。它能夠以特定的模式匹配字符串,從而
    的頭像 發(fā)表于 11-03 14:41 ?4047次閱讀
    什么是正則<b class='flag-5'>表達(dá)式</b>?正則<b class='flag-5'>表達(dá)式</b>如何工作?哪些語(yǔ)法<b class='flag-5'>規(guī)則</b>適用正則<b class='flag-5'>表達(dá)式</b>?

    GVIM正則表達(dá)式介紹和使用示例

    20世紀(jì)50年代,一名叫Stephen Cole Kleene的美國(guó)數(shù)學(xué)家發(fā)表了規(guī)則的語(yǔ)言(regular language)的定義。規(guī)則表達(dá)式就是用來(lái)描述
    的頭像 發(fā)表于 12-18 15:09 ?1418次閱讀
    GVIM正則<b class='flag-5'>表達(dá)式</b>介紹和使用示例

    MATLAB符號(hào)表達(dá)式

    符號(hào)表達(dá)式是代表數(shù)字、函數(shù)、算子和變量的MATLAB字符串,或字符串?dāng)?shù)組。不要求變量有預(yù)先確定的值,符號(hào)方程式是含有等號(hào)的符號(hào)表達(dá)式。符號(hào)算術(shù)是使用已知的規(guī)則和給定符號(hào)恒等式求解這些符
    發(fā)表于 09-22 15:45

    如何創(chuàng)建正則的表達(dá)式?

    正則表達(dá)式:用于匹配規(guī)律規(guī)則表達(dá)式,正則表達(dá)式最初是科學(xué)家對(duì)人類(lèi)神經(jīng)系統(tǒng)的工作原理的早期研究,現(xiàn)在在編程語(yǔ)言中有廣泛的應(yīng)用,經(jīng)常用于表單校驗(yàn),高級(jí)搜索等。
    發(fā)表于 10-27 15:49

    正則表達(dá)式以及實(shí)用的匹配規(guī)則概述

    地查閱正則表達(dá)式的匹配規(guī)則。不過(guò),實(shí)際經(jīng)驗(yàn)告訴我,多用了幾次之后,常用的匹配規(guī)則也就都記住了。03 常用關(guān)系特性從CheatSheet可以直接看到正則表達(dá)式最基礎(chǔ)的匹配
    發(fā)表于 09-16 14:23

    Verilog HDL硬件描述語(yǔ)言_表達(dá)式

    本章講述在Verilog HDL中編寫(xiě)表達(dá)式的基礎(chǔ)。表達(dá)式由操作數(shù)和操作符組成。表達(dá)式可以在出現(xiàn)數(shù)值的任何地方使用。verilog相關(guān)教程材
    發(fā)表于 04-25 16:09 ?19次下載

    Verilog HDL中編寫(xiě)表達(dá)式的基礎(chǔ)講述

    本章講述在Verilog HDL中編寫(xiě)表達(dá)式的基礎(chǔ)。 表達(dá)式由操作數(shù)和操作符組成。表達(dá)式可以在出現(xiàn)數(shù)值的任何地方使用。 4.1 操作數(shù) 操作數(shù)可以是以下類(lèi)型中的一種: 1) 常數(shù) 2)
    的頭像 發(fā)表于 03-05 15:20 ?2869次閱讀

    Python正則表達(dá)式指南

    本文介紹了Python對(duì)于正則表達(dá)式的支持,包括正則表達(dá)式基礎(chǔ)以及Python正則表達(dá)式標(biāo)準(zhǔn)庫(kù)的完整介紹及使用示例。本文的內(nèi)容不包括如何編寫(xiě)高效的正則表達(dá)式、如何優(yōu)化正則
    發(fā)表于 03-26 09:13 ?10次下載
    Python正則<b class='flag-5'>表達(dá)式</b>指南

    C語(yǔ)言如何使用正則表達(dá)式

    C語(yǔ)言的正則表達(dá)式規(guī)則,特此跟大家分享。
    的頭像 發(fā)表于 03-16 08:41 ?5023次閱讀

    Lambda表達(dá)式詳解

    C++11中的Lambda表達(dá)式用于 **定義并創(chuàng)建匿名的函數(shù)對(duì)象** ,以簡(jiǎn)化編程工作。下面看一下Lambda表達(dá)式的基本構(gòu)成。
    的頭像 發(fā)表于 02-09 11:28 ?1245次閱讀

    運(yùn)算符/表達(dá)式規(guī)則

    運(yùn)算符對(duì)操作數(shù)執(zhí)行操作。大多數(shù)運(yùn)算符都有兩個(gè)操作數(shù)。例如,在運(yùn)算a+b中,+(加法)運(yùn)算的操作數(shù)是a和b。每個(gè)操作數(shù)都被稱(chēng)為表達(dá)式表達(dá)式可以是文字值、變量、網(wǎng)絡(luò);函數(shù)調(diào)用的返回,或另一個(gè)操作的結(jié)果。表達(dá)式有許多影響操作執(zhí)行方式
    的頭像 發(fā)表于 02-09 15:37 ?1069次閱讀
    運(yùn)算符/<b class='flag-5'>表達(dá)式</b><b class='flag-5'>規(guī)則</b>

    C語(yǔ)言的表達(dá)式

    在C語(yǔ)言中,表達(dá)式是由操作符和操作數(shù)組成。表達(dá)式可以由一個(gè)或者多個(gè)操作數(shù)組成,不同的操作符與操作數(shù)組成不同的表達(dá)式,因此,表達(dá)式才是C語(yǔ)言的基本。
    的頭像 發(fā)表于 02-21 15:09 ?1447次閱讀
    C語(yǔ)言的<b class='flag-5'>表達(dá)式</b>

    邏輯運(yùn)算符與表達(dá)式

    邏輯運(yùn)算符與邏輯表達(dá)式可以實(shí)現(xiàn)的編輯,比如的清零、設(shè)置、取反和取補(bǔ)等操作。使用邏輯運(yùn)算
    的頭像 發(fā)表于 02-21 15:22 ?1316次閱讀
    <b class='flag-5'>位</b>邏輯運(yùn)算符與<b class='flag-5'>表達(dá)式</b>

    Linux入門(mén)之正則表達(dá)式

    一些約定好的匹配規(guī)則,但由于規(guī)則較多,可能比較容易忘記。 本文會(huì)先整理出所有的正則表達(dá)式以及其含義,接下來(lái)會(huì)利用grep命令,詳細(xì)介紹每種正則表達(dá)式的使用方式,并給出案例。
    的頭像 發(fā)表于 05-12 15:31 ?945次閱讀
    Linux入門(mén)之正則<b class='flag-5'>表達(dá)式</b>

    一文詳解Verilog表達(dá)式

    表達(dá)式由操作符和操作數(shù)構(gòu)成,其目的是根據(jù)操作符的意義得到一個(gè)計(jì)算結(jié)果。表達(dá)式可以在出現(xiàn)數(shù)值的任何地方使用。
    的頭像 發(fā)表于 05-29 16:23 ?2914次閱讀
    一文詳解<b class='flag-5'>Verilog</b><b class='flag-5'>表達(dá)式</b>