FPGA開發記錄(三)

2021-10-23 18:28:01 字數 3143 閱讀 8806

自己手動新建vhdl或者verilog檔案,寫好實體名,編譯,便會自動生產實體並且繫結檔案。

process語句中是順序執行和並行執行皆有,對於訊號,<=的賦值是同時進行賦值的,而且訊號的<=會自帶乙個小延遲δ

\delta

δ,因此對於

a<= c_i;

b<= a;

c_o<=b;

型別的賦值,都是變化前的值,即δ

\delta

δ之前的值。可以理解為,a要在δ

\delta

δ之後才會被賦值吃c_i,因此b的賦值是變化前的a,c_o的賦值是變化前的b。電路實現就是暫存器,b得到的是暫存器中a變化前的值,同理c_o。

對於變數,他的賦值:=的立即進行的,因此process中的順序執行就是把變數全部處理完之後進行的賦值。變數只能宣告在process中,可以把變數理解成「預編譯」,他只是方便設計的,經過預先的計算後需要落實到電路圖上,而電路圖是沒有序列的說法的。

最後,注意組合邏輯和時序邏輯的區別,組合邏輯的敏感訊號就是右邊賦值的訊號,可以看成一根電線,電線左邊變了,右邊能不變化嗎。時序邏輯就是以觸發器為基礎的,具有暫存器性質的電路,不完整的if語句會產生時序電路。

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_arith.all;

use ieee.std_logic_unsigned.all;

entity test is

port(

clk: in std_logic;

c_i1: in std_logic;

c_i2: in std_logic;

c_o: out std_logic

);end test;

architecture test1 of test is

signal a, b: std_logic;

begin

-- process(clk)

-- variable a, b: std_logic;

-- begin

-- if(clk'event and clk = '1')then

-- a:= c_i;

-- b:= a;

-- c_o<=b;

-- end if;

-- end process;

-- process(clk)

-- begin

-- if(clk'event and clk = '1')then

-- a<= c_i;

-- b<= a;

-- c_o<=b;

-- end if;

-- end process;

--a<=c_i1 and c_i2;

--b<=c_i2 or c_i1;

--c_o<=a and b;

process(a,b,c_i1,c_i2)

begin

a<=c_i1 and c_i2;

b<=c_i2 or c_i1;

c_o<=a and b;

end process;

end test1;

以上**的組合邏輯部分產生的電路沒有區別。process中的敏感訊號必須寫全,否則就會產生時序邏輯!

FPGA開發之FPGA開發流程簡介

我以前一直很疑惑晶元設計這一塊在實際中是怎麼做的呢?今天了解了一下,現在設計晶元一般採用fpga開發,大概流程如下 1 功能定義 器件選型 設計晶元之前當然你要知道你設計的晶元有什麼功能,然後就模組化,寫清楚誰誰誰幹什麼,這當然就是從上至下的方法,你試試從下到上給我看看。2 設計輸入 這一步就是說我...

SDC APP 開發記錄(三)

安裝交叉編譯器 su root source arm himix200 linux.install 1.arm tab arm himix200 linux addr2line arm himix200 linux g arm himix200 linux gcov tool arm himix20...

FPGA開發流程

fpga的設計流程就是利用eda開發軟體和程式設計工具對fpga晶元進行開發的過程。fpga的開發流程一般如圖1 6所示,包括電路設計 設計輸入 功 能 綜合優化 綜合後 實現 佈線後 板級 以及晶元程式設計與除錯等主要步驟。圖1 6 fpga開發的一般流程 1 電路功能設計 在系統設計之前,首先要...