一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Verilog最常用的2種數(shù)據(jù)類(lèi)型

冬至子 ? 來(lái)源:數(shù)字IC與好好生活的兩居室 ? 作者:除夕之夜啊 ? 2023-05-29 16:27 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

Verilog 最常用的 2 種數(shù)據(jù)類(lèi)型就是線(xiàn)網(wǎng)(wire)與寄存器(reg),其余類(lèi)型可以理解為這兩種數(shù)據(jù)類(lèi)型的擴(kuò)展或輔助。

線(xiàn)網(wǎng)(wire)

wire 類(lèi)型表示硬件單元之間的物理連線(xiàn),由其連接的器件輸出端連續(xù)驅(qū)動(dòng)。如果沒(méi)有驅(qū)動(dòng)元件連接到 wire 型變量,缺省值一般為 “Z”。舉例如下:

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

線(xiàn)網(wǎng)型還有其他數(shù)據(jù)類(lèi)型,包括 wand,wor,wri,triand,trior,trireg 等。這些數(shù)據(jù)類(lèi)型用的頻率不是很高,這里不做介紹。

寄存器(reg)

寄存器(reg)用來(lái)表示存儲(chǔ)單元,它會(huì)保持?jǐn)?shù)據(jù)原有的值,直到被改寫(xiě)。聲明舉例如下:

reg    clk_temp;
reg    flag1, flag2 ;

例如在 always 塊中,寄存器可能被綜合成邊沿觸發(fā)器,在組合邏輯中可能被綜合成 wire 型變量。寄存器不需要驅(qū)動(dòng)源,也不一定需要時(shí)鐘信號(hào)。在仿真時(shí),寄存器的值可在任意時(shí)刻通過(guò)賦值操作進(jìn)行改寫(xiě)。例如:

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

向量

◆當(dāng)位寬大于1時(shí),wire 或 reg 即可聲明為向量的形式。例如:

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

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

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 位后固定位寬的向量域選擇訪(fǎng)問(wèn)。

[bit+: width] : 從起始 bit 位開(kāi)始遞增,位寬為 width。

[bit-: width] : 從起始 bit 位開(kāi)始遞減,位寬為 width。

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

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

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

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

◆對(duì)信號(hào)重新進(jìn)行組合成新的向量時(shí),需要借助大括號(hào)。例如:

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

整數(shù),實(shí)數(shù),時(shí)間寄存器變量

整數(shù),實(shí)數(shù),時(shí)間等數(shù)據(jù)類(lèi)型實(shí)際也屬于寄存器類(lèi)型。

◆整數(shù)(integer)

整數(shù)類(lèi)型用關(guān)鍵字 integer 來(lái)聲明。聲明時(shí)不用指明位寬,位寬和編譯器有關(guān),一般為32 bit。reg 型變量為無(wú)符號(hào)數(shù),而 integer 型變量為有符號(hào)數(shù)。例如:

reg [31:0]      data1 ;
reg [7:0]       byte1 [3:0]; //數(shù)組變量,后續(xù)介紹
integer j ;  //整型變量,用來(lái)輔助生成數(shù)字電路
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 信號(hào) j 作為輔助信號(hào),將 data1 的數(shù)據(jù)依次賦值給數(shù)組 byte1。綜合后實(shí)際電路里并沒(méi)有 j 這個(gè)信號(hào),j 只是輔助生成相應(yīng)的硬件電路。

◆實(shí)數(shù)(real)

實(shí)數(shù)用關(guān)鍵字 real 來(lái)聲明,可用十進(jìn)制或科學(xué)計(jì)數(shù)法來(lái)表示。實(shí)數(shù)聲明不能帶有范圍,默認(rèn)值為 0。如果將一個(gè)實(shí)數(shù)賦值給一個(gè)整數(shù),則只有實(shí)數(shù)的整數(shù)部分會(huì)賦值給整數(shù)。例如:

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

** ◆時(shí)間(time)**

Verilog 使用特殊的時(shí)間寄存器 time 型變量,對(duì)仿真時(shí)間進(jìn)行保存。其寬度一般為 64 bit,通過(guò)調(diào)用系統(tǒng)函數(shù) $time 獲取當(dāng)前仿真時(shí)間。例如:

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

數(shù)組

在 Verilog 中允許聲明 reg, wire, integer, time, real 及其向量類(lèi)型的數(shù)組。

數(shù)組維數(shù)沒(méi)有限制。線(xiàn)網(wǎng)數(shù)組也可以用于連接實(shí)例模塊的端口。數(shù)組中的每個(gè)元素都可以作為一個(gè)標(biāo)量或者向量,以同樣的方式來(lái)使用,形如:<數(shù)組名>[<下標(biāo)>]。對(duì)于多維數(shù)組來(lái)講,用戶(hù)需要說(shuō)明其每一維的索引。例如:

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

下面顯示了對(duì)數(shù)組元素的賦值操作:

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

雖然數(shù)組與向量的訪(fǎng)問(wèn)方式在一定程度上類(lèi)似,但不要將向量和數(shù)組混淆。向量是一個(gè)單獨(dú)的元件,位寬為 n;數(shù)組由多個(gè)元件組成,其中每個(gè)元件的位寬為 n 或 1。它們?cè)诮Y(jié)構(gòu)的定義上就有所區(qū)別。

存儲(chǔ)器

存儲(chǔ)器變量就是一種寄存器數(shù)組,可用來(lái)描述 RAMROM 的行為。例如:

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

參數(shù)

參數(shù)用來(lái)表示常量,用關(guān)鍵字 parameter 聲明,只能賦值一次。例如:

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

通過(guò)模塊例化的方式,可以更改參數(shù)在模塊中的值。此部分以后會(huì)介紹。

局部參數(shù)用 localparam 來(lái)聲明,其作用和用法與 parameter 相同,區(qū)別在于它的值不能被改變。所以當(dāng)參數(shù)只在本模塊中調(diào)用時(shí),可用 localparam 來(lái)聲明。

字符串

字符串保存在 reg 類(lèi)型的變量中,每個(gè)字符占用一個(gè)字節(jié)(8bit)。因此寄存器變量的寬度應(yīng)該足夠大,以保證不會(huì)溢出。

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

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

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

1.jpg

其實(shí),在 SystemVerilog(主要用于 Verilog 仿真的編程語(yǔ)言)語(yǔ)言中,已經(jīng)可以直接用關(guān)鍵字 string 來(lái)表示字符串變量類(lèi)型,這為 Verilog 的仿真帶來(lái)了極大的便利。有興趣的學(xué)者可以簡(jiǎn)單學(xué)習(xí)下 SystemVerilog。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5435

    瀏覽量

    124607
  • ROM
    ROM
    +關(guān)注

    關(guān)注

    4

    文章

    578

    瀏覽量

    87391
  • RAM
    RAM
    +關(guān)注

    關(guān)注

    8

    文章

    1392

    瀏覽量

    117594
  • Verilog
    +關(guān)注

    關(guān)注

    29

    文章

    1367

    瀏覽量

    112321
  • 觸發(fā)器
    +關(guān)注

    關(guān)注

    14

    文章

    2039

    瀏覽量

    62162
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    Labview各種數(shù)據(jù)類(lèi)型

    Labview各種數(shù)據(jù)類(lèi)型
    發(fā)表于 12-11 11:27

    Python中常用數(shù)據(jù)類(lèi)型

    . 字符串在Python中,加了引號(hào)的字符都被認(rèn)為是字符串,其聲明有三方式,分別是:?jiǎn)我?hào)、雙引號(hào)和三引號(hào);Python中的字符串有兩種數(shù)據(jù)類(lèi)型,分別是str類(lèi)型和unicode類(lèi)型
    發(fā)表于 04-19 15:14

    【FPGA學(xué)習(xí)】Verilog HDL 語(yǔ)言的標(biāo)識(shí)符和數(shù)據(jù)類(lèi)型有哪些?

    ; //Addr 是 3 位線(xiàn)與。2.寄存器類(lèi)型有 5 不同的寄存器類(lèi)型:reg、integer、time、real 和 realtime。寄存器
    發(fā)表于 09-19 09:36

    Verilog 變量聲明與數(shù)據(jù)類(lèi)型

    Verilog 變量聲明與數(shù)據(jù)類(lèi)型二上節(jié)介紹了wire,reg數(shù)據(jù)類(lèi)型及其用法,并對(duì)變量定義中的向量的定義及使用做了說(shuō)明。本節(jié)主要介紹其它幾種類(lèi)型。
    發(fā)表于 08-06 09:21

    Verilog 變量聲明與數(shù)據(jù)類(lèi)型

    Verilog 變量聲明與數(shù)據(jù)類(lèi)型Verilog語(yǔ)法中最基本的數(shù)據(jù)類(lèi)型有 線(xiàn)網(wǎng)(wire),寄存器(reg)和整數(shù)(integer)三種類(lèi)型
    發(fā)表于 08-10 14:01

    MySQL支持的三種數(shù)據(jù)類(lèi)型

    MySQL支持所有標(biāo)準(zhǔn)SQL數(shù)字數(shù)據(jù)類(lèi)型。這些類(lèi)型包括整數(shù)類(lèi)型、定點(diǎn)類(lèi)型、浮點(diǎn)類(lèi)型和位置類(lèi)型
    的頭像 發(fā)表于 05-03 17:33 ?3648次閱讀
    MySQL支持的三<b class='flag-5'>種數(shù)據(jù)類(lèi)型</b>

    type( ) 函數(shù)查詢(xún)數(shù)據(jù)類(lèi)型是什么

    常用的3種數(shù)據(jù)類(lèi)型: Python數(shù)據(jù)類(lèi)型第一:字符串(str)。 Python數(shù)據(jù)類(lèi)型第二
    的頭像 發(fā)表于 02-23 14:59 ?2747次閱讀

    什么是數(shù)據(jù)類(lèi)型轉(zhuǎn)換

    常用的3種數(shù)據(jù)類(lèi)型:1、Python數(shù)據(jù)類(lèi)型第一:字符串(str)。 2、Python數(shù)據(jù)類(lèi)型
    的頭像 發(fā)表于 02-23 15:21 ?2045次閱讀

    Verilog中的基本數(shù)據(jù)類(lèi)型

    本文將討論 verilog常用數(shù)據(jù)類(lèi)型,包括對(duì)數(shù)據(jù)表示、線(xiàn)網(wǎng)類(lèi)型、變量類(lèi)型和數(shù)組,分享一下
    的頭像 發(fā)表于 05-12 17:43 ?1.1w次閱讀
    <b class='flag-5'>Verilog</b>中的基本<b class='flag-5'>數(shù)據(jù)類(lèi)型</b>

    細(xì)說(shuō)redis十種數(shù)據(jù)類(lèi)型及底層原理

    string 是 Redis 最基本的數(shù)據(jù)類(lèi)型,它可以存儲(chǔ)任意類(lèi)型數(shù)據(jù),比如文本、數(shù)字、圖片或者序列化的對(duì)象。一個(gè) string 類(lèi)型的鍵最大可以存儲(chǔ) 512 MB 的
    的頭像 發(fā)表于 05-15 11:21 ?2314次閱讀
    細(xì)說(shuō)redis十<b class='flag-5'>種數(shù)據(jù)類(lèi)型</b>及底層原理

    PostgreSQL中可用的各種數(shù)據(jù)類(lèi)型

    PostgreSQL是一功能強(qiáng)大的開(kāi)源關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),具有廣泛的數(shù)據(jù)類(lèi)型支持。在本教程中,我們將介紹PostgreSQL中可用的各種數(shù)據(jù)類(lèi)型,包括數(shù)值、字符串、幾何、時(shí)間、日期
    的頭像 發(fā)表于 09-19 14:08 ?5273次閱讀

    Redis的數(shù)據(jù)類(lèi)型有哪些

    ,其中HyperLogLog、Bitmap的底層都是 String 數(shù)據(jù)類(lèi)型,Geospatial 的底層是 Sorted Set 數(shù)據(jù)類(lèi)型。 五常用
    的頭像 發(fā)表于 10-09 10:51 ?1087次閱讀

    redis的五種數(shù)據(jù)類(lèi)型

    Redis是一高性能的內(nèi)存數(shù)據(jù)庫(kù),常用于緩存、任務(wù)隊(duì)列、分布式鎖等場(chǎng)景。它提供了多種數(shù)據(jù)類(lèi)型來(lái)滿(mǎn)足各種不同的需求,包括字符串(string)、哈希(hash)、列表(list)、集合
    的頭像 發(fā)表于 11-16 11:06 ?987次閱讀

    redis的五種數(shù)據(jù)類(lèi)型底層數(shù)據(jù)結(jié)構(gòu)

    Redis是一內(nèi)存數(shù)據(jù)存儲(chǔ)系統(tǒng),支持多種數(shù)據(jù)結(jié)構(gòu)。這些數(shù)據(jù)結(jié)構(gòu)不僅可以滿(mǎn)足常見(jiàn)的存儲(chǔ)需求,還能夠通過(guò)其底層數(shù)據(jù)結(jié)構(gòu)提供高效的操作和查詢(xún)。以
    的頭像 發(fā)表于 11-16 11:18 ?921次閱讀

    oracle的數(shù)據(jù)類(lèi)型有哪些

    Oracle數(shù)據(jù)庫(kù)中有許多數(shù)據(jù)類(lèi)型可供選擇,每種數(shù)據(jù)類(lèi)型都有其各自的特點(diǎn)和適用場(chǎng)景。下面是對(duì)Oracle數(shù)據(jù)庫(kù)中最常用
    的頭像 發(fā)表于 12-05 16:45 ?3103次閱讀