91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

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

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

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

VHDL和Verilog中數(shù)組定義、初始化、賦值方法

FPGA設(shè)計(jì)論壇 ? 來源:FPGA設(shè)計(jì)論壇 ? 作者:FPGA設(shè)計(jì)論壇 ? 2022-09-23 14:20 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

VHDL和Verilog數(shù)組的定義、初始化、賦值的方法不只一種,以下是本人常用的方法,可能不是最方便的,但是比較好理解,文中包含了源代碼和modelsim仿真,供大家參考學(xué)習(xí)。

1. VHDL數(shù)組定義、初始化、賦值

1)VHDL數(shù)組定義方法:通過TYPE定義個(gè)matri_index的數(shù)組,數(shù)組包含50個(gè)數(shù)據(jù),數(shù)據(jù)位數(shù)為16;申明了receive_data和send_data兩個(gè)matri_index的數(shù)據(jù)。

--define a 16 bit array

constant

matrix_num:

integer := 49; TYPE

matrix_index is array (matrix_num downto 0) of std_logic_vector(15 downto 0);signal

receive_data, send_data:

matrix_index;signal

send_cnt:

STD_LOGIC_VECTOR(7 downto 0);

2)VHDL數(shù)組初始方法:實(shí)際應(yīng)用里,通常需要在上電復(fù)位過程中對(duì)變量進(jìn)行初始化,如果數(shù)組個(gè)數(shù)少時(shí),直接賦初始值即可,但是數(shù)組個(gè)數(shù)多時(shí),可以用循環(huán)實(shí)現(xiàn)賦值,通常的循環(huán)語句有FOR LOOP和WHILE LOOP。

(注意變量i申明的位置,需要在process內(nèi)部,注意變量的賦值方式)

process(clk,reset_n)

--循環(huán)變量定義并初始化

variable i: integer := 0;

begin

if (reset_n = ‘0’)then

i := 0;

--利用while loop循環(huán)賦值

while(i《=matrix_num) loop

receive_data(i) 《=X“0000”;

i := i+1;

end loop;

elsif (rising_edge(clk)) then

--CONV_std_logic_vector(A,位寬)

將無符號(hào)的無符號(hào)整數(shù)轉(zhuǎn)換為std_logic_vector

--CONV_INTEGER(A)

將std_logic_vector轉(zhuǎn)換為整數(shù)

--直接賦值方式

send_cnt《= X“02”;

send_data(0) 《= X“0000”;

send_data(1) 《= X“0000”;

send_data(CONV_INTEGER(send_cnt)) 《= X“0000”;

end if;end process;

3)VHDL數(shù)組賦值

賦值語句分信號(hào)賦值語句和變量賦值語句兩種。每一種都有下面三個(gè)基本組成部分:賦值目標(biāo):是所賦值的受體,它的基本元素只能是信號(hào)或變量。

賦值符號(hào):是賦值符號(hào)只有兩種。一種是信號(hào)賦值符號(hào)”《=”;另一種是變量賦值符號(hào)”:=”。賦值源:賦值源是賦值的主體,它可以是一個(gè)數(shù)值,也可以是一個(gè)邏輯或運(yùn)算表達(dá)式。

可以直接賦值,如果變量為矢量時(shí),需要將矢量轉(zhuǎn)為整型。(不管三七二十一,建議程序中增加以下包,否則類型轉(zhuǎn)換用不了)

LIBRARY ieee;USE ieee.std_logic_1164.all;USE ieee.std_logic_arith.all;USE ieee.std_logic_unsigned.all;--CONV_std_logic_vector(A,位寬)

將無符號(hào)的無符號(hào)整數(shù)轉(zhuǎn)換為std_logic_vector--CONV_INTEGER(A)

將std_logic_vector轉(zhuǎn)換為整數(shù) --直接賦值方式

send_cnt《= X“02”;send_data(0) 《= X“0000”;send_data(1) 《= X“0000”; send_data(CONV_INTEGER(send_cnt)) 《= X“0000”;

4)VHDL數(shù)組test代碼

LIBRARY ieee;USE ieee.std_logic_1164.all;USE ieee.std_logic_arith.all;USE ieee.std_logic_unsigned.all; --this is commentENTITY array_test IS PORT( reset_n

: IN STD_LOGIC;

clk

: IN STD_LOGIC );

END array_test; ARCHITECTURE behavioural OF array_test IS--define a 16 bit array

constant

matrix_num:

integer := 49; TYPE

matrix_index is array (matrix_num downto 0) of std_logic_vector(15 downto 0);signal

receive_data, send_data:

matrix_index;signal

send_cnt:

STD_LOGIC_VECTOR(7 downto 0);BEGIN process(clk,reset_n)

--循環(huán)變量定義并初始化

variable i: integer := 0;

begin

if (reset_n = ‘0’)then

i := 0;

--利用while loop循環(huán)賦值

while(i《=matrix_num) loop

receive_data(i) 《=X“0000”;

i := i+1;

end loop;

elsif (rising_edge(clk)) then

--CONV_std_logic_vector(A,位寬)

將無符號(hào)的無符號(hào)整數(shù)轉(zhuǎn)換為std_logic_vector

--CONV_INTEGER(A)

將std_logic_vector轉(zhuǎn)換為整數(shù)

--直接賦值方式

send_cnt《= X“02”;

send_data(0) 《= X“0000”;

send_data(1) 《= X“0000”;

send_data(CONV_INTEGER(send_cnt)) 《= X“0000”;

end if;end process; END behavioural;

5)modesim 仿真結(jié)果

19cb6500-3b04-11ed-9e49-dac502259ad0.png

2. Verilog數(shù)組定義、初始化、賦值

1)Verilog數(shù)組定義方法:reg[n-1 : 0]

定義了存儲(chǔ)器中每個(gè)寄存器單元的大小,即存儲(chǔ)單元是一個(gè)n位的寄存器;存儲(chǔ)器后面的[m-1 : 0]則定義了該存儲(chǔ)器中有多少個(gè)這樣的寄存器。

reg[n-1 : 0] 存儲(chǔ)器名 [m-1 : 0];或者 reg[n : 1] 存儲(chǔ)器名 [m : 1];

//define a 16 bit array parameter wordsize = 16, memsize = 49;reg [wordsize-1 : 0] send_data[memsize-1 : 0], receive_data[memsize-1 : 0];integer i = 0;reg [7:0] send_cnt

;2)Verilog數(shù)組初始方法:實(shí)際應(yīng)用里,通常需要在上電復(fù)位過程中對(duì)變量進(jìn)行初始化,如果數(shù)組個(gè)數(shù)少時(shí),直接賦初始值即可,但是數(shù)組個(gè)數(shù)多時(shí),可以用循環(huán)實(shí)現(xiàn)賦值,通常的循環(huán)語句有FOR和WHILE。

(注意變量的賦值方式)

always@(posedge clk, reset_n)beginif(!reset_n) beginwhile(i 《=memsize)beginreceive_data[i] 《= 16‘h0000;i = i+1;

//阻塞賦值endendelse begin

//直接賦值方式send_cnt 《= 8’h02;send_data[0] 《= 16‘h0000;send_data[1] 《= 16’h0000;send_data[send_cnt] 《=16‘h0000;

//不需要類型轉(zhuǎn)換endend

3)Verilog數(shù)組賦值不像VHDL那樣,可以直接賦值。

//直接賦值方式send_cnt 《= 8’h02;send_data[0] 《= 16‘h0000;send_data[1] 《= 16’h0000;send_data[send_cnt] 《=16‘h0000;

//不需要類型轉(zhuǎn)換

4)Verilog數(shù)組test代碼

module verilog_test(clk,reset_n);inputclk;inputreset_n; // /////define a 16 bit array parameter wordsize = 16,

memsize = 49;reg [wordsize-1 : 0] send_data[memsize-1 : 0],

receive_data[memsize-1 : 0];integer i = 0;reg [7:0] send_cnt; always@(posedge clk, reset_n)beginif(!reset_n) beginwhile(i 《=memsize)beginreceive_data[i] 《= 16’h0000;i = i+1;

//非阻塞賦值endendelse begin

//直接賦值方式send_cnt 《= 8‘h02;send_data[0] 《= 16’h0000;send_data[1] 《= 16‘h0000;send_data[send_cnt] 《=16’h0000;

//不需要類型轉(zhuǎn)換endendendmodule

5)modelsim仿真結(jié)果

1a079606-3b04-11ed-9e49-dac502259ad0.png

審核編輯 :李倩

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

    關(guān)注

    30

    文章

    1374

    瀏覽量

    114526
  • vhdl
    +關(guān)注

    關(guān)注

    30

    文章

    822

    瀏覽量

    131692
  • 數(shù)組
    +關(guān)注

    關(guān)注

    1

    文章

    420

    瀏覽量

    27358

原文標(biāo)題:FPGA學(xué)習(xí)-VHDL和Verilog中數(shù)組定義、初始化、賦值方法

文章出處:【微信號(hào):gh_9d70b445f494,微信公眾號(hào):FPGA設(shè)計(jì)論壇】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    PC強(qiáng)實(shí)時(shí)運(yùn)動(dòng)控制(一):C#的EtherCAT總線初始化(下)

    通過使用配置工具導(dǎo)出ZAR文件進(jìn)行EtherCAT總線初始化
    的頭像 發(fā)表于 02-05 10:00 ?951次閱讀
    PC強(qiáng)實(shí)時(shí)運(yùn)動(dòng)控制(一):C#的EtherCAT總線<b class='flag-5'>初始化</b>(下)

    國(guó)民技術(shù)發(fā)布N32Cube芯片配置與初始化代碼生成工具

    1月30日,國(guó)民技術(shù)(NSING)正式發(fā)布N32Cube——芯片配置與初始化代碼生成工具,讓時(shí)鐘、引腳與外設(shè)的配置一目了然、輕松上手!
    的頭像 發(fā)表于 02-02 15:26 ?549次閱讀
    國(guó)民技術(shù)發(fā)布N32Cube芯片配置與<b class='flag-5'>初始化</b>代碼生成工具

    MCU工程初始化,到底該不該交給工具?

    初始化 MCU特殊外設(shè)或硬件約束 工程驗(yàn)證和調(diào)試 結(jié)論 交給工具并不意味著放棄控制 而是讓工程師從重復(fù)操作解放出來 專注于不可自動(dòng)的高價(jià)值工作 審核編輯 黃宇
    的頭像 發(fā)表于 01-29 10:18 ?143次閱讀
    MCU工程<b class='flag-5'>初始化</b>,到底該不該交給工具?

    EtherCAT總線初始化步驟

    EtherCAT(Ethernet for Control Automation Technology)是一種高性能的工業(yè)以太網(wǎng)通信協(xié)議,廣泛應(yīng)用于工業(yè)自動(dòng)領(lǐng)域。其初始化過程是確保系統(tǒng)穩(wěn)定運(yùn)行
    的頭像 發(fā)表于 12-22 10:10 ?582次閱讀
    EtherCAT總線<b class='flag-5'>初始化</b>步驟

    數(shù)組的初體驗(yàn)

    的物品是按一定順序放置的。 1.我們來看一下如何聲明一個(gè)數(shù)組: 數(shù)據(jù)類型 數(shù)組名稱[長(zhǎng)度]; 數(shù)組只聲明也不行啊,看一下數(shù)組是如何
    發(fā)表于 11-25 08:06

    瀚海微SD NAND TF卡硬件識(shí)別與初始化類問題探討

    在瀚海微SD NAND/TF卡的實(shí)際應(yīng)用,硬件識(shí)別與初始化是保障設(shè)備正常運(yùn)行的首要環(huán)節(jié),該環(huán)節(jié)出現(xiàn)故障會(huì)直接導(dǎo)致存儲(chǔ)卡無法投入使用,尤其在工業(yè)控制、車載設(shè)備等關(guān)鍵場(chǎng)景,可能引發(fā)設(shè)備停機(jī)、數(shù)據(jù)丟失
    的頭像 發(fā)表于 11-18 09:58 ?517次閱讀
    瀚海微SD NAND  TF卡硬件識(shí)別與<b class='flag-5'>初始化</b>類問題探討

    串口通信基石:Air8000下Modbus RTU串口初始化詳解!

    串口初始化是Modbus RTU通信穩(wěn)定可靠的關(guān)鍵起點(diǎn)。本篇深入剖析Air8000開發(fā)板串口參數(shù)配置、初始化代碼實(shí)現(xiàn)及調(diào)試要點(diǎn),結(jié)合master_rtu示例,分享實(shí)際操作的經(jīng)驗(yàn)與避坑指南,讓您
    的頭像 發(fā)表于 10-28 16:33 ?1655次閱讀
    串口通信基石:Air8000下Modbus RTU串口<b class='flag-5'>初始化</b>詳解!

    NVMe高速傳輸之?dāng)[脫XDMA設(shè)計(jì)33:初始化功能驗(yàn)證與分析

    模型。 在這里以最小存儲(chǔ)子系統(tǒng)模型為例說明對(duì)初始化功能的驗(yàn)證與分析。 在本節(jié)測(cè)試用例, 設(shè)置橋設(shè)備模型不啟用 BAR 空間, 設(shè)置 NVMe 設(shè)備模型 BAR0 空間大小為 64KB, 不啟用其余
    發(fā)表于 10-08 08:02

    GraniStudio:IO初始化以及IO資源配置例程

    1.文件運(yùn)行 導(dǎo)入工程 雙擊運(yùn)行桌面GraniStudio.exe。 通過引導(dǎo)界面導(dǎo)入IO初始化以及IO資源配置例程,點(diǎn)擊導(dǎo)入按鈕。 打開IO初始化以及IO資源配置例程所在路徑,選中IO初始化以及
    的頭像 發(fā)表于 08-22 17:34 ?936次閱讀
    GraniStudio:IO<b class='flag-5'>初始化</b>以及IO資源配置例程

    GraniStudio:初始化例程

    1.文件運(yùn)行 導(dǎo)入工程 雙擊運(yùn)行桌面GraniStudio.exe。 通過引導(dǎo)界面導(dǎo)入初始化例程,點(diǎn)擊導(dǎo)入按鈕。 打開初始化例程所在路徑,選中初始化.gsp文件,點(diǎn)擊打開,完成導(dǎo)入。 2.功能
    的頭像 發(fā)表于 08-22 16:45 ?893次閱讀
    GraniStudio:<b class='flag-5'>初始化</b>例程

    MCU外設(shè)初始化:為什么參數(shù)配置必須優(yōu)先于使能

    在微控制器領(lǐng)域,初始化參數(shù)配置階段至關(guān)重要。此時(shí),雖無電源驅(qū)動(dòng),但微控制器在使能信號(hào)到來前,借初始化參數(shù)配置這一精細(xì)步驟,開啟關(guān)鍵準(zhǔn)備進(jìn)程。初始化參數(shù)配置如同物理坐標(biāo)錨定、邏輯指令部署、內(nèi)在秩序預(yù)設(shè)
    的頭像 發(fā)表于 08-13 10:38 ?791次閱讀

    定義IO初始化結(jié)構(gòu)體

    由上述IOPORT相關(guān)功能的枚舉類型我們可以知道,在對(duì)IOPORT模塊進(jìn)行初始化時(shí)需要根據(jù)情況配置它們。因此我們定義一個(gè)IOPORT初始化的結(jié)構(gòu)體類型IOPORT_Init_t,它的成員包括了由上述所有枚舉類型所聲明的變量,因此
    的頭像 發(fā)表于 07-16 16:26 ?1409次閱讀

    IM系列設(shè)備過載故障:界面初始化終止的診斷流程與修復(fù)指南

    當(dāng) IM 系列設(shè)備出現(xiàn)過載故障導(dǎo)致界面初始化終止時(shí),通常表現(xiàn)為設(shè)備啟動(dòng)后操作界面無顯示、指示燈異常閃爍或初始化進(jìn)度條停滯不前,同時(shí)可能伴隨設(shè)備運(yùn)行異響或異常發(fā)熱。初步判斷時(shí),可觀察設(shè)備是否有錯(cuò)
    的頭像 發(fā)表于 06-28 09:47 ?1211次閱讀

    IM 系列設(shè)備過載保護(hù)機(jī)制下界面初始化中斷的底層邏輯與解決方案

    一、過載保護(hù)機(jī)制與界面初始化的關(guān)聯(lián)基礎(chǔ) IM 系列設(shè)備的過載保護(hù)機(jī)制是保障設(shè)備安全運(yùn)行的核心功能,其通過傳感器實(shí)時(shí)采集設(shè)備運(yùn)行參數(shù),如電流、電壓、溫度、系統(tǒng)資源占用率等。一旦這些參數(shù)超出預(yù)設(shè)閾值
    的頭像 發(fā)表于 06-27 09:58 ?541次閱讀

    在testbench如何使用阻塞賦值和非阻塞賦值

    本文詳細(xì)闡述了在一個(gè)testbench,應(yīng)該如何使用阻塞賦值與非阻塞賦值。首先說結(jié)論,建議在testbench,對(duì)時(shí)鐘信號(hào)(包括分頻時(shí)鐘)使用阻塞
    的頭像 發(fā)表于 04-15 09:34 ?1206次閱讀
    在testbench<b class='flag-5'>中</b>如何使用阻塞<b class='flag-5'>賦值</b>和非阻塞<b class='flag-5'>賦值</b>