国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

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

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

3天內不再提示

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

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

掃碼添加小助手

加入工程師交流群

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

1. VHDL數組定義、初始化、賦值

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

--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數組初始方法:實際應用里,通常需要在上電復位過程中對變量進行初始化,如果數組個數少時,直接賦初始值即可,但是數組個數多時,可以用循環實現賦值,通常的循環語句有FOR LOOP和WHILE LOOP。

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

process(clk,reset_n)

--循環變量定義并初始化

variable i: integer := 0;

begin

if (reset_n = ‘0’)then

i := 0;

--利用while loop循環賦值

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,位寬)

將無符號的無符號整數轉換為std_logic_vector

--CONV_INTEGER(A)

將std_logic_vector轉換為整數

--直接賦值方式

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數組賦值

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

賦值符號:是賦值符號只有兩種。一種是信號賦值符號”《=”;另一種是變量賦值符號”:=”。賦值源:賦值源是賦值的主體,它可以是一個數值,也可以是一個邏輯或運算表達式。

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

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,位寬)

將無符號的無符號整數轉換為std_logic_vector--CONV_INTEGER(A)

將std_logic_vector轉換為整數 --直接賦值方式

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

4)VHDL數組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)

--循環變量定義并初始化

variable i: integer := 0;

begin

if (reset_n = ‘0’)then

i := 0;

--利用while loop循環賦值

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,位寬)

將無符號的無符號整數轉換為std_logic_vector

--CONV_INTEGER(A)

將std_logic_vector轉換為整數

--直接賦值方式

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 仿真結果

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

2. Verilog數組定義、初始化、賦值

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

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

reg[n-1 : 0] 存儲器名 [m-1 : 0];或者 reg[n : 1] 存儲器名 [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數組初始方法:實際應用里,通常需要在上電復位過程中對變量進行初始化,如果數組個數少時,直接賦初始值即可,但是數組個數多時,可以用循環實現賦值,通常的循環語句有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;

//不需要類型轉換endend

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

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

//不需要類型轉換

4)Verilog數組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;

//不需要類型轉換endendendmodule

5)modelsim仿真結果

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

審核編輯 :李倩

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

    關注

    30

    文章

    1374

    瀏覽量

    114520
  • vhdl
    +關注

    關注

    30

    文章

    822

    瀏覽量

    131680
  • 數組
    +關注

    關注

    1

    文章

    420

    瀏覽量

    27351

原文標題:FPGA學習-VHDL和Verilog中數組定義、初始化、賦值方法

文章出處:【微信號:gh_9d70b445f494,微信公眾號:FPGA設計論壇】歡迎添加關注!文章轉載請注明出處。

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    PC強實時運動控制(一):C#的EtherCAT總線初始化(下)

    通過使用配置工具導出ZAR文件進行EtherCAT總線初始化
    的頭像 發表于 02-05 10:00 ?915次閱讀
    PC強實時運動控制(一):C#的EtherCAT總線<b class='flag-5'>初始化</b>(下)

    國民技術發布N32Cube芯片配置與初始化代碼生成工具

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

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

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

    EtherCAT總線初始化步驟

    EtherCAT(Ethernet for Control Automation Technology)是一種高性能的工業以太網通信協議,廣泛應用于工業自動領域。其初始化過程是確保系統穩定運行
    的頭像 發表于 12-22 10:10 ?575次閱讀
    EtherCAT總線<b class='flag-5'>初始化</b>步驟

    數組的初體驗

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

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

    在瀚海微SD NAND/TF卡的實際應用,硬件識別與初始化是保障設備正常運行的首要環節,該環節出現故障會直接導致存儲卡無法投入使用,尤其在工業控制、車載設備等關鍵場景,可能引發設備停機、數據丟失
    的頭像 發表于 11-18 09:58 ?515次閱讀
    瀚海微SD NAND  TF卡硬件識別與<b class='flag-5'>初始化</b>類問題探討

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

    串口初始化是Modbus RTU通信穩定可靠的關鍵起點。本篇深入剖析Air8000開發板串口參數配置、初始化代碼實現及調試要點,結合master_rtu示例,分享實際操作的經驗與避坑指南,讓您
    的頭像 發表于 10-28 16:33 ?1653次閱讀
    串口通信基石:Air8000下Modbus RTU串口<b class='flag-5'>初始化</b>詳解!

    NVMe高速傳輸之擺脫XDMA設計33:初始化功能驗證與分析

    模型。 在這里以最小存儲子系統模型為例說明對初始化功能的驗證與分析。 在本節測試用例, 設置橋設備模型不啟用 BAR 空間, 設置 NVMe 設備模型 BAR0 空間大小為 64KB, 不啟用其余
    發表于 10-08 08:02

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

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

    GraniStudio:初始化例程

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

    MCU外設初始化:為什么參數配置必須優先于使能

    在微控制器領域,初始化參數配置階段至關重要。此時,雖無電源驅動,但微控制器在使能信號到來前,借初始化參數配置這一精細步驟,開啟關鍵準備進程。初始化參數配置如同物理坐標錨定、邏輯指令部署、內在秩序預設
    的頭像 發表于 08-13 10:38 ?787次閱讀

    定義IO初始化結構體

    由上述IOPORT相關功能的枚舉類型我們可以知道,在對IOPORT模塊進行初始化時需要根據情況配置它們。因此我們定義一個IOPORT初始化的結構體類型IOPORT_Init_t,它的成員包括了由上述所有枚舉類型所聲明的變量,因此
    的頭像 發表于 07-16 16:26 ?1407次閱讀

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

    當 IM 系列設備出現過載故障導致界面初始化終止時,通常表現為設備啟動后操作界面無顯示、指示燈異常閃爍或初始化進度條停滯不前,同時可能伴隨設備運行異響或異常發熱。初步判斷時,可觀察設備是否有錯
    的頭像 發表于 06-28 09:47 ?1207次閱讀

    IM 系列設備過載保護機制下界面初始化中斷的底層邏輯與解決方案

    一、過載保護機制與界面初始化的關聯基礎 IM 系列設備的過載保護機制是保障設備安全運行的核心功能,其通過傳感器實時采集設備運行參數,如電流、電壓、溫度、系統資源占用率等。一旦這些參數超出預設閾值
    的頭像 發表于 06-27 09:58 ?540次閱讀

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

    本文詳細闡述了在一個testbench,應該如何使用阻塞賦值與非阻塞賦值。首先說結論,建議在testbench,對時鐘信號(包括分頻時鐘)使用阻塞
    的頭像 發表于 04-15 09:34 ?1205次閱讀
    在testbench<b class='flag-5'>中</b>如何使用阻塞<b class='flag-5'>賦值</b>和非阻塞<b class='flag-5'>賦值</b>