練習一
有符號數據與無符號數據對比
代碼:
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
仿真結果:
相信各位小伙伴,都能理解該仿真結果的產生,但是可能有的小伙伴會有疑問,為什么signed_vector的-128結果中間有很多空格?你真的仔細,先為你豎起大拇指,接下來我們就講解一下為什么輸出結果會是這樣。
這里是解釋
首先,在開始階段,聲明變量logic_vector為8位,bit_vector為8位,signed_vector沒有明確給出具體位寬,默認32位。是不是看到區(qū)別了,別激動,接著往下看,8位二進制數轉換位十進制數最大值為2^8-1=255,位寬為3,同樣道理,32位二進制數轉換位十進制數最大值為2^32-1=42_6496_7295,位寬為10,理解了這個接下來就是重點了哦!!!在使用到display時,我們經常需要考慮到顯示數據的對齊方式,一般會在%和指定基數之間通過指定域寬來實現顯示數據的對齊,格式一般為:%(域寬值)(進制)
域寬值:即為顯示數據的個數;
進制:可以是二進制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
所以顯示結果 logic_vector=128;bit_vector=128;signed_vector= -128(中間空7個位寬);如果想實現signed_vector= -128,可以修改代碼:$display("signed_vector=%0d", signed_vector);%0表示按照實際位寬進行解釋。
練習二
有符號數據與無符號數據轉換
代碼:
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
仿真結果:
練習三
數據截取
代碼:
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
仿真結果:
練習四
隊列的基本用法
代碼:
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
仿真結果:
審核編輯:劉清
-
二進制
+關注
關注
2文章
796瀏覽量
41757 -
仿真器
+關注
關注
14文章
1019瀏覽量
83937 -
十進制
+關注
關注
0文章
67瀏覽量
13283
原文標題:IC學霸筆記 | SV基本語法練習
文章出處:【微信號:IC修真院,微信公眾號:IC修真院】歡迎添加關注!文章轉載請注明出處。
發(fā)布評論請先 登錄
相關推薦
c++之vector容器
![c++之<b class='flag-5'>vector</b>容器](https://file1.elecfans.com/web2/M00/8C/B0/wKgZomSv2dyANGmgAALIlQzu9cY116.png)
字符串的列是由若干個空格隔開的,怎么讀取成數組?
vector用法總結(轉載)
Agilent Vector Signal Analysis
空格的ascii碼,空格鍵的ascii碼是多少
![<b class='flag-5'>空格</b>的ascii碼,<b class='flag-5'>空格</b>鍵的ascii碼是多少](https://file1.elecfans.com//web2/M00/A5/13/wKgZomUMNtSAAFBpAAA6cnybYQM634.gif)
Vector CANoe入門教程之基礎操作的詳細說明
![<b class='flag-5'>Vector</b> CANoe入門教程之基礎操作的詳細說明](https://file.elecfans.com/web1/M00/8F/00/pIYBAFy4HNqAVChIAAJa56_SubU326.png)
C++中vector的定義與初始化
![C++中<b class='flag-5'>vector</b>的定義與初始化](https://file.elecfans.com/web1/M00/DE/72/pIYBAGAZEV2AJhYCAANtGQXs478055.png)
評論