Verilog重点解析(1)

学习摘自数字芯片实验室

Verilog运算符==,===之间有什么区别?

“= =”逻辑相等运算符用于建模硬件,不比较高阻抗或不定值。
如果“==”运算符的操作数包含X或Z,那么结果是不定值,是一个“X”。 例如,

a = 2’b1x ;
b = 2’b1x ;
 
if(a == b)
        $display(“reachedif”) ;
else
        $display(“reachedelse”) ;

由于至少有一个操作数包含X,所以结果是X,在这种情况下,显示消息“reached else”,尽管看起来a和b似乎相等。

“= = =”运算符为全等运算,它会比较高阻抗和不定值。例如,

a = 2’b1x ;
b = 2’b1x ;
if(a ===b)
        $display(“reachedif”);
else
        $display(“reachedelse”);

在上面的代码,显示“reached if”。如果“X”用“Z”替代,同样显示“reached if”。

Verilog“<<,>>”和“<<<,>>>”有什么区别?

“<<,>>” 是逻辑移位运算符,“<<<,>>>”是算术移位运算符
逻辑左移(<<),算术左移(<<<)和逻辑右移(>>)运算符,腾出的位用0填充。
在算术右移运算符(>>>)中, 如果左操作数是无符号数,则腾出的位用0填充;如果是有符号数,则腾出的位用最高位填充。
以下示例:

module test;
        reg[7:0] tmp1 ,tmp2 ; //default unsigned
        regsigned [7:0] tmp3 ,tmp4 ; //signed
        initialbegin
        tmp1= 8’b0000_1100 ;
        tmp2= tmp1 << 4 ; //logical unsigned shift left
        $display(“tmp2= %b”,tmp2) ; //tmp2 = 1100_0000
 
        //arithmeticunsigned shift left
tmp2 <= tmp1<<< 4 ;
$display(“tmp2 =%b”,tmp2) ; //tmp2 = 1100_0000 ;
 
tmp1 = 8’b1000_1100;
 
//logical unsignedshift right
tmp2 = tmp1>>> 2 ;
$display(“tmp2 =%b”,tmp2 ) ; //tmp2 = 0010_0011
 
tmp3= 8’b1000_1100;
 
//arithmetic signedshift right
tmp4 = tmp3>>> 2 ;
$display(“tmp4 =%b”,tmp4 ) ; //tmp4 = 1110_0011
 
//Note that themsb “1” got filled in all
//vacated bit’s
end
endmodule //test
发布了32 篇原创文章 · 获赞 2 · 访问量 1511

猜你喜欢

转载自blog.csdn.net/qq_36248682/article/details/105333409
今日推荐