A. 單片機和fpga的spi並行通信怎麼下啊,能給我寫代碼么
有以下幾種辦法:
1.使用8951的外部定址方式,將單片機的數據匯流排 部分地址匯流排和控制匯流排連接到CPLD 然後再CPLD里根據單片機的外部定址時序讀取數據,這種方式CPLD處理最簡單,速度最快。但缺點是需要連接的線很多
2.串列方式通信:這個和協議有關系,選一種比較好的推薦一下
1)普通的UART那種串列通信方式一個起始位 8位數據位 一個結束位 CPLD檢測到下降沿認為新的數據到來,然後開始將埠的數據讀入 當然波特率要你自己來定
2)SPI 方式 這需要單片機測用埠模擬 兩個數據線 一個時鍾線
CPLD只要檢測到上升沿就開始讀入數據
UART方式簡單 因為51單片機內部本身就集成了串列通訊的外設 但SPI通信速度快
希望對你有幫助!
B. fpga晶元怎麼與單片機晶元通信
1、可以在FPGA上編一個串口,就可以和單片機通信了
2、定義一組IO,一定的時序和單片機以並行方式進行通信(對於單片機來說有點浪費介面資源)
FPGA等於一個空白的晶元,什麼都沒有。你需要什麼功能,都是要自己編程實現的。
FPGA晶元直接通過單片機來進行功能編程??
看來您還不了解FPGA到底是個什麼東西啊....簡單的說,不能。
您需要通過開發環境,比如Altera的Quartus或者Xilinx的ISE來為FPGA編程,就像單片機編程一樣的,這樣FPGA才能開始為您工作。否則它就是白紙一張,沒有任何作用的。
「配置」可以認為是把程序「燒錄」到FPGA上,或者叫「初始化」FPGA,這個和通常意義上的通訊不一樣的,此時,FPGA還沒有開始正式工作。
配置可以用專用的晶元,「從模式」也可以,不過我沒用過。FLASH架構的FPGA則不需要配置,上電即行。但是FPGA的程序都已經是事先做好的了。
C. 單片機與FPGA的通信方式有哪幾種
串列通信就是用一根數據線通信咯,具體協議有SPI,I2C,UART等USB也是串列通信哦
並行通信是用多根數據線來通信,匯流排類型就多了,什麼AVALON WISHBONE AHB PCI ISA等等都是了
D. fpga和51單片機之間怎麼通信
你這個設計對於51單片機來說,如果直接按照樓上的匯流排對接,pina和pinb那就是48哥引腳。51單片機有幾個型號有6個port口啊。 個人建議:不考慮實時性的話。在FPGA上設計一個數據介面,SPI的。或者8pin串口加data clk的。 48個數據通訊的方式有個IC是AD9852的。也是MCU和IC通信,數據量為48bit。你可以參考設計一個FPGA上的通信io。
E. 誰能告訴我51單片機和fpga怎樣通信啊不知道怎麼寫verilog程序。誰有這方面的資料傳給我呀!
單純這種資料是肯定沒有的,這些都是實踐一下就會了的。
單片機和fpga通信需要注意的地方:
1、電平要一樣,不要一個3.3v,一個5v,這個在fgpa中應該可以設置的。
2、先定一個通信協議,就相當於二者通信要握手,比如,單片機要給fpga發送數據,要先發一個准備好信號,fpga接受之後要返回一個已接受信號,讓單片機發下一個數據。就是類似這樣的協議。
3、還有一個比較關鍵的,就是除燥,尤其是單片機的信號可能要送到fpga當時鍾,更要除燥,否則出不來結果。
不要寄希望於資料了,自己實踐一下才能真正掌握。
F. FPGA與51單片機之間的通信
關於時鍾問題,單片機的時鍾可以用fpga分頻得到!
最簡單的通信模式就是你自己寫通信時序,自己隨便定義讀寫管腳,不知樓主對單片機和fpga掌握到什麼程度,不一定非要用它本身的讀寫管腳,自己定義任意I/O口是最靈活的操作方式!
G. 請問FPGA是如何與單片機通訊的
1 前言
現場可編程邏輯器件(FPGA)在高速採集系統中的應用越來越廣,由於FPGA
對採集到的數據的處理能力比較差,故需要將其採集到的數據送到其他CPU 系統
來實現數據的處理功能,這就使FPGA 系統與其他CPU 系統之間的數據通信提到
日程上,得到人們的急切關注。本文介紹利用VHDL 語言實現 FPGA 與單片機
的串口非同步通信電路。
整個設計採用模塊化的設計思想,可分為四個模塊:FPGA 數據發送模塊,
FPGA 波特率發生控制模塊,FPGA 總體介面模塊以及單片機數據接收模塊。本
文著重對FPGA 數據發送模塊實現進行說明。
2 FPGA 數據發送模塊的設計
根據RS232 非同步串列通信來的幀格式,在FPGA 發送模塊中採用的每一幀
格式為:1 位開始位+8 位數據位+1 位奇校驗位+1 位停止位,波特率為2400。本
系統設計的是將一個16 位的數據封裝成高位幀和低位幀兩個幀進行發送,先發
送低位幀, 再發送高位幀, 在傳輸數據時, 加上文件頭和數據長度, 文件頭用
555555 來表示,只有單片機收到555555 時,才將下面傳輸的數據長度和數據位
進行接收,並進行奇校驗位的檢驗,正確就對收到的數據進行存儲處理功能,數
據長度可以根據需要任意改變。由設置的波特率可以算出分頻系數,具體演算法為
分頻系數X=CLK/(BOUND*2)。可由此式算出所需的任意波特率。下面是實現上
述功能的VHDL 源程序。
Library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
entity atel2_bin is
port( txclk: in std_logic; --2400Hz 的波特率時鍾
reset: in std_logic; --復位信號
din: in std_logic_vector(15 downto 0); --發送的數據
start: in std_logic; --允許傳輸信號
sout: out std_logic --串列輸出埠
);
end atel2_bin;
architecture behav of atel2_bin is
signal thr,len: std_logic_vector(15 downto 0);
signal txcnt_r: std_logic_vector(2 downto 0);
signal sout1: std_logic;
signal cou: integer:=0;
signal oddb:std_logic;
type s is(start1,start2,shift1,shift2,odd1,odd2,stop1,stop2);
signal state:s:=start1;
begin
process(txclk)
begin
if rising_edge(txclk) then
if cou<3 then thr<="0000000001010101"; --發送的文件頭
elsif cou=3 then
thr<="0000000000000010"; --發送的文件長度
elsif (cou>3 and state=stop2) then thr<=din;--發送的數據
end if;
end if;
end process;
process(reset,txclk)
variable tsr,tsr1,oddb1,oddb2: std_logic_vector(7 downto 0);
begin
if reset='1' then
txcnt_r<=(others=>'0');
sout1<='1';
state<=start1;
cou<=0;
elsif txclk'event and txclk='1' then
case state is
when start1=>
if start='1' then
if cou=3 then
len<=thr;
end if;
tsr:=thr(7 downto 0);
oddb1:=thr(7 downto 0);
sout1<='0'; --起始位
txcnt_r<=(others=>'0');
state<=shift1;
else
state<=start1;
end if;
when shift1=>
oddb<=oddb1(7) xor oddb1(6) xor oddb1(5) xor oddb1(4) xor
oddb1(3) xor oddb1(2) xor oddb1(1) xor oddb1(0);
sout1<=tsr(0); --數據位
tsr(6 downto 0):=tsr(7 downto 1);
tsr(7):='0';
txcnt_r<=txcnt_r+1;
if (txcnt_r=7) then
state<=odd1;cou<=cou+1;
end if;
when odd1=> --奇校驗位
if oddb='1' then
sout1<='0';state<=stop1;
else
sout1<='1';state<=stop1;
end if;
when stop1=>
sout1<='1'; --停止位
if cou<4 then
state<=start1;
else
state<=start2;
end if;
when start2=>
tsr1:=thr(15 downto 8);
oddb2:=thr(15 downto 8);
sout1<='0'; --起始位
txcnt_r<=(others=>'0');
state<=shift2;
when shift2=>
oddb<=oddb2(7) xor oddb2(6) xor oddb2(5) xor oddb2(4) xor
oddb2(3) xor oddb2(2) xor oddb2(1) xor oddb2(0);
sout1<=tsr1(0);--數據位
tsr1(6 downto 0):=tsr1(7 downto 1);
tsr1(7):='0';
txcnt_r<=txcnt_r+1;
if (txcnt_r=7) then
state<=odd2;
end if;
when odd2=> --奇校驗位
if oddb='1' then
sout1<='0';state<=stop2;
else
sout1<='1';state<=stop2;
end if;
when stop2=>
sout1<='1'; --停止位
if len="0000000000000000" then
state<=stop2;
else
state<=start1;
len<=len-1;
end if;
end case;
end if;
end process;
sout<=sout1;
end behav;
其中各信號的說明已在程序中標明了。波形模擬圖如圖2 所示。
圖2 FPGA 數據發送時序模擬圖
圖中Din 寫入值為3355H,波特率為2400Hz,Start 信號始終置邏輯1,即隨時都
能發送數據。Reset 信號邏輯1 時復位,邏輯0 時電路開始工作。THR 是數據寄
存器,文件頭、數據長度以及數據位都先寄存到THR 中,Len 是數據長度,TSR
是低8 位數據幀寄存器,TSR1 是高8 位數據幀寄存器。數據長度Len 定為02H,
發送時先發送低8 位55H,後發送高8 位33H,一共發送兩遍。發送的數據格式
說明: 當發送55H 時, 其二進制為01010101, 則發送的數據的二進制數為
00101010111( 1 位開始位+8 位數據位+1 位奇校驗位+1 位停止位)。
單片機部分先對FPGA 發送過來的文件頭進行確認,正確就接收文件,否則
放棄接收的數據。根據FPGA 發送模塊的協議,對串口控制寄存器SCON 和波特
率控制寄存器PCON 的設置即可實現。
流程圖發不上來,沒有空間,要的話 留個郵箱給我!
H. 單片機與fpga通信
個人認為用SPI通信最為簡單,其他方式在FPGA上實現起來比較麻煩
I. 如何讓51單片機與FPGA通信啊
最簡單的通信模式就是自己寫通信時序;
自己隨便定義讀寫管腳,不知對單片機和fpga掌握到什麼程度,不一定非要用它本身的讀寫管腳,自己定義任意I/O口是最靈活的操作方式。