求一个用FPGA板和PC通信的小实验方案
目前组里买了块新xilinx板子ML605,想先从小实验做起,恳请大侠们赐教一些试验方案。
我的目的就是RTL实现一个计算单元(比如就一个加法运算Output=A+B),PC上可能有个C代码或者就是TXT文件把数据a和b不断地传送到FPGA上,然后等计算完毕,再由FPGA把(a+b)传送回PC上。 不要求速度,只要方便而且功能正确就行。
我水品实在太差了,对于大侠们可能不屑于说的小知识点,我查了半天手册可能越想越错。所以恳请大侠指点一二。
目前我的不成熟想法是这样:
(1) 我以前做实验用过Microblaze,然后把加法器连接到PLB上,用CF里的操作系统或者flash里的C语言来控制,但是出于某种原因,我不可以用Microblaze之类的微控制器。只能一个RTL加法器单练。
(2) ML605这个板子上有 UART (USB mini) 和 JTAG (USB mini)接线口,还有个USB2.0,那么我是不是应该用这些练到计算机上?
(3) 为了我的Verilog代码能和UART通信,是不是只要把 USB mini 对应的4根线在 UCF 文件里声明好就行了呢?
(4) 我不是学通信的,也不会用simulink,请问是不是用simulink类似的方法,直接能绕过以上细节麻烦,直接和PC通信呢?
(5) 目前我就是在PC里用TeraTerm来看COM2,记得以前有个Kermit的东东,如果我用C或者matlab来控制读写,大概应该怎么设置呢?
多谢
很多办法,pcie,pci,usb,uart,iic,spi这些接口都能实现
UART传送连个数据下去,FPGA计算,回传给PC
多谢回帖。感觉PCI之类的太高端了,不会用啊。呵呵。
我今天做了一个更小的实验,就是用Switch来控制LED灯,很成功
设计的代码如下:
module switch(SWITCHES, LEDS);
input [3:0] SWITCHES;
output [3:0] LEDS;
assignLEDS[3:0]=SWITCHES[3:0];
endmodule
对应的UCF文件如下:
NET"SWITCHES[0]" LOC="D22";
NET "SWITCHES[1]" LOC="C22";
NET "SWITCHES[2]" LOC="L21";
NET "SWITCHES[3]" LOC="L20";
NET "LEDS[0]" LOC="AC22";
NET "LEDS[1]" LOC="AC24";
NET "LEDS[2]" LOC="AE22";
NET "LEDS[3]" LOC="AE23";
多谢大侠回复。
从我今天的小实验来看,bitstream 是通过 JTAG (板子上是mini-USB) 下载到FPGA中的;
所以断电后,功能就消失了。
为了保护设备,一般不可以在上电时,把与JTAG 口的连线拔下来, 然后在插入旁边的UART (板子上也是一个mini-USB)。
这样的话,我必须采用Platform Flash来存储我的设计(bitstream 或者mcs文件),对吗?
对于实现,我是不是应该用我的“小实验” 同样的方式来在UCF文件里定义UART的管脚?
而PC这一端,我应该用什么工具和方法,把数据经由UART传进开发板?
是的,需要帮烧写flash,这样就不用每次断电之后重新下载到FPGA
PC往uart传送数据有很多软件的,可以在网上下载这类的小软件,在FPGA端需要自己编写uart模块,进行数据的传送与接收。
uart还是最方便的,串口调试助手很多的,是在不行,自己写也不是很复杂。
多谢多谢!
请问UART的RTL是需要自己写吗?
PC这一边,需要用什么软件吗?能否推荐一个。
还有Simulink能使通信更简单吗?
PC 机上的串口通信还是比较容易实现的, 用 C 语言的话可以考虑 VC 自带的串口控件, 或者 Cserialport 的开源库;用 Matlab 也比较容易实现;
我觉得更重要的事情是,你要先规划好 PC 与 FPGA 之间的通信格式。
同意这个方法,直接用串口调试助手,通过 HEX 格式发送数据好了,简单调试足够用了。
串口应该是比较较好实现的,FPGA侧不能直接接pc的串口
需要RS232转换芯片。软件实现方面UART的RTL网上应该
有很多可以参考的。PC侧有很多方法,最简单的应该就是
串口调试助手了,不需要自己编程。功能也已经很强大了。
多谢指点。
小弟我完全新手,水平太差了。通宵到现在还没成功。
我在网上找了个UART的verilog代码(号称用的是RS232),先学习懂了他的原理,然后ISE跑了一下的确是那个功能 good :)
于是我就把我的开发板上对应的 CLK,UART(minUSB)管脚之类的信号通过UCF给接上了,我用DIP和LED测过CLK是工作的。
但是我用Serial Monitor和Matlab的串口函数来看我的UART口,结果都是什么都不显示 :(
(1)我已经把RTL代码简化为,TX口一直发送一串常数,不管RX口;
(2)这个从网上找的RTL本来也不带CTS和RTS这两条线,虽然可疑我也没管,难道这个很关键?
(3)这个从网上找的RTL的采样频率八成和我的不一样,但是这只导致收到数据错误,而不是没有任何数据啊,您说对吗?
请教一下大侠,“串口调试助手” 这个工具,是什么原理呢,PC通过它来接收数据,难道也在等待CTS/RTS握手协议吗?或者等待一个固定长度的下降沿?
多谢大侠指点啊。
我的开发板是ML605,有一个mini-USB 口对应到UART口,如果使用FPGA的PowerPC(处理器)可以直接有个UART IP连到总线上。不过我们的project要求不可以用那个处理器。
您说的意思,不会是需要另外一款RS232硬件产品吧,还是说自己写个UART的Verilog的意思?小弟我感觉是后者吧 :S
PC的软件方面,比如 “串口调试助手” 是不是固定了协议比如RS232和比特率,这个软件就期待我的UART恰好发出握手信号(CTS/RTS)和开始信号(下降沿)呢?
我觉得我就是PC这边不知道怎么看,FPGA这边也不知道对不对的状态中摸索。
如果网上能找到个保证能对于“串口调试助手” work 的 uart RTL文件做一个学习例子,就好了。
你看看ML605的原理图,应该有RS232串行接口,开发板的话这些基本接口都有的,像ML605的话应该是什么接口都有了。所以先仔细研究下开发板的资料和例子程序。我觉得应该不需要另加硬件了,也不用PowPc搞那么复杂。
uart,opencores上找一个uart的core
小编,你这个问题解决了吗,我也遇到了你一样的问题,就是按网上的例子,直接分配管脚给开发板,但是发送数据后,串口助手一点反应都没有,没有接到任何数据,请小编帮忙。
