Verilog 不同長度運算元運算

2021-09-26 00:05:06 字數 1779 閱讀 3748

原文:

在verilog中,乙個簡單的的運算 "f <= d + e;" ,但是當d,e,f的長度不同時,verilog是如何綜合實現的呢?

為了實驗,d,e採用3bit長度,f的長度根據不同的實驗場景重新確定。「+」、「-」、「>>」這三種運算應該是都符合同一種規則,下面實驗更多的是利用「>>」操作來驗證這種規則。

整體**如下:

`timescale 1ns/1ns

module test();

reg[2:0] d = 3'b100;

reg[2:0] e = 3'b100;

reg[3:0] f;

initial begin

//f <= d + e;

//f <= ((d + e) >> 3);

//f <= (2'b00 & 3'b000) + ((d + e)>>3);

//f <= 3'b000 + ((d + e)>>3);

//f <= 4'b0000 + ((d + e)>>3);

f <= (2'b00 & 4'b0000) + ((d + e)>>3);

$strobe("f:%b",f);

#5 $finish; 

endendmodule

實驗一 (d,e,f均為3bit)

step1:(普通"+")

**更改:

同上結果:

f: 000

說明:這個結果是顯而易見的,並沒有得到預期正確的結果

右端 d + e,本身兩個都是3bit,因此運算就是在3bit上進行,結果不會超出3bit

左端 f 也為3bit,結果只取後3bit

step2:(移位情況)

**更改:

f <= ((d + e) >> 3);

結果:f: 000

說明:該結果與上一步結果相符,仍是在3bit上運算,因此右移3位,還是0

step3:(移位情況+額外位操作(3-bit))

**更改:

f <= (2'b00 & 3'b000) + ((d + e)>>3); //或改為 f <= 3'b000 + ((d + e)>>3);

結果:f: 000

說明:並沒有獲得想要的結果

因為這兩種更改,雖然加入了額外的位操作,但是額外的位操作仍在3bit上進行,因此整體仍然在3bit上進行運算

step4:(移位情況+額外位操作(4-bit))

**更改:

f <= (2'b00 & 4'b0000) + ((d + e)>>3); //或改為 f <= 4'b0000 + ((d + e)>>3);

結果:f: 001

說明:獲得了想要的結果

這兩種更改,加入了4-bit的位操作,將右端改為了在4位上的運算

因為 f 還是定義為3bit,所以取後3bit,結果為001

實驗二 (d,e為3bit,f為4bit)

step1:(普通"+")

**更改:

reg[3:0] f;//將f的長度改為4bit f <= d + e;

結果:f: 1000

說明:得到了正確的結果

雖然右端 d + e,本身兩個都是3bit,但因為 f 是4bit,因此運算就是在4bit上進行,獲得正確的結果

step2:(移位情況)

**更改:

f <= ((d + e) >> 3); f <= 3'b000 + ((d + e)>>3); f <= (2'b00 & 4'b0000) + ((d + e)>>3);

結果:f: 0001

說明:

不同長度的字串的大小比較

今天好不容易做個pta上的題,真是太久沒有寫 了,連最基本的字串比較都忘得一乾二淨了,真是丟人.1 只有數字的情況 這就是今天讓我懷疑人生的情況 當兩個純數字的字串比較時,是乙個乙個數字的ascii碼比過去的,一旦發生不相等的情況,便停止未完成的後面的對比,而直接給出結果 除非所有的數字的碼值都樣大...

演算法導論 8 3 排序不同長度的資料項

分類 演算法導論 2012 06 23 15 14 298人閱讀收藏 舉報演算法 delete stringc測試 ie 目錄 a 給定乙個整數陣列,其中不同的整數中包含的數字個數可能不同,但是該陣列中,所有整數中總的數字數為n。說明如何在o n 時間內對該陣列進行排序 b 給定乙個字串陣列,其中不...

演算法導論習題8 3 排序不同長度的資料項

題目 a 給定乙個整數陣列,其中不同的整數中包含的數字個數可能不同,但是該陣列中,所有整數中總的數字數為n。說明如何在o n 時間內對該陣列進行排序 b 給定乙個字串陣列,其中不同的串包含的字元個數可能不同,但所有串中總的字元個數為n。說明如何在o n 時間內對該陣列進行排序 注意此處的順序是指標準...