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

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

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

FPGA零基礎(chǔ)學(xué)習(xí)之Vivado-ROM使用教程

FPGA技術(shù)江湖 ? 來源:FPGA技術(shù)江湖 ? 2023-06-07 12:27 ? 次閱讀

大俠好,歡迎來到FPGA技術(shù)江湖。本系列將帶來FPGA的系統(tǒng)性學(xué)習(xí),從最基本的數(shù)字電路基礎(chǔ)開始,最詳細(xì)操作步驟,最直白的言語描述,手把手的“傻瓜式”講解,讓電子、信息、通信類專業(yè)學(xué)生、初入職場小白及打算進(jìn)階提升的職業(yè)開發(fā)者都可以有系統(tǒng)性學(xué)習(xí)的機(jī)會。

系統(tǒng)性的掌握技術(shù)開發(fā)以及相關(guān)要求,對個人就業(yè)以及職業(yè)發(fā)展都有著潛在的幫助,希望對大家有所幫助。本次帶來Vivado系列,ROM使用教程。話不多說,上貨。

ROM使用教程

作者:李西銳校對:陸輝

ROM的英文全稱為Read-Only Memory,即只讀存儲器??梢詮娜我獾刂飞献x取數(shù)據(jù),但是不能寫入。那么我們ROM中的數(shù)據(jù),就需要我們提前存放進(jìn)去,在IP核中,我們可以通過.coe文件進(jìn)行數(shù)據(jù)存放,文件格式我們可以參考Xilinx官方標(biāo)準(zhǔn)。

數(shù)據(jù)文件的格式是固定的,我們在填充數(shù)據(jù)時,需要嚴(yán)格按照官方的格式進(jìn)行書寫。

18f673ce-04e7-11ee-90ce-dac502259ad0.png

在示例文件中,第一行規(guī)定了數(shù)據(jù)的格式,此處規(guī)定的是二進(jìn)制,那么下面的數(shù)據(jù),我們必須用二進(jìn)制的形式。大家在寫的時候,規(guī)定什么進(jìn)制就用什么進(jìn)制。數(shù)據(jù)與數(shù)據(jù)之間用逗號隔開,最后一個數(shù)據(jù)用分號結(jié)尾。

了解了數(shù)據(jù)文件格式之后,接下來我們提前準(zhǔn)備一個數(shù)據(jù)文件,以便于后續(xù)我們調(diào)用IP核去使用。寫數(shù)據(jù)文件的方法有很多,在此給大家介紹一種:MATLAB

我們打開MATLAB之后,首先先選擇一下工作路徑,以便于我們?nèi)フ业轿覀兩傻奈募约氨4嫖覀兊拇a。如圖:

19058a8a-04e7-11ee-90ce-dac502259ad0.png

打開如圖所示的圖標(biāo)之后,選擇好工程路徑。

選擇好之后,我們新建腳本文件,然后寫入代碼。

1   data = 0255;
2   fid = fopen('sin_data.coe','w');
3   fprintf(fid,'memory_initialization_radix = 10;
');
4   fprintf(fid,'memory_initialization_vector = 
');
5   for i = 11024
6     fprintf(fid,'%d',round(127*sin(2*pi/1024*i)+127));
7     
8     if i == 1024
9       fprintf(fid,';');
10    else
11      fprintf(fid,',');
12    end
13    
14    if mod(i,1) == 0
15      fprintf(fid,'
');
16    end
17  end
18  fclose(fid);

寫好代碼,點(diǎn)擊運(yùn)行,即可生成我們想要的.coe文件。數(shù)據(jù)文件準(zhǔn)備好之后,接下來我們就可以調(diào)用IP核了。

首先我們新建一個工程

1920b21a-04e7-11ee-90ce-dac502259ad0.png

在第二步選擇路徑

192c1948-04e7-11ee-90ce-dac502259ad0.png

第三步直接跳過,第四步選擇我們的芯片,芯片型號為XC7A35TFGG484-2。

1941b5e6-04e7-11ee-90ce-dac502259ad0.png

選中型號之后,點(diǎn)擊Next。

工程新建完成之后,開始新建文件。

首先我們先新建IP核,打開IP Catalog,在窗口搜索block

195fe3b8-04e7-11ee-90ce-dac502259ad0.png

1970de66-04e7-11ee-90ce-dac502259ad0.png

找到如圖所示選項,然后雙擊打開。

198525d8-04e7-11ee-90ce-dac502259ad0.png

我們在框選的選項中,選擇Single Port ROM。這個選項中總共有五個選項。第一個為單端口RAM,第二個為偽雙端口RAM,第三個為真雙端口RAM,第四個為單端口ROM,第五個為真雙端口ROM。我們此次使用的是單端口ROM。

1990343c-04e7-11ee-90ce-dac502259ad0.png

圖中框選出了四處,第一處需要我們修改一下數(shù)據(jù)的位寬以及深度,位寬我們默認(rèn)使用8bit,深度為1024。因為我們在前面做了一個數(shù)據(jù)量為1024的.coe文件,所以這里深度改為1024。第二處為數(shù)據(jù)輸出使能,在此我們選擇為Always Enabled。使我們的輸出使能一直有效。第三處為輸出寄存器,輸出會在時鐘下輸出,導(dǎo)致結(jié)果會慢一拍,在此處我們不需要這個選項,因此取消勾選。第四處為ROM復(fù)位的設(shè)置,如果有需要,可以進(jìn)行勾選,此處,我沒有使用復(fù)位信號,大家在使用時自行選擇。

199bf592-04e7-11ee-90ce-dac502259ad0.png

此處我們需要勾選中加載初始化文件的選項,然后點(diǎn)擊Browse找到我們提前生成好的數(shù)據(jù)文件。選擇好之后點(diǎn)擊OK,生成IP核。

19c1b9d0-04e7-11ee-90ce-dac502259ad0.png

直接點(diǎn)擊Generate。

IP核生成好之后,我們新建文件,寫一下我們的地址控制模塊。代碼如下:

1   module addr_ctrl(
2     
3     input   wire           clk,
4     input   wire           rst_n,
5     output   reg     [9:0]    addr
6   );
7 
8     always @ (posedge clk, negedge rst_n)
9     begin
10      if(rst_n == 1'b0)
11        addr <= 10'd0;
12      else if(addr == 10'd1023)
13        addr <= 10'd0;
14      else
15        addr <= addr + 1'b1;
16    end
17
18  endmodule

然后我們新建頂層文件。寫好端口之后,我們將IP核與地址控制模塊例化到頂層當(dāng)中。

19d412ec-04e7-11ee-90ce-dac502259ad0.png

點(diǎn)擊Next,選擇Create File,新建頂層開始寫代碼。

19f6af78-04e7-11ee-90ce-dac502259ad0.png

1a01820e-04e7-11ee-90ce-dac502259ad0.png

打開IP核例化的頭文件。

1a0acaf8-04e7-11ee-90ce-dac502259ad0.png

復(fù)制粘貼到頂層當(dāng)中。地址控制模塊也同樣進(jìn)行例化。頂層代碼如下:

1   module rom(
2     
3     input   wire           clk,
4     input   wire           rst_n,
5     output   wire     [7:0]    q
6   );
7     
8     wire     [9:0]      addr;
9     
10    addr_ctrl addr_ctrl_inst(
11    
12    .clk      (clk),
13    .rst_n      (rst_n),
14    .addr      (addr)  
15  );
16    
17    blk_mem_gen_0 blk_mem_gen_0_inst (
18      .clka(clk),    // input wire clka
19      .addra(addr),  // input wire [9 : 0] addra
20      .douta(q)  // output wire [7 : 0] douta
21    );
22
23  endmodule

代碼寫好之后,保存編譯,沒有錯誤,那么我們寫一下仿真看一下仿真波形。

1a20362c-04e7-11ee-90ce-dac502259ad0.png

選中新建仿真文件,點(diǎn)擊Next輸入名字。

1a3b1564-04e7-11ee-90ce-dac502259ad0.png

點(diǎn)擊OK,開始寫代碼。仿真代碼如下:

1   `timescale 1ns / 1ps
2 
3   module rom_tb;
4 
5     reg            clk;
6     reg            rst_n;
7     wire     [7:0]    q;
8 
9     initial begin
10      clk = 0;
11      rst_n = 0;
12      #105;
13      rst_n = 1;
14      #10000;
15      $stop;
16    end
17    
18    always #10 clk = ~clk;
19    
20    rom rom_inst(
21    
22    .clk      (clk  ),
23    .rst_n      (rst_n  ),
24    .q        (q    )
25  );
26
27  endmodule

代碼寫好之后,打開仿真。

1a5b4c1c-04e7-11ee-90ce-dac502259ad0.png

波形窗口打開后,點(diǎn)擊run all讓波形繼續(xù)運(yùn)行

1a665a1c-04e7-11ee-90ce-dac502259ad0.png

然后看到如圖所示波形。

1a6e3156-04e7-11ee-90ce-dac502259ad0.png

然后選中輸出q,右鍵選擇wavaform style,然后選擇analog就可以看到我們的數(shù)字信號就變成了模擬信號。

1a99b9b6-04e7-11ee-90ce-dac502259ad0.png

但是此時波形只有一部分,我們再次點(diǎn)擊run all ,然后點(diǎn)擊break

1a665a1c-04e7-11ee-90ce-dac502259ad0.png

1aca2d3a-04e7-11ee-90ce-dac502259ad0.png

就可以看到完整的正弦波。

1ad55642-04e7-11ee-90ce-dac502259ad0.png

我們的數(shù)據(jù)文件就是做的正弦波,仿真顯示正確。

審核編輯:湯梓紅

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

    關(guān)注

    1620

    文章

    21510

    瀏覽量

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

    關(guān)注

    4

    文章

    539

    瀏覽量

    85436
  • Xilinx
    +關(guān)注

    關(guān)注

    70

    文章

    2137

    瀏覽量

    120397
  • 數(shù)據(jù)文件
    +關(guān)注

    關(guān)注

    0

    文章

    11

    瀏覽量

    6552
  • Vivado
    +關(guān)注

    關(guān)注

    19

    文章

    797

    瀏覽量

    65855

原文標(biāo)題:FPGA零基礎(chǔ)學(xué)習(xí)之Vivado-ROM使用教程

文章出處:【微信號:HXSLH1010101010,微信公眾號:FPGA技術(shù)江湖】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    零基礎(chǔ)入門FPGA,如何學(xué)習(xí)?精選資料分享

    問:本人零基礎(chǔ),想學(xué)FPGA,求有經(jīng)驗的人說說,我應(yīng)該從哪入手,應(yīng)該看什么教程,應(yīng)該用什么學(xué)習(xí)板和開發(fā)板,看什么書等,希望有經(jīng)驗的好心人能夠給我一些引導(dǎo)。如果想速成,那就上網(wǎng)看視頻吧,這...
    發(fā)表于 07-20 07:28

    零基礎(chǔ)如何學(xué)習(xí)stm32?

    零基礎(chǔ)如何學(xué)習(xí)stm32?
    發(fā)表于 12-21 07:53

    FPGA零基礎(chǔ)學(xué)習(xí):IP CORE ROM設(shè)計

    CORE ROM設(shè)計 本篇實現(xiàn)基于叁芯智能科技的SANXIN -B01 FPGA開發(fā)板,以下為配套的教程,如有入手開發(fā)板,可以登錄官方淘寶店購買,還有配套的學(xué)習(xí)視頻。 SAN
    發(fā)表于 03-13 15:46

    FPGA零基礎(chǔ)學(xué)習(xí)Vivado-LED流水燈實驗

    及打算進(jìn)階提升的職業(yè)開發(fā)者都可以有系統(tǒng)性學(xué)習(xí)的機(jī)會。系統(tǒng)性的掌握技術(shù)開發(fā)以及相關(guān)要求,對個人就業(yè)以及職業(yè)發(fā)展都有著潛在的幫助,希望對大家有所幫助。本次帶來Vivado系列,本篇為FPGA零基
    發(fā)表于 04-18 21:12

    FPGA零基礎(chǔ)學(xué)習(xí)Vivado-數(shù)碼管驅(qū)動設(shè)計實驗

    不多說,上貨。FPGA零基礎(chǔ)學(xué)習(xí)Vivado-數(shù)碼管驅(qū)動設(shè)計實驗數(shù)碼管作為SANXIN-B04的顯示裝置,具有易控制,顯示方便的特點(diǎn)。那么
    發(fā)表于 04-19 19:21

    FPGA零基礎(chǔ)學(xué)習(xí)Vivado-按鍵使用教程

    大俠好,歡迎來到FPGA技術(shù)江湖。本系列將帶來FPGA的系統(tǒng)性學(xué)習(xí),從最基本的數(shù)字電路基礎(chǔ)開始,最詳細(xì)操作步驟,最直白的言語描述,手把手的“傻瓜式”講解,讓電子、信息、通信類專業(yè)學(xué)生、初入職場小白
    發(fā)表于 06-13 18:33

    FPGA零基礎(chǔ)學(xué)習(xí)Vivado-ROM使用教程

    及打算進(jìn)階提升的職業(yè)開發(fā)者都可以有系統(tǒng)性學(xué)習(xí)的機(jī)會。 系統(tǒng)性的掌握技術(shù)開發(fā)以及相關(guān)要求,對個人就業(yè)以及職業(yè)發(fā)展都有著潛在的幫助,希望對大家有所幫助。本次帶來Vivado系列,ROM使用教程。話不多
    發(fā)表于 06-15 16:57

    FPGA零基礎(chǔ)學(xué)習(xí)Vivado-TLC549驅(qū)動設(shè)計

    大俠好,歡迎來到FPGA技術(shù)江湖。本系列將帶來FPGA的系統(tǒng)性學(xué)習(xí),從最基本的數(shù)字電路基礎(chǔ)開始,最詳細(xì)操作步驟,最直白的言語描述,手把手的“傻瓜式”講解,讓電子、信息、通信類專業(yè)學(xué)生、初入職場小白
    發(fā)表于 08-16 19:57

    零基礎(chǔ)學(xué)習(xí)LEBVIEW】04 監(jiān)控組態(tài)軟件Kingview

    零基礎(chǔ)學(xué)習(xí)LEBVIEW】04 監(jiān)控組態(tài)軟件Kingview
    發(fā)表于 12-31 10:28 ?0次下載

    零基礎(chǔ)學(xué)習(xí)LEBVIEW】06 IO接口

    零基礎(chǔ)學(xué)習(xí)LEBVIEW】06 IO接口,感興趣的朋友一定要學(xué)習(xí)。
    發(fā)表于 12-31 10:28 ?0次下載

    零基礎(chǔ)學(xué)習(xí)LEBVIEW】07 串口通信技術(shù)

    零基礎(chǔ)學(xué)習(xí)LEBVIEW】07 串口通信技術(shù),感興趣的朋友一定要學(xué)習(xí)
    發(fā)表于 12-31 10:28 ?0次下載

    零基礎(chǔ)學(xué)習(xí)LEBVIEW】08 智能儀器

    零基礎(chǔ)學(xué)習(xí)LEBVIEW】08 智能儀器,感興趣的朋友一定要學(xué)習(xí)。
    發(fā)表于 12-31 10:28 ?0次下載

    FPGA零基礎(chǔ)入門教程

    本文檔的主要內(nèi)容詳細(xì)介紹的是FPGA零基礎(chǔ)入門教程免費(fèi)下載。
    發(fā)表于 01-18 16:47 ?55次下載
    <b class='flag-5'>FPGA</b>的<b class='flag-5'>零基</b>礎(chǔ)入門教程

    FPGA零基礎(chǔ)學(xué)習(xí)Vivado-按鍵使用教程

    系統(tǒng)性的掌握技術(shù)開發(fā)以及相關(guān)要求,對個人就業(yè)以及職業(yè)發(fā)展都有著潛在的幫助,希望對大家有所幫助。本次帶來Vivado系列,按鍵的使用教程。話不多說,上貨。
    的頭像 發(fā)表于 04-28 14:01 ?1335次閱讀
    <b class='flag-5'>FPGA</b><b class='flag-5'>零基</b>礎(chǔ)<b class='flag-5'>學(xué)習(xí)</b><b class='flag-5'>之</b><b class='flag-5'>Vivado</b>-按鍵使用教程

    【教程分享】FPGA零基礎(chǔ)學(xué)習(xí):UART協(xié)議驅(qū)動設(shè)計

    系統(tǒng)性學(xué)習(xí)的機(jī)會。 系統(tǒng)性的掌握技術(shù)開發(fā)以及相關(guān)要求,對個人就業(yè)以及職業(yè)發(fā)展都有著潛在的幫助,希望對大家有所幫助。后續(xù)會陸續(xù)更新 Xilinx 的 Vivado、ISE 及相關(guān)操作軟件的開發(fā)的相關(guān)內(nèi)容,學(xué)習(xí)
    的頭像 發(fā)表于 06-27 08:20 ?876次閱讀