2015-02-20 21 views
5

verir:verilog "~" eklenmesi operasyonda operatör aşağıdaki basitleştirilmiş Verilog kodunda istenmeyen sonuç

wire [31:0] depth; 
wire mode_u2 = 1'h0; 

assign depth = 'h80 + (~mode_u2); 

Ben derinliğine bir ekran yapmak ve VCS (2014.12-1)

$display("depth is 0x%2x", depth); 
ile simüle ederseniz

0x7f yerine 0x81 bekleniyor. ~ mode_u2, eksi 1 olarak kabul edildi gibi görünür.

~mode_u2 değerini !mode_u2 olarak değiştirirsem. 0x81 beklendiği gibi olsun. i wire mode = ~mode_u2 yapmak ve daha sonra assign depth = 'h80 + (~mode) yerine 0x80 arasında, ben

0x7e Burada bir şey eksik alırsanız daha ilginç olan şey

mı?

Birisi neden ~+ işleminde bu şekilde davrandığını açıklayabilir mi? Yoksa bu simülasyon ve sentez farklı bir durum mu?

Çok teşekkürler!

Willie

cevap

2

eklenti operatörün işlenen ilavesi yapılmadan önce, sol taraftaki boyutuna (veya bağlama bağlı olarak, iki işlenen maksimum genişliğe) genişletilmesi gerekmektedir.

Bu durumda mode_u2'un 32 bite uzatılması gerekir. Bunun için bir başvuru bulamadık, ancak bit uzantısının ~ işlecinin üzerinde önceliği var gibi görünüyor. Bunun anlamı şudur:

depth = 'h80 + (~mode_u2) = 
     32'h0000_0080 + (~32h0000_0000) = 
     32'h0000_0080 + 32'hffff_ffff = 
     32'h0000_007f 

! operatörün sonucu, ancak tanımı gereği tek bitlik olduğunu ve benim tahminim bit uzantısı iki kat olur ki: mode için Benzer

depth = 'h80 + (!mode_u2) = 
     32'h0000_0080 + (!32'h0000_0000) = 
     32'h0000_0080 + 1'h1 = 
     32'h0000_0080 + 32'h0000_0001 = 
     32'h0000_0081 

:

depth = 'h80 + (~mode) = 
     32'h0000_0080 + (~32'h0000_0001) = 
     32'h0000_0080 + 32'hffff_fffe = 
     32'h0000_007e 
+0

Sanırım doğru yoldasınız, ancak 32 bitlik uzantı 32 32h0000_0000'dür ve bit-bit negatifliği '32'hffff_ffff' dır. – toolic

+0

@toolic: Teşekkürler. Sabit. – Ari

+0

@Ari: Ben de aynı şeyi düşünüyordum, bu sadece olası bir açıklama olmalı. Ancak, bahsetmeye değer bir şey, eğer 0x80 + tüm fs yapıyorsa, o zaman sonuç derinliğinin 33 bitini yazdığım zaman, MSB 1 DEĞİLDİR? ve ayrıca, + (~ modu) yaptığınızda, mod ~ mode_u2 olduğundan, neden ~ 32'h0000_0001, değil ~ 32'hffff_ffff ekliyor? – shakimura