自己手動新建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 電路功能設計 在系統設計之前,首先要...