原创 让低端FPGA也能跑nios

2012-8-3 23:51 2741 7 11 分类: FPGA/CPLD

 

    第一次接触嵌入软核是公司一个项目中通信用422串口通信。其他的电路板的控制都是单片机,都好办。可是有一块板的控制虽然不太复杂,但必须用FPGA(并行处理能力单片机没法比啊),在通信上处理起来就有点麻烦。

    毕竟FPGA是硬件,没有单片机的C语言程序的那种灵活性,而且单片机的串口是固定的,只要配置下寄存器就可以很容易的来进行通信。FPGA功能强大,肯定是可以写出来串口程序,但无疑会是很麻烦的。网上的FPGA的通信例程多数都是基于单字节收发的,可是项目里面的通信是10几个字节的(先发数据帧头,板选地址,中间几个字节的数据,最后一个校验字节),要想弄出来肯定要花不少时间。以前公司遇到这种情况采用过单片机+FPGA的组合,也就是单片机负责串口,然后再与FPGA进行通信,FPGA进行控制操作。这样电路板要复杂很多,很麻烦。51单片机+CPLD还好说,都是5V的高电平,要是FPGA就得电平转换下,或者换高级点的3.3V单片机。后来决定试试nios软核来尝试下FPAG的串口通信。

    在网上找了些资料,感觉nios软核也没什么,就是在FPGA里面划出一部分资源来弄出了一个32位的单片机模块。单片机的串口我是再熟悉不过啦。于是在网上找资料,一步步在SOPC builder配置这个单片机,然后在NIOS EDS上面建立了一个工程来试一下。之前一切都还比较顺利,可是新建立的工程编译一下就提示onchip mem不够。百度了一下,多数人都说要+sdram才行,后来看到了特权同学的nios教程里面有关于缩减代码量的文章。然后一步步尝试了下,果然代码缩减到4.7k左右。不幸的是特权同学用的是cyclone II器件,分配了12k的onchip ram,我用的cyclone器件EP1C6Q240,貌似最多能分配4k的onchip ram,再多就报错了。无奈还是提示内存不足,何况代码还没写呢,写完了肯定更大。这个折腾我好长时间,我总觉得为了这么一个串口添加sdram或者换高级FPGA不值得。关键是altera官方的datasheet里面写了cyclone器件是支持nios软核的,上面没有说一定要外加sdram才能用啊,何况EP1C6Q240也不是cyclone里面最低端的。于是我各种百度,google,同时啃datasheet,各种尝试,终于找出了可以缩减代码量的方法。成功的将Hello World例程的代码缩减到1K出头,写完了所需要的代码编译也不到3K。这样就可以不用外接其他存储器,仅利用fpga的内部资源(实际上flash存储用了epcs4,但也是FPGA必须的部分)就成功在EP1C6Q240实现了NIOS软核进行串口通信。

    下面是具体的设置方法。在SOPC builder里面添加 处理器,onchip memory,epcs controller,jtag uart systemid 等。Onchip memory 设置为4k。处理器选择占资源最少的那个(最左边的),Reset Vector 选epcs 那个,Exception Vector选onchip mem,debug level选择1(左边第二个).然后打开nios ii eds,新建工程,模板选Hello World那个就成(用alt main的模板貌似可以把代码缩减到更小)。然后右键工程名称(不带bsp的那个),nios II –>BSP Editor。具体设置看图吧。

 

1.jpg
2.jpg
3.jpg

 

 

 

    把模板的程序改成我以前写过的串口程序,编译,没问题。结果如下:

4.jpg

    这样设置可以让编译出来的代码比较小。我尝试用特权同学的fpga开发板,就是EP1C3T144的那个,做了一个简单的串口发送机,没用sdram就可以跑。Onchip mem设置为2k,flash 为epcs1,逻辑资源占用了70%多,Onchip mem将近2k。datasheet上面说的没错,果然cyclone器件是可以跑nios软核的,起码最小系统不用额外添加其他的存储器件。

 

PARTNER CONTENT

文章评论4条评论)

登录后参与讨论

用户377235 2012-8-27 09:33

看完大神的博文很有收获,博主很强悍啊,才工作了一年,就有这么多收获,这几篇看着不过瘾啊,期待看你更多博文,让哥们儿们也学点哈。

wxg1988 2012-8-10 21:32

是的,FPGA之强大在于你敢尝试,没什么不能做的,关键你有idea,不错的文章,值得看与学习。

用户1629256 2012-8-9 10:13

强悍

用户306090 2012-8-4 14:38

很不错啊,又学习了,谢谢阿松童鞋。

用户421471 2012-6-26 08:25

以前看过SystemVerilog,没有详细的深入,呵呵
相关推荐阅读
用户421976 2012-11-18 20:09
AT91SAM7X256学习笔记(1)
         好久没有写点什么了,前段时间工作比较忙,就犯懒了。写点有关atmel 的arm7芯片的东西吧,很简单很基础的。       开发环境用的是keil mdk 4.23  H...
用户421976 2012-08-30 23:09
搞定单片机多字节串口接收
             工作了一年多,写了不少单片机串口程序。感觉串口多字节接收部分的逻辑相对于配置寄存器跟串口回复来说,是有点难度的——寄存器配置基本上都是死的,串口回复多字节跟回...
用户421976 2012-07-18 00:15
用labwindows做过的一个串口上位机程序
      这是一个FPGA的串口通信上位机软件,要求不高,顶多算是个测试用面板。我觉得这就是个小case。可是实际上这不到1千行的代码,却把我折腾了好长时间。     这个软件的大概内容...
用户421976 2012-06-30 03:35
工作了满一年了
这是我在电子行业从业的第一年。这一年里做的东西真的挺多,挺杂的。 我工作的单位规模并不是很大。研发人员不是很多,这导致我很多方面的技术都接触过。 刚开始做51单片机程序。做电路,之后做过c...
用户421976 2012-04-21 00:55
串行AD芯片ADC12S021的时序问题
  ADC124S021 4 Channel, 50 ksps to 200 ksps, 12-Bit A/D Converter   在接触ADC124S021这个芯片以前,我一...
我要评论
4
7
关闭 站长推荐上一条 /3 下一条