練習一
有符號數(shù)據(jù)與無符號數(shù)據(jù)對比
代碼:
module vector_transfer();
logic[7:0]logic_vector=8'b1000_0000;
bit [7:0] bit_vector=8'b1000_0000;
byte signed_vector=8'b1000_0000;
initial begin
$display("logic_vector=%d",logic_vector);
$display("bit_vector=%d",bit_vector);
$display("signed_vector=%d",signed_vector);
end
endmodule
仿真結(jié)果:

相信各位小伙伴,都能理解該仿真結(jié)果的產(chǎn)生,但是可能有的小伙伴會有疑問,為什么signed_vector的-128結(jié)果中間有很多空格?你真的仔細,先為你豎起大拇指,接下來我們就講解一下為什么輸出結(jié)果會是這樣。
這里是解釋
首先,在開始階段,聲明變量logic_vector為8位,bit_vector為8位,signed_vector沒有明確給出具體位寬,默認32位。是不是看到區(qū)別了,別激動,接著往下看,8位二進制數(shù)轉(zhuǎn)換位十進制數(shù)最大值為2^8-1=255,位寬為3,同樣道理,32位二進制數(shù)轉(zhuǎn)換位十進制數(shù)最大值為2^32-1=42_6496_7295,位寬為10,理解了這個接下來就是重點了哦!??!在使用到display時,我們經(jīng)常需要考慮到顯示數(shù)據(jù)的對齊方式,一般會在%和指定基數(shù)之間通過指定域?qū)拋韺崿F(xiàn)顯示數(shù)據(jù)的對齊,格式一般為:%(域?qū)捴担?進制)
域?qū)捴担?/strong>即為顯示數(shù)據(jù)的個數(shù);
進制:可以是二進制b,十進制d,八進制o,十六進制h;
%(進制)默認為最大位寬
理解了這些,我們接著分析上邊的代碼:
$display("logic_vector=%d",logic_vector) 顯示的logic_vector默認為最大位寬3
$display("bit_vector=%d",bit_vector) 顯示的logic_vector默認為最大位寬3
$display("signed_vector=%d",signed_vector) 顯示的logic_vector默認為最大位寬10
所以顯示結(jié)果 logic_vector=128;bit_vector=128;signed_vector= -128(中間空7個位寬);如果想實現(xiàn)signed_vector= -128,可以修改代碼:$display("signed_vector=%0d", signed_vector);%0表示按照實際位寬進行解釋。

練習二
有符號數(shù)據(jù)與無符號數(shù)據(jù)轉(zhuǎn)換
代碼:
module vector_transfer1();
byte signed_vector=8'b1000_0000;
bit[8:0]result_vector;
initial begin
result_vector=signed_vector;
$display("@1 result_vector='h%x",result_vector);
result_vector=unsigned'(signed_vector);
$display("@2 result_vector='h%x",result_vector);
end
endmodule
仿真結(jié)果:

練習三
數(shù)據(jù)截取
代碼:
module vector_transfer2();
logic [3:0] x_vector=4'b111x;
bit [2:0] bit_vector;
initial begin
$fsdbDumpfile("vector_transfer2.fsdb");
$fsdbDumpvars;
end
initial begin
$display("@1 x_vector='b%b",x_vector);
bit_vector=x_vector;
$display("@2 bit_vector='b%b",bit_vector);
end
endmodule
仿真結(jié)果:

練習四
隊列的基本用法
代碼:
module queue();
int j=1,
q2[$]={3,4},
q[$]={0,2,5};
initial begin
$fsdbDumpfile("queue.fsdb");
$fsdbDumpvars;
end
initial begin
q.insert(1,j);
$display(q);
q.insert(3,q2[0]);
$display(q);
q.insert(4,q2[1]);
$display(q);
q.delete(1);
$display(q);
q.push_front(6);
$display(q);
j=q.pop_back;
$display(j);;
q.push_back(8);
$display(q);
j=q.pop_front;
$display(j);
foreach(q[i])
$display(q[i]);
q.delete();
end
endmodule
仿真結(jié)果:

審核編輯:劉清
-
二進制
+關注
關注
2文章
809瀏覽量
42824 -
仿真器
+關注
關注
14文章
1049瀏覽量
86820 -
十進制
+關注
關注
0文章
67瀏覽量
13771
原文標題:IC學霸筆記 | SV基本語法練習
文章出處:【微信號:IC修真院,微信公眾號:IC修真院】歡迎添加關注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
c++之vector容器
字符串的列是由若干個空格隔開的,怎么讀取成數(shù)組?
vector用法總結(jié)(轉(zhuǎn)載)
Agilent Vector Signal Analysis
空格的ascii碼,空格鍵的ascii碼是多少
C++中vector的定義與初始化
中間繼電器的原理及用途有哪些
中間繼電器的原理是什么 用途有哪些
python中如何用空格分隔
print輸出如何不帶空格
c語言printf輸出空格間隔
中間繼電器的型號有哪些
Verilog中signed和$signed()的用法

為什么signed_vector的-128結(jié)果中間有很多空格?
評論