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口是最灵活的操作方式。