女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

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
    +關注

    關注

    28

    文章

    1365

    瀏覽量

    111790
  • vhdl
    +關注

    關注

    30

    文章

    819

    瀏覽量

    129556
  • 數組
    +關注

    關注

    1

    文章

    419

    瀏覽量

    26365

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

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

收藏 人收藏

    評論

    相關推薦
    熱點推薦

    STM32CubeMX用于STM32配置和初始化C代碼生成

    電子發燒友網站提供《STM32CubeMX用于STM32配置和初始化C代碼生成.pdf》資料免費下載
    發表于 02-26 17:32 ?658次下載

    淺談VerilogVHDL的區別

    VerilogVHDL是兩種廣泛使用的硬件描述語言(HDL),它們用于描述和模擬數字電路系統的行為和結構。這兩種語言的主要作用是幫助工程師設計、仿真和驗證集成電路(IC)和系統級芯片(SoC)的硬件模塊。
    的頭像 發表于 02-17 14:20 ?1148次閱讀
    淺談<b class='flag-5'>Verilog</b>和<b class='flag-5'>VHDL</b>的區別

    EE-359:ADSP-CM40x啟動時間優化和器件初始化

    電子發燒友網站提供《EE-359:ADSP-CM40x啟動時間優化和器件初始化.pdf》資料免費下載
    發表于 01-13 16:33 ?0次下載
    EE-359:ADSP-CM40x啟動時間優化和器件<b class='flag-5'>初始化</b>

    EE-88:使用21xx編譯器在C初始化變量

    電子發燒友網站提供《EE-88:使用21xx編譯器在C初始化變量.pdf》資料免費下載
    發表于 01-13 15:54 ?0次下載
    EE-88:使用21xx編譯器在C<b class='flag-5'>中</b><b class='flag-5'>初始化</b>變量

    OMAP5912多媒體處理器初始化參考指南

    電子發燒友網站提供《OMAP5912多媒體處理器初始化參考指南.pdf》資料免費下載
    發表于 12-17 16:20 ?0次下載
    OMAP5912多媒體處理器<b class='flag-5'>初始化</b>參考指南

    VerilogVHDL的比較 Verilog HDL編程技巧

    VerilogVHDL 比較 1. 語法和風格 VerilogVerilog 的語法更接近于 C 語言,對于有 C 語言背景的工程師來說,學習曲線較平緩。它支持結構
    的頭像 發表于 12-17 09:44 ?1445次閱讀

    STM32F407 MCU使用SD NAND?不斷電初始化失效解決方案

    STM32F407微控制器單元(MCU)與SD NAND的結合提供了強大的存儲解決方案。然而,不斷電初始化失效問題可能會導致系統穩定性和數據完整性受損。我們將STM32F407與SD NAND集成時可能遇到的初始化問題,并提供專業的解決方案。
    的頭像 發表于 12-11 10:51 ?815次閱讀
    STM32F407 MCU使用SD NAND?不斷電<b class='flag-5'>初始化</b>失效解決方案

    segger編譯器初始化問題

    的圖; 2.第二張圖是該變量在文件的所有操作,第一行是初始化,該行代碼在初始化部分最后一個,執行完就是主循環了; 3.第2,3行也是對變量的賦值,在主循環中; 4.第4行已注釋; 5
    發表于 12-09 18:06

    數組名之間可以直接賦值

    數組之間的賦值能不能直接使用等于號?比如這樣的代碼。 int main(){ int a[5] = {1, 2, 3, 4, 5}; int b[5] = {0}; b = a
    的頭像 發表于 11-26 11:23 ?496次閱讀

    基于旋轉平移解耦框架的視覺慣性初始化方法

    精確和魯棒的初始化對于視覺慣性里程計(VIO)至關重要,因為不良的初始化會嚴重降低姿態精度。
    的頭像 發表于 11-01 10:16 ?844次閱讀
    基于旋轉平移解耦框架的視覺慣性<b class='flag-5'>初始化</b><b class='flag-5'>方法</b>

    TMS320C6000 McBSP初始化

    電子發燒友網站提供《TMS320C6000 McBSP初始化.pdf》資料免費下載
    發表于 10-26 10:10 ?0次下載
    TMS320C6000 McBSP<b class='flag-5'>初始化</b>

    視頻引擎初始化失敗怎么回事

    視頻引擎初始化失敗是一個常見的技術問題,它可能由多種原因引起,包括軟件沖突、硬件問題、驅動程序問題、系統設置錯誤等。要解決這個問題,需要對可能的原因進行詳細的分析和診斷。 1. 軟件沖突 1.1
    的頭像 發表于 09-18 18:18 ?2541次閱讀

    如何避免自動初始化組件被截斷的情況?

    大小const數組用來占用這個區域,避免鏈接時將執行代碼鏈接到此區域。 但編譯的時候,鏈接腳本會把合適大小的執行代碼填補0x08000000 ~ 0x08003FFF 區域,導致鏈接時把自動初始化組件給截斷了。 請教各位大神,有沒有解決
    發表于 09-13 08:06

    Keil變量不被初始化方法

    有些時候在我們的應用過程要求變量有連續性,或者現場保留,例如Bootloader跳轉,某種原因的復位過程我們有些關鍵變量不能被初始化,在不同的編譯環境下有不同的設置,本文就這個操作做總結,分別
    的頭像 發表于 08-30 11:47 ?1271次閱讀
    Keil<b class='flag-5'>中</b>變量不被<b class='flag-5'>初始化</b><b class='flag-5'>方法</b>

    瀚海微SD NAND應用之SD協議存儲功能描述2 初始化命令

    初始化和識別過程: 總線激活后,主機啟動卡初始化和識別過程。 初始化過程從SD SEND OP COND (ACMD41)開始,通過設置其操作條件和OCR的HCS位。HCS (Ho
    的頭像 發表于 07-22 10:54 ?655次閱讀
    瀚海微SD NAND應用之SD協議存儲功能描述2 <b class='flag-5'>初始化</b>命令