<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
創作中心

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

3天內不再提示

FPGA的入門基礎知識詳細說明

Wildesbeast ? 來源:電子工程專輯 ? 作者:電子工程專輯 ? 2020-12-20 10:13 ? 次閱讀

Verilog基礎語法

570b6f2767ee480ba99da7064705679d.png

1.1 可綜合模塊

以module為單元,具體實現如下:

5a2b6b6a5c0049f29e6650a371b09554.png

1.1.1 時序邏輯

以異步觸發的D觸發器為例,時序邏輯在always塊里實現。

4ba021f11ced47e890499cbacd49b4a6.png

主要注意點:

1. 聲明模塊時,輸入變量一定是wire類型。

2. 聲明模塊時,輸出變量可以是wire,也可以是reg, reg變量只能在always塊中賦值。

3. 敏感列表既可以是邊沿觸發,也可以是電平觸發。

4. 沿觸發的邏輯里,一定采用的是非阻塞觸發《=。

1.1.2 組合邏輯

以數據選擇器為例,組合邏輯通常使用assign語句賦值。

851ed320caf14bddbc9ae648105002b8.png

5af1c633bf5e420fa7a43fc86556c925.png

主要注意點:

1. sel = 0時,c = a;sel = 1時,c =b,即二選一數據選擇器。四選一則有兩個選擇端,四個輸入端,八選一則是三個選擇端,八個輸入端。

2. wire 變量一定要用連續賦值語句賦值,而且必須用阻塞賦值。

1.2 仿真模塊

仿真模塊和可綜合模塊的區別:

可綜合模塊最終生成的bit文件會燒錄進芯片運行,而仿真模塊編譯過后是在仿真軟件(例如modelsim)上運行的。仿真模塊是基于可綜合模塊進行例化,并通過仿真軟件的模擬,可以初步驗證我們寫的可綜合模塊的實現現象。

以計數器為例,可綜合模塊如下:

727552d2c30f4d4aa5f00a02f6cddacc.png

基于以上可綜合模塊的仿真模塊如下:

10855adad73440a18e7f2e16b18c0795.png

1. 仿真的模塊聲明不需要輸入列表。

2. initial塊只能對【寄存器】量進行賦值。

3. 例化模塊時,如果原始模塊是輸出變量,則括號內必須【wire變量】。

HDL常見例子

2.1 譯碼器

2.1.1 可綜合模塊(case語句)

此模塊用case實現了一個數據選擇的功能,先產生了一個8位計數器,通過判斷計數器的值來輸出不同的取值,當計數器計數到1時,o_data和o_dv分別輸出5和1,當計數器為2時,輸出7和1,其余均輸出0。(Note:Case語句常常運用于狀態機中狀態的判斷)

c52af06c0c1640d3b63532306559980c.png

f692d8d2437047228cf92c882b0ba577.png

Case語句注意點:

必須有default語句,否則會形成鎖存器。

2.1.2 仿真模塊

7f7bcce94b9a43b99038bd859e292818.png

2.2 狀態機

由于FPGA內部語句塊都是并行運行的,當我們希望FPGA按照順序執行我們的語句時,就會用到狀態機。

下面例子是使用狀態機模擬的一個簡單的自動售貨機,該售貨機中的商品 2.5 元一件,每次投幣既能投入 1 元,也能投入 0.5 元,當投入 3 元時,需要設定找零。

2.2.1 狀態圖

0f55ce9b507043da8da118adbcdbdbe8.png

2.2.2 可綜合模塊(2段式狀態機)

19f0b246e53945c4862b45b507dc817d.png

0b43c666631d461c928c8b50f9aed591.png

407386d637f149f7bbe990fc416b5187.png

2.2.3 仿真模塊

3a6eb27c0c9f404d85badc90d0cde82f.png

2.2.4 仿真腳本

仿真腳本可以省去人工操作modelsim軟件圖形頁面的步驟,運行腳本,modelsim可以根據腳本命令自動運行包括創建工作目錄,編譯文件,啟動仿真等步驟,以下是本例中的仿真腳本。

142847a09b044555a02bc5306f3d0589.png

仿真腳本編寫好后,只需要進入仿真軟件(本例使用的是modelsim),改變當前路徑到腳本保存的路徑,然后在modelsim命令行輸入 do [腳本文件名] 即可。

dada5945294640e3844a9a8998aeb71c.png

仿真結果:

2.2.5 上板測試

上板測試對原來的條件做了一定改動更方便觀測結果,輸入和輸出分別使用的按鍵和LED燈,測試版使用的是Anlogic的EF3L40CG332B_DEV,實現的功能如下:

① 在開發板上完成自動售貨機的實驗,投幣的動作通過按鍵實現, 當按一次按鍵(按下到抬起算一次),算作投幣一次。

③ 當投入總金額為 5 毛時, led 燈亮一個,投入總金額為 1 元時, led 燈亮兩個, 投入總金額為 1.5 元時, led 燈亮三個, 投入總金額為 2 元時, led 亮四個, 用單向流水燈效果充當出可樂并且不找零的情況,用雙向流水燈效果充當既出可樂又找零的情況。流水燈持續十秒后熄滅,狀態回到初始狀態。

重新設計狀態圖如下:

598f72ee4dc1426da5af9c1053870c24.png

代碼詳見工程fsm_key,筆記不再贅述,此次筆記主要記錄關于頂層模塊和例化的相關知識點:

工程目錄如下所示:

9c0dbc26980642479dc3af9e51506645.png

各模塊之間的關系是:

頂層文件是fsm.v,在fsm.v中調用了模塊led_water_single,led_Water_double和key_debounce,這三個模塊的功能分別是單向流水燈,雙向流水燈和按鍵消抖。想在頂層文件中調用對應的模塊需要在頂層文件中對相應的模塊進行例化,以單向流水燈為例。

單向流水燈的聲明如下:

02887743b5ed4341a6169c25b1947dcd.png

(具體功能實現代碼略,如有需要,請登錄www.fortune-co.com留言)

那么在fsm.v中例化方法如下:

括號外的信號是對應的聲明信號;括號內的信號是從fsm模塊中傳入的信號,該信號名稱可以自定義。

整個工程的框架如下:(由于本實驗沒有另外寫一個總的TOP文件,而是將例化和狀態機信號處理都放在了fsm模塊中,因此top層和狀態機模塊都標注的是fsm)

其中key05,key10,就是從外界接入的信號,led[7:0]即輸出信號。接入信號我們要引到對應的按鍵,可以參考EF3L40CG332B_DEV的原理圖:

a81a462aed3740ecac2eee8683c1e980.png

7113f3138e0a4a3d9ec87bd94800808f.png

SW2和SW3對應的FPGA的管腳分別是R19和R20,同理可查,八個led的對應腳,并寫出相應的管腳約束文件:

管腳約束文件寫完后,在可綜合模塊頂層文件中的輸入輸出信號就會對應到相應的物理輸入輸出,也可以使用圖形頁面設置。

完成后編譯下載到板子上觀測現象。

在本次實驗的過程中也發生了一個編程錯誤問題,剛編寫完上板測試時發現結果和預想的有差異,具體錯處在輸入3元進入雙向流水燈的狀態時,雙向流水燈正向流水正常,當反向流水時,在倒數第二個燈會卡住,然后反復亮滅倒數一二個燈,沒法完成反向流水。

由于第一次正向流水是正常的,因此推測是在反向流水時有條件判斷錯誤使得反向流水無法正常運行,進入到led_water_double模塊關于反向流水燈的操作模塊,經查驗發現是設置翻轉標志的時候判斷條件寫錯了。

判斷條件應該是led == 8’b1111_1110,更改后,實驗現象符合預期要求。

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

    關注

    1604

    文章

    21339

    瀏覽量

    594017
  • Verilog
    +關注

    關注

    28

    文章

    1327

    瀏覽量

    109409
  • 觸發器
    +關注

    關注

    14

    文章

    1790

    瀏覽量

    60485
收藏 人收藏

    評論

    相關推薦

    哪有FPGA的verilog編程基礎知識?

    沒接觸過FPGA開發,那個verilog編程有什么入門基礎知識學習的?
    發表于 04-29 23:09

    FPGA教程之CPLD與FPGA基礎知識說明

    本文檔詳細介紹的是FPGA教程之CPLD與FPGA基礎知識說明主要內容包括了:一、復雜可編程邏輯器件簡介二、CPLD的組成與特點三、
    發表于 02-27 17:09 ?32次下載
    <b class='flag-5'>FPGA</b>教程之CPLD與<b class='flag-5'>FPGA</b>的<b class='flag-5'>基礎知識</b><b class='flag-5'>說明</b>

    FPGA視頻教程之FPGA和CPLD與VHDL基礎知識詳細資料說明

    本文檔的主要內容詳細介紹的是FPGA視頻教程之FPGA和CPLD與VHDL基礎知識詳細資料說明
    發表于 03-20 14:35 ?9次下載
    <b class='flag-5'>FPGA</b>視頻教程之<b class='flag-5'>FPGA</b>和CPLD與VHDL<b class='flag-5'>基礎知識</b>的<b class='flag-5'>詳細</b>資料<b class='flag-5'>說明</b>

    FPGA視頻教程之SOPC builder的詳細基礎知識說明

    本文檔的主要內容詳細介紹的是FPGA視頻教程之SOPC builder的詳細基礎知識說明。主要目的是:1.在嵌入式系統中使用PLD,2.SO
    發表于 03-21 16:54 ?8次下載
    <b class='flag-5'>FPGA</b>視頻教程之SOPC builder的<b class='flag-5'>詳細</b><b class='flag-5'>基礎知識</b><b class='flag-5'>說明</b>

    FPGA教程之FPGA入門閃爍燈實驗的詳細資料說明

    本文檔的主要內容詳細介紹的是FPGA教程之FPGA入門閃爍燈實驗的詳細資料說明。
    發表于 03-29 17:17 ?25次下載
    <b class='flag-5'>FPGA</b>教程之<b class='flag-5'>FPGA</b><b class='flag-5'>入門</b>閃爍燈實驗的<b class='flag-5'>詳細</b>資料<b class='flag-5'>說明</b>

    51單片機場效應管的基礎知識詳細說明

    本文檔的主要內容詳細介紹的是51單片機場效應管的基礎知識詳細說明。
    發表于 08-23 17:30 ?8次下載
    51單片機場效應管的<b class='flag-5'>基礎知識</b><b class='flag-5'>詳細說明</b>

    手機維修的基礎知識詳細說明

    本文檔的主要內容詳細介紹的是手機維修的基礎知識詳細說明包括了:一、發展歷史,二 、手機的條碼,三、手機的維修常用工具
    發表于 12-27 08:00 ?22次下載
    手機維修的<b class='flag-5'>基礎知識</b><b class='flag-5'>詳細說明</b>

    射頻的基礎知識培訓教程詳細說明

    本文檔的做作業內容詳細介紹的是華為射頻的基礎知識培訓教程詳細說明包括了:第一章無線通信的基本概念第二章 射頻常用計算單位簡介第三章 射頻常用概念辨析第四章 天線傳播基礎知識簡介
    發表于 03-14 08:00 ?18次下載
    射頻的<b class='flag-5'>基礎知識</b>培訓教程<b class='flag-5'>詳細說明</b>

    機器學習的基礎知識詳細說明

    本文檔的主要內容詳細介紹的是機器學習的基礎知識詳細說明。
    發表于 03-24 08:00 ?0次下載
    機器學習的<b class='flag-5'>基礎知識</b><b class='flag-5'>詳細說明</b>

    被動電子元器件的基礎知識詳細說明

    本文檔的主要內容詳細介紹的是被動電子元器件的基礎知識詳細說明包括了:常用電阻電容等無源器件的結構、分類、參數、使用等基礎知識。
    發表于 08-03 08:00 ?11次下載
    被動電子元器件的<b class='flag-5'>基礎知識</b><b class='flag-5'>詳細說明</b>

    使用FPGA設計的2個實例詳細說明

    本文檔的主要內容詳細介紹的是使用FPGA設計的2個實例詳細說明包括了:Verilog HDL 設計練習一. 簡單的組合邏輯設計,練習二. 簡單時序邏輯電路的設計
    發表于 09-23 16:48 ?11次下載
    使用<b class='flag-5'>FPGA</b>設計的2個實例<b class='flag-5'>詳細說明</b>

    Python的知識點總結詳細說明

    本文檔的主要內容詳細介紹的是Python的知識點總結詳細說明。
    發表于 09-29 17:13 ?14次下載
    Python的<b class='flag-5'>知識</b>點總結<b class='flag-5'>詳細說明</b>

    控陣天線輻射的基礎知識詳細說明

    電子發燒友網站提供《控陣天線輻射的基礎知識詳細說明.pdf》資料免費下載
    發表于 11-26 05:30 ?30次下載
    控陣天線輻射的<b class='flag-5'>基礎知識</b><b class='flag-5'>詳細說明</b>

    Xilinx FPGA IO的GTLP和HSTL電平標準的詳細說明

    本文檔的主要內容詳細介紹的是Xilinx FPGA IO的GTLP和HSTL電平標準的詳細說明。
    發表于 01-06 17:13 ?23次下載
    Xilinx <b class='flag-5'>FPGA</b> IO的GTLP和HSTL電平標準的<b class='flag-5'>詳細說明</b>

    PIC系列單片機程序設計基礎知識詳細說明

    本文檔的主要內容詳細介紹的是PIC系列單片機程序設計基礎知識詳細說明
    的頭像 發表于 04-05 18:09 ?3954次閱讀
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>