《電子技術應用》
您所在的位置:首頁 > 通信與網絡 > 設計應用 > FPGA和單片機的串行通信接口設計
FPGA和單片機的串行通信接口設計
來源:與非網
摘要: 現場可編程邏輯器件(FPGA)在高速采集系統中的應用越來越廣,由于FPGA對采集到的數據的處理能力比較差,故需要將其采集到的數據送到其他CPU系統來實現數據的處理功能,這就使FPGA系統與其他CPU系統之間的數據通信提到日程上,得到人們的急切關注。本文介紹利用VHDL語言實現FPGA與單片機的串口異步通信電路。
關鍵詞: FPGA 單片機 通信 接口
Abstract:
Key words :

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; 其中各信號的說明已在程序中標明了。波形仿真圖如圖1所示。

圖1 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的設置即可實現。
3 總結
目前電子產品的開發中經常要綜合運用EDA技術、計算機控制技術、數字信號處理技術,那么電路各部分經常需要數據交換。本文也是基于此給出這方面應用的實例,供開發者交流。

此內容為AET網站原創,未經授權禁止轉載。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
99www免费人成精品| 午夜精品久久久久久久男人的天堂| 欧美日韩另类综合| 裸体歌舞表演一区二区| 欧美一区二区精品久久911| 99国内精品久久| 亚洲成人在线视频播放 | 亚洲精品午夜| 亚洲国产精品v| 国内免费精品永久在线视频| 国产精品久久久久久久午夜片| 欧美噜噜久久久xxx| 欧美成年网站| 久久综合伊人77777麻豆| 久久久久久国产精品一区| 性色av香蕉一区二区| 午夜在线一区| 欧美一区三区三区高中清蜜桃| 亚洲欧美伊人| 午夜精品视频在线观看一区二区| 亚洲综合色在线| 亚洲在线观看免费视频| 国产精品99久久久久久www| 一区二区三区精品久久久| 夜夜夜精品看看| 在线天堂一区av电影| 一区二区免费看| 亚洲无线视频| 午夜国产精品视频| 久久黄色小说| 久久综合色婷婷| 欧美成年人视频网站| 欧美搞黄网站| 欧美日韩性生活视频| 亚洲精品自在久久| 亚洲深夜激情| 亚洲黄网站在线观看| 亚洲日本aⅴ片在线观看香蕉| 亚洲精品国产拍免费91在线| 日韩视频免费| 亚洲视频自拍偷拍| 午夜国产一区| 亚洲高清在线观看一区| 亚洲精品中文字幕女同| 在线综合亚洲| 欧美一区=区| 久久免费的精品国产v∧| 免费成人你懂的| 欧美日韩福利| 国产欧美午夜| 在线免费观看一区二区三区| 亚洲人体1000| 亚洲一区二区在线免费观看| 欧美在线黄色| 99这里有精品| 欧美一区二区三区免费看| 久久天天狠狠| 欧美日本免费| 国产日韩精品在线观看| 亚洲电影在线看| 亚洲一品av免费观看| 亚洲高清影视| 亚洲影院一区| 另类尿喷潮videofree| 欧美日韩免费一区| 国产中文一区| 99在线热播精品免费| 午夜亚洲精品| 日韩一级视频免费观看在线| 午夜伦欧美伦电影理论片| 久久亚洲高清| 欧美三级电影一区| 黄色精品网站| 一区二区电影免费观看| 欧美在线free| 亚洲午夜国产一区99re久久| 久久久久久久久久码影片| 欧美日韩国产免费| 国内精品视频666| 亚洲一区二区三区四区在线观看| 亚洲国产精品高清久久久| 亚洲永久免费观看| 欧美成人综合在线| 国产三区精品| 99成人在线| 亚洲韩日在线| 欧美呦呦网站| 欧美日韩三级电影在线| 一区二区在线观看视频| 亚洲一区二区日本| 日韩一级精品视频在线观看| 久久久久免费| 国产精品萝li| 亚洲日本成人女熟在线观看| 久久成人一区| 午夜精品视频在线观看一区二区| 欧美精品aa| 韩日欧美一区二区| 亚洲制服丝袜在线| 一本一本a久久| 免费日韩一区二区| 国产啪精品视频| 亚洲视频中文| 欧美日韩国产va另类| 夜夜嗨av色一区二区不卡| 久久动漫亚洲| 午夜精品福利电影| 欧美日韩免费一区| 亚洲高清久久久| 亚洲丰满在线| 久久一综合视频| 国产欧美精品在线| 亚洲午夜在线视频| 中日韩视频在线观看| 欧美成ee人免费视频| 激情综合色综合久久综合| 午夜欧美理论片| 亚洲欧美日韩国产综合| 欧美日韩一区二区三区| 亚洲精品视频二区| 亚洲精品乱码久久久久久| 鲁大师影院一区二区三区| 国产一区二区三区免费在线观看| 亚洲伊人一本大道中文字幕| 亚洲在线观看视频| 欧美日韩一级视频| 日韩午夜电影av| aa日韩免费精品视频一| 欧美精品成人一区二区在线观看 | 国产一区香蕉久久| 亚洲欧美精品中文字幕在线| 亚洲欧美日韩一区在线| 国产精品久久久久久五月尺| 亚洲视频视频在线| 亚洲自拍三区| 国产精品久久一区二区三区| 亚洲一区二区在线免费观看| 欧美亚洲系列| 国产欧美一级| 欧美影院成年免费版| 久久综合导航| 1000部精品久久久久久久久| 亚洲美女诱惑| 欧美三级午夜理伦三级中文幕| 一个人看的www久久| 亚洲欧美日本精品| 国产伦精品一区二区三区在线观看 | 在线性视频日韩欧美| 亚洲欧美日本视频在线观看| 国产精品视频久久| 欧美一区二区三区日韩| 久久久久久久久久久一区| 在线播放豆国产99亚洲| 99精品视频免费在线观看| 欧美色区777第一页| 亚洲综合色网站| 久久久天天操| 亚洲国产一区二区视频| 亚洲午夜性刺激影院| 国产精品自拍一区| 亚洲第一福利在线观看| 欧美国产精品人人做人人爱| 99视频一区| 久久精品水蜜桃av综合天堂| 亚洲国产高清在线| 亚洲影院免费| 国内久久婷婷综合| 99re热这里只有精品免费视频| 国产精品激情偷乱一区二区∴| 午夜精品电影| 欧美成人黄色小视频| 亚洲私人影院| 久久视频精品在线| 日韩天堂在线观看| 久久av一区二区| 亚洲高清不卡| 亚洲女女做受ⅹxx高潮| 国产一区视频网站| 夜夜嗨av一区二区三区中文字幕| 国产美女诱惑一区二区| 最新69国产成人精品视频免费| 欧美日韩中文精品| 久久成人精品电影| 欧美色123| 亚洲国产另类久久精品| 国产精品国产三级国产aⅴ无密码| 久久激情五月激情| 欧美视频免费在线| 亚洲国产乱码最新视频| 欧美视频在线一区| 久久精品久久99精品久久| 欧美视频官网| 91久久国产综合久久91精品网站| 欧美亚洲第一页| 亚洲人体1000| 国产欧美日韩不卡| 一区二区日韩精品| 在线成人激情| 久久av红桃一区二区小说| 99国产麻豆精品|