原创 環形、扭環、LFSR計數器

目錄 環形計數器 扭環計數器 線性反饋移位寄存器 從這個題目來談起今天的話題:移位寄存器由8級觸發器構成,則構成的扭環計數器有多少個有效狀態?環形計數器?線性反饋移位寄存器? 環形計數器 規則:環形計算器的規則是利用一個移位寄

原创 Verilog中Case語句

實際問題中常常需要用到多分支選擇,使用if語句導致內容繁瑣;更明智的做法是使用case語句,case語句是一種多分支選擇語句,可以方便的處理多分支選擇。本文通過實際例子,講解case語句的使用,以及case語句的變體casez和casex

原创 FPGA/DSP編程思想---乒乓操作

乒乓操作是DSP以及FPGA中一種常見的處理方式,多用於數據流控制的場合。本文從實際例子出發,介紹了乒乓操作的思想,分析了乒乓操作帶來的優勢。 問題:SAR實時處理系統的一個常見情況就是,數據接收模塊錄取雷達回波,數據處理模塊對存儲下來的

原创 FPGA芯片內兩種存儲器資源

 FPGA芯片內有兩種存儲器資源:一種叫BLOCK RAM,另一種是由LUT配置成的內部存儲器(分佈式RAM-Distribute RAM)。 BLOCK RAM由一定數量固定大小的存儲塊構成的。 使用BLOCK RAM資源不佔用額外的邏

原创 Verilog中常見文件操作($readmemb,$fopen,$fwrite,$fclose)

目錄   一、$readmemb/$readmemh 二、$fopen,$fwrite,$fclose 三、仿真驗證 四、參考 一、$readmemb/$readmemh $readmemb和$readmemh用來從文件中讀取數據到存儲器

原创 Verilog基礎 門級建模

與門(and)和或門(or):與門、或門都有一個標量輸出端和多個標量輸入端。門的端口列表中的第一個端口必是輸出端口,其後爲輸入端口。當任意一個輸入端口的值發生變化時,輸出端的值立即重新計算。verilog中可以使用的屬於與/或門

原创 FPGA設計中如何才能不出現Latch鎖存器

結論: 並不是寫了IF不寫ELSE或者CASE中不加default就產生Latch,也不是說加上else就不產生Latch。 看當前時刻數據會不會保持(a=a),如果有數據的保持就會產生鎖存器。 仿真: 設計1: module latc

原创 ISE聯合Modelsim仿真失敗的解決辦法

問題: ISE聯合Modelsim進行功能仿真,但是Moldelsim喚起失敗,顯示錯誤爲:編譯庫的路徑未包含。如下: 解決: 由報錯信息,錯誤原因爲:編譯庫的路徑未包含。需要添加編譯庫路徑: 點擊Process->Process Pr

原创 LED驅動實驗

眼高手低不可取,必須動手去做去調才能逐漸進步。本文是一個簡單的FPGA工程,實現了根據按鍵輸入,對應不同LED輸出的簡單功能。包含了實驗資源介紹,仿真內容,實驗過程,Verilog設計代碼,以及功能/時序仿真,詳細展示了FPGA的開發流程

原创 寄存器輸出的不穩定態及格雷碼消除

解釋了不定態與不穩定態的概念,隨後分析了不穩定態的出現原因,並進一步通過格雷碼編碼來避免不穩定態的出現。最後對格雷碼只能用於2的冪次數個狀態消除不穩定態的說法進行分析,得到一個更加合理的結論。 目錄 一、概念辨析 二、格雷碼用於消除不穩定

原创 總線基本概念及兩種簡單實現

從賦值衝突以及設備信息交互對電路帶來的問題入手,分析了總線設計的必要性。介紹了總線的工作機理,以及優缺點。並進一步對總線的兩種實現方式進行分析。 目錄 一、總線的基本概念 1、使用總線的必要性 (1)變量訪問思路:“一寫多讀” (2)總線

原创 Verilog的三種描述方式(結構化描述、數據流描述、行爲級描述)

Verilog對電路功能的描述有三種方式:結構化描述、數據流描述、行爲級描述。三種描述方式抽象級別不同,各有優缺點,相輔相成,需要配合使用。 目錄 一、結構化描述 1、概念 2、特點 3、示例 真值表: 電路抽象: 實現代碼: 測試文件:

原创 Verilog/VHDL良好的編程風格(命名、語法結構、代碼風格)

好的代碼風格至關重要,不僅便於自己日後理解以前的代碼,也給他人閱讀帶來白便利;良好代碼風格的獲得,首先需要遵循一定的規則,再加上不斷歷練,才得以最終形成。本文記錄了《FPGA之道》中的一些建議,作爲以後編程的準則。 目錄 一、代碼風格 1

原创 Verilog中按鍵消抖檢測的實現

Verilog按鍵消抖是FPGA學習時的一個入門教程,爲避免眼高手低,還是再次分析與記錄一下。此處着重介紹按鍵消抖的基本原理,對按鍵消抖與檢測的關鍵技術進行分析,並進行功能仿真。 一、按鍵消抖基本原理 1、按鍵消抖必要性 物理按鍵釋放與按

原创 Verilog實現二進制碼與格雷碼轉換

格雷碼是一種常見的編碼方式,相鄰狀態間只有一位不同;這就意味着相鄰兩個狀態間進行轉換時,只有一位發生變化,因而極大的減小了出錯機率。(反之,如果使用二進制編碼,如011->100時三位均發生改變,因此出錯的機率就會大大增加)。格雷碼以及其