色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Verilog最常用的2種數據類型

冬至子 ? 來源:數字IC與好好生活的兩居室 ? 作者:除夕之夜啊 ? 2023-05-29 16:27 ? 次閱讀

Verilog 最常用的 2 種數據類型就是線網(wire)與寄存器(reg),其余類型可以理解為這兩種數據類型的擴展或輔助。

線網(wire)

wire 類型表示硬件單元之間的物理連線,由其連接的器件輸出端連續驅動。如果沒有驅動元件連接到 wire 型變量,缺省值一般為 “Z”。舉例如下:

wire   interrupt ;
wire   flag1, flag2 ;
wire   gnd = 1'b0 ;

線網型還有其他數據類型,包括 wand,wor,wri,triand,trior,trireg 等。這些數據類型用的頻率不是很高,這里不做介紹。

寄存器(reg)

寄存器(reg)用來表示存儲單元,它會保持數據原有的值,直到被改寫。聲明舉例如下:

reg    clk_temp;
reg    flag1, flag2 ;

例如在 always 塊中,寄存器可能被綜合成邊沿觸發器,在組合邏輯中可能被綜合成 wire 型變量。寄存器不需要驅動源,也不一定需要時鐘信號。在仿真時,寄存器的值可在任意時刻通過賦值操作進行改寫。例如:

reg rstn ;
initial begin
    rstn = 1'b0 ;
    #100 ;
    rstn = 1'b1 ;
end

向量

◆當位寬大于1時,wire 或 reg 即可聲明為向量的形式。例如:

reg [3:0]      counter ;   //聲明4bit位寬的寄存器counter
wire [32-1:0]  gpio_data;  //聲明32bit位寬的線型變量gpio_data
wire [8:2]     addr ;  //聲明7bit位寬的線型變量addr,位寬范圍為8:2
reg [0:31]     data ;  //聲明32bit位寬的寄存器變量data, 最高有效位為0

◆對于上面的向量,我們可以指定某一位或若干相鄰位,作為其他邏輯使用。例如:

wire [9:0]     data_low = data[0:9] ;
addr_temp[3:2] = addr[8:7] + 1'b1 ;

◆Verilog 支持可變的向量域選擇,例如:

reg [31:0]     data1 ;
reg [7:0]      byte1 [3:0];
integer j ;
always@* begin
    for (j=0; j<=3;j=j+1) begin
        byte1[j] = data1[(j+1)*8-1 -: 8]; 
        //把data1[7:0]…data1[31:24]依次賦值
        //給byte1[0][7:0]…byte[3][7:0]
    end
end

◆Verillog 還支持指定 bit 位后固定位寬的向量域選擇訪問。

[bit+: width] : 從起始 bit 位開始遞增,位寬為 width。

[bit-: width] : 從起始 bit 位開始遞減,位寬為 width。

//下面 2 種賦值是等效的

A = data1[31-: 8] ;
A = data1[31:24] ;

//下面 2 種賦值是等效的

B = data1[0+ : 8] ;
B = data1[0:7] ;

◆對信號重新進行組合成新的向量時,需要借助大括號。例如:

wire [31:0]    temp1, temp2 ;
assign temp1 = {byte1[0][7:0], data1[31:8]};  //數據拼接
assign temp2 = {32{1'b0}};  //賦值32位的數值0

整數,實數,時間寄存器變量

整數,實數,時間等數據類型實際也屬于寄存器類型。

◆整數(integer)

整數類型用關鍵字 integer 來聲明。聲明時不用指明位寬,位寬和編譯器有關,一般為32 bit。reg 型變量為無符號數,而 integer 型變量為有符號數。例如:

reg [31:0]      data1 ;
reg [7:0]       byte1 [3:0]; //數組變量,后續介紹
integer j ;  //整型變量,用來輔助生成數字電路
always@* begin
    for (j=0; j<=3;j=j+1) begin
        byte1[j] = data1[(j+1)*8-1 -: 8]; 
        //把data1[7:0]…data1[31:24]依次賦值
        //給byte1[0][7:0]…byte[3][7:0]
       end
end

此例中,integer 信號 j 作為輔助信號,將 data1 的數據依次賦值給數組 byte1。綜合后實際電路里并沒有 j 這個信號,j 只是輔助生成相應的硬件電路。

◆實數(real)

實數用關鍵字 real 來聲明,可用十進制或科學計數法來表示。實數聲明不能帶有范圍,默認值為 0。如果將一個實數賦值給一個整數,則只有實數的整數部分會賦值給整數。例如:

real        data1 ;
integer     temp ;
initial begin
    data1 = 2e3 ;
    data1 = 3.75 ;
end
initial begin
    temp = data1 ; //temp 值的大小為3
end

** ◆時間(time)**

Verilog 使用特殊的時間寄存器 time 型變量,對仿真時間進行保存。其寬度一般為 64 bit,通過調用系統函數 $time 獲取當前仿真時間。例如:

time       current_time ;
initial begin
    #100 ;
    current_time = $time ; //current_time 的大小為100
end

數組

在 Verilog 中允許聲明 reg, wire, integer, time, real 及其向量類型的數組。

數組維數沒有限制。線網數組也可以用于連接實例模塊的端口。數組中的每個元素都可以作為一個標量或者向量,以同樣的方式來使用,形如:<數組名>[<下標>]。對于多維數組來講,用戶需要說明其每一維的索引。例如:

integer          flag [7:0] ; //8個整數組成的數組
reg  [3:0]       counter [3:0] ; //由4個4bit計數器組成的數組
wire [7:0]       addr_bus [3:0] ; //由4個8bit wire型變量組成的數組
wire             data_bit[7:0][5:0] ; //聲明1bit wire型變量的二維數組
reg [31:0]       data_4d[11:0][3:0][3:0][255:0] ; //聲明4維的32bit數據變量數組

下面顯示了對數組元素的賦值操作:

flag [1]   = 32'd0 ; //將flag數組中第二個元素賦值為32bit的0值
counter[3] = 4'hF ;  //將數組counter中第4個元素的值賦值為4bit 十六進制數F,等效于counter[3][3:0] = 4'hF,即可省略寬度;
assign addr_bus[0]        = 8'b0 ; //將數組addr_bus中第一個元素的值賦值為0
assign data_bit[0][1]     = 1b'1;  //將數組data_bit的第1行第2列的元素賦值為1,這里不能省略第二個訪問標號,即 assign data_bit[0] = 1'b1; 是非法的。
data_4d[0][0][0][0][15:0] = 15'd3 ;  //將數組data_4d中標號為[0][0][0][0]的寄存器單元的15~0bit賦值為3

雖然數組與向量的訪問方式在一定程度上類似,但不要將向量和數組混淆。向量是一個單獨的元件,位寬為 n;數組由多個元件組成,其中每個元件的位寬為 n 或 1。它們在結構的定義上就有所區別。

存儲器

存儲器變量就是一種寄存器數組,可用來描述 RAMROM 的行為。例如:

reg               membit[0:255] ;  //256bit的1bit存儲器
reg  [7:0]        mem[0:1023] ;    //1Kbyte存儲器,位寬8bit
mem[511] = 8'b0 ;                  //令第512個8bit的存儲單元值為0

參數

參數用來表示常量,用關鍵字 parameter 聲明,只能賦值一次。例如:

parameter      data_width = 10'd32 ;
parameter      i=1, j=2, k=3 ;
parameter      mem_size = data_width * 10 ;

通過模塊例化的方式,可以更改參數在模塊中的值。此部分以后會介紹。

局部參數用 localparam 來聲明,其作用和用法與 parameter 相同,區別在于它的值不能被改變。所以當參數只在本模塊中調用時,可用 localparam 來聲明。

字符串

字符串保存在 reg 類型的變量中,每個字符占用一個字節(8bit)。因此寄存器變量的寬度應該足夠大,以保證不會溢出。

字符串不能多行書寫,即字符串中不能包含回車符。如果寄存器變量的寬度大于字符串的大小,則使用 0 來填充左邊的空余位;如果寄存器變量的寬度小于字符串大小,則會截去字符串左邊多余的數據。例如,為存儲字符串 “run.runoob.com”, 需要 14*8byte 的存儲單元:

reg [0: 14*8-1]       str ;
initial begin
   str = "run.runoob.com";
end

有一些特殊字符在顯示字符串中有特殊意義,例如換行符,制表符等。如果需要在字符串中顯示這些特殊的字符,則需要在前面加前綴轉義字符 “\\”。

1.jpg

其實,在 SystemVerilog(主要用于 Verilog 仿真的編程語言)語言中,已經可以直接用關鍵字 string 來表示字符串變量類型,這為 Verilog 的仿真帶來了極大的便利。有興趣的學者可以簡單學習下 SystemVerilog。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 寄存器
    +關注

    關注

    31

    文章

    5336

    瀏覽量

    120230
  • ROM
    ROM
    +關注

    關注

    4

    文章

    563

    瀏覽量

    85732
  • RAM
    RAM
    +關注

    關注

    8

    文章

    1368

    瀏覽量

    114641
  • Verilog
    +關注

    關注

    28

    文章

    1351

    瀏覽量

    110074
  • 觸發器
    +關注

    關注

    14

    文章

    2000

    瀏覽量

    61132
收藏 人收藏

    評論

    相關推薦

    Labview各種數據類型

    Labview各種數據類型
    發表于 12-11 11:27

    Python中常用數據類型

    . 字符串在Python中,加了引號的字符都被認為是字符串,其聲明有三方式,分別是:單引號、雙引號和三引號;Python中的字符串有兩種數據類型,分別是str類型和unicode類型
    發表于 04-19 15:14

    【FPGA學習】Verilog HDL 語言的標識符和數據類型有哪些?

    ; //Addr 是 3 位線與。2.寄存器類型有 5 不同的寄存器類型:reg、integer、time、real 和 realtime。寄存器
    發表于 09-19 09:36

    Verilog 變量聲明與數據類型

    Verilog 變量聲明與數據類型二上節介紹了wire,reg數據類型及其用法,并對變量定義中的向量的定義及使用做了說明。本節主要介紹其它幾種類型
    發表于 08-06 09:21

    Verilog 變量聲明與數據類型

    Verilog 變量聲明與數據類型Verilog語法中最基本的數據類型有 線網(wire),寄存器(reg)和整數(integer)三種類型
    發表于 08-10 14:01

    MySQL支持的三種數據類型

    MySQL支持所有標準SQL數字數據類型。這些類型包括整數類型、定點類型、浮點類型和位置類型
    的頭像 發表于 05-03 17:33 ?3452次閱讀
    MySQL支持的三<b class='flag-5'>種數據類型</b>

    type( ) 函數查詢數據類型是什么

    常用的3種數據類型: Python數據類型第一:字符串(str)。 Python數據類型第二
    的頭像 發表于 02-23 14:59 ?2150次閱讀

    什么是數據類型轉換

    常用的3種數據類型:1、Python數據類型第一:字符串(str)。 2、Python數據類型
    的頭像 發表于 02-23 15:21 ?1773次閱讀

    Verilog中的基本數據類型

    本文將討論 verilog常用數據類型,包括對數據表示、線網類型、變量類型和數組,分享一下
    的頭像 發表于 05-12 17:43 ?8946次閱讀
    <b class='flag-5'>Verilog</b>中的基本<b class='flag-5'>數據類型</b>

    細說redis十種數據類型及底層原理

    string 是 Redis 最基本的數據類型,它可以存儲任意類型數據,比如文本、數字、圖片或者序列化的對象。一個 string 類型的鍵最大可以存儲 512 MB 的
    的頭像 發表于 05-15 11:21 ?1876次閱讀
    細說redis十<b class='flag-5'>種數據類型</b>及底層原理

    PostgreSQL中可用的各種數據類型

    PostgreSQL是一功能強大的開源關系型數據庫管理系統,具有廣泛的數據類型支持。在本教程中,我們將介紹PostgreSQL中可用的各種數據類型,包括數值、字符串、幾何、時間、日期
    的頭像 發表于 09-19 14:08 ?4234次閱讀

    Redis的數據類型有哪些

    ,其中HyperLogLog、Bitmap的底層都是 String 數據類型,Geospatial 的底層是 Sorted Set 數據類型。 五常用
    的頭像 發表于 10-09 10:51 ?793次閱讀

    redis的五種數據類型

    Redis是一高性能的內存數據庫,常用于緩存、任務隊列、分布式鎖等場景。它提供了多種數據類型來滿足各種不同的需求,包括字符串(string)、哈希(hash)、列表(list)、集合
    的頭像 發表于 11-16 11:06 ?639次閱讀

    redis的五種數據類型底層數據結構

    Redis是一內存數據存儲系統,支持多種數據結構。這些數據結構不僅可以滿足常見的存儲需求,還能夠通過其底層數據結構提供高效的操作和查詢。以
    的頭像 發表于 11-16 11:18 ?706次閱讀

    oracle的數據類型有哪些

    Oracle數據庫中有許多數據類型可供選擇,每種數據類型都有其各自的特點和適用場景。下面是對Oracle數據庫中最常用
    的頭像 發表于 12-05 16:45 ?2404次閱讀
    主站蜘蛛池模板: 日日摸天天添天天添无码蜜臀| 一个色综合久久| 99久久精品久久久久久清纯| 国产色综合久久无码有码| 欧美亚洲日韩自拍高清中文| 一色屋精品亚洲香蕉网站| 国产成人精品综合在线观看| 欧美14videosex性欧美成人| 一本道色综合手机久久| 国产精品一区二区亚瑟不卡| 欧洲美女高清一级毛片| 最新无码国产在线视频9299| 国产一区二区三区国产精品| 色噜噜视频影院| 99久久免费只有精品| 久久精品观看影院2828| 亚洲AV精品一区二区三区不卡| 纯肉巨黄H爆粗口男男分卷阅读| 美女夫妻内射潮视频| 夜月视频直播免费观看| 国产三级91| 手机看片国产免费| 白银谷在线观看| 欧美s00老人| 999精品免费视频| 久久青青热| 亚洲一区免费在线观看| 国产偷国产偷亚洲高清SWAG| 神马电影我不卡国语版 | 中文字幕蜜臀AV熟女人妻| 果冻传媒免费观看| 午夜A级理论片左线播放| 国产1000部成人免费视频| 人妻兽虐曲| nu77亚洲综合日韩精品| 免费看黄色一级| 2018年免费三级av观看| 老师你奶真大下面水真多| 在线a亚洲视频| 久久深夜视频| 正在播放一区二区|