EDN首页   博客首页

最新日志

发表于:2009/7/4 23:46:45
标签:艾米电子工作室  FPGA  

0

开源项目-基于FPGA的等精度频率计

开源项目-基于FPGA的等精度频率计

1、项目简介:

这是本人06年的一个课程设计,当时做完之后,总结了一个片论文发表《电子工程师》

有兴趣的朋友可以看看,论文写的比较详细。

利用51单片机和FPGA控制实现等精度频率计,鉴于有论文,这里不多做介绍。

———————————————————————————

2、开发平台:

Quartus 9.0

keil

———————————————————————————

3、操作说明:

系统配置好之后,直接上电,连接被测信号,即可测量 ,数据通过lcd1602液晶显示

注意公地 FPGA与单片机系统公地,信号进入公地

———————————————————————————

4、资料文档文献:

基于Verilog语言的等精度频率计设计

————————————————————————————————————————


5、硬件原理图:

———————————————————————————


硬件 端口如下:
F_b fpga板载50M频率
sel_gate 门控输入 单片机控制
Finish 采集完成信号 送给单片机中断
Data[7..0] 并行数据输出
gate_test  门控信号测试引脚
int_test 中断信号测试引脚
Sel[3..0] 数据传输选择
F_x 外部被测信号输入

  1. set_location_assignment PIN_16 -to F_b
  2. set_location_assignment PIN_61 -to Sel_gate
  3. set_location_assignment PIN_67 -to Finish
  4. set_location_assignment PIN_57 -to Data_8[0]
  5. set_location_assignment PIN_55 -to Data_8[1]
  6. set_location_assignment PIN_53 -to Data_8[2]
  7. set_location_assignment PIN_51 -to Data_8[3]
  8. set_location_assignment PIN_49 -to Data_8[4]
  9. set_location_assignment PIN_47 -to Data_8[5]
  10. set_location_assignment PIN_41 -to Data_8[6]
  11. set_location_assignment PIN_39 -to Data_8[7]
  12. set_location_assignment PIN_107 -to gate_test
  13. set_location_assignment PIN_106 -to int_test
  14. set_location_assignment PIN_56 -to Sel[0]
  15. set_location_assignment PIN_54 -to Sel[1]
  16. set_location_assignment PIN_52 -to Sel[2]
  17. set_location_assignment PIN_50 -to Sel[3]
  18. set_location_assignment PIN_108 -to F_x
复制代码


51单片机 传输可以看单片机内部的程序

连线
8根并行数据线
1根中断
1根门控信号
4根数据选择



6、软件源程序:
—————————————————————————————————————————


本帖隐藏的内容需要回复才可以浏览

等精度频率计-单片机程序.rar (37.47 KB)



本帖隐藏的内容需要回复才可以浏览

等精度频率计-FPGA程序.rar (426.55 KB)








这个项目本人负责,近期上传全部资料,需要重新进行整理


09年6月10日重新上传照片
今天把实验重新搭起来,索性多拍了几张

分别测量了 2hz 2khz 1Mhz 频率1M的时候 示波器测量已经开始漂

点击看大图 点击看大图 点击看大图 点击看大图 点击看大图 点击看大图 点击看大图 点击看大图 点击看大图 点击看大图 点击看大图





先上传照片

09年6月6日上传项目照片




点击看大图



点击看大图

点击看大图

点击看大图

点击看大图
下载 (179.25 KB)
2009-6-6 09:50

系统分类: CPLD/FPGA   |    用户分类:    |    来源: 原创

该用户于2009/7/4 23:46:55编辑过该文章

评论(2) | 阅读(45)
发表于:2009/7/4 23:38:21
标签:艾米电子工作室  FPGA  

0

FPGA入门系列实验教程——实验三 LED流水灯

FPGA入门系列实验教程——实验三 LED流水灯

声明:本实验教程编写的目的就是为了指导FPGA初学者轻松入门,让初学者少走些弯路,但由于版主学习FPGA时间不长,水平有限,教程中肯定会出现这样或那样的错误,请您将阅读中发现的错误或建议通知版主,以使本教程不断地完善。实验教程本打算免费下载的,但为了提高网站的人气,还是选择了下载收取大洋!我赚取大洋也没什么用武之地,收取大洋只是手段,不是目的!希望大家支持并宣传艾米电子工作室,如果网站在线人数超过300人时,网站所有的开源项目将全部免费下载!






点击看大图

 

 

进入论坛下载实例

 

艾米电子工作室


系统分类: CPLD/FPGA   |    用户分类:    |    来源: 原创

评论(1) | 阅读(38)
发表于:2009/7/4 23:35:45
标签:艾米电子工作室  FPGA  

0

FPGA入门系列实验教程——实验二 LED闪烁灯

FPGA入门系列实验教程——实验二 LED闪烁灯

声明:本实验教程编写的目的就是为了指导FPGA初学者轻松入门,让初学者少走些弯路,但由于版主学习FPGA时间不长,水平有限,教程中肯定会出现这样或那样的错误,请您将阅读中发现的错误或建议通知版主,以使本教程不断地完善。实验教程本打算免费下载的,但为了提高网站的人气,还是选择了下载收取大洋!我赚取大洋也没什么用武之地,收取大洋只是手段,不是目的!希望大家支持并宣传艾米电子工作室,如果网站在线人数超过300人时,网站所有的开源项目将全部免费下载!





点击看大图

 

 

进入论坛下载实例

 

艾米电子工作室

系统分类: CPLD/FPGA   |    用户分类:    |    来源: 原创

该用户于2009/7/4 23:37:01编辑过该文章

评论(0) | 阅读(27)
发表于:2009/7/4 23:31:09
标签:艾米电子工作室  FPGA  

0

FPGA入门系列实验教程——实验一 点亮LED

FPGA入门系列实验教程——实验一 点亮LED

声明:本实验教程编写的目的就是为了指导FPGA初学者轻松入门,让初学者少走些弯路,但由于版主学习FPGA时间不长,水平有限,教程中肯定会出现这样或那样的错误,请您将阅读中发现的错误或建议通知版主,以使本教程不断地完善。实验教程本打算免费下载的,但为了提高网站的人气,还是选择了下载收取大洋!我赚取大洋也没什么用武之地,收取大洋只是手段,不是目的!希望大家支持并宣传艾米电子工作室,如果网站在线人数超过300人时,网站所有的开源项目将全部免费下载!
点击看大图


进入论坛下载实例

 

艾米电子工作室
  

系统分类: CPLD/FPGA   |    用户分类:    |    来源: 原创

该用户于2009/7/4 23:37:18编辑过该文章

评论(0) | 阅读(46)
发表于:2009/5/15 19:42:21
标签:无标签

1

QuartusII编译与仿真之warning大解析

在QuartusII下进行编译和仿真的时候,会出现一堆warning,有的可以忽略,有的却需要注意,虽然按F1可以了解关于该警告的帮助,但有时候帮助解释的仍然不清楚,大家群策群力,把自己知道和了解的一些关于警告的问题都说出来讨论一下,免得后来的人走弯路.
       下面是收集整理的一些,有些是自己的经验,有些是网友的,希望能给大家一点帮助,如有不对的地方,请指正,

1.Found clock-sensitive change during activeclockedge at time <time> on register "<name>"
原因:vector sourcefile中时钟敏感信号(如:数据,允许端,清零,同步加载等)在时钟的边缘同时变化。而时钟敏感信号是不能在时钟边沿变化的。其后果为导致结果不正确。
措施:编辑vector source file

2.VerilogHDLassignment warning at <location>: truncated value with size <number> to match size of target (<number>
原因:在HDL设计中对目标的位数进行了设定,如:reg[4:0] a;而默认为32位,将位数裁定到合适的大小
措施:如果结果正确,无须加以修正,如果不想看到这个警告,可以改变设定的位数

3.All reachable assignments to data_out(10) assign '0', register removed by optimization
原因:经过综合器优化后,输出端口已经不起作用了

4.Following 9 pins have nothing, GND, or VCC driving datain port -- changes to this connectivity may change fitting results
原因:第9脚,空或接地或接上了电源
措施:有时候定义了输出端口,但输出端直接赋‘0’,便会被接地,赋‘1’接电源。如果你的设计中这些端口就是这样用的,那便可以不理会这些warning

5.Found pins functioning as undefined clocks and/or memory enables
原因:是你作为时钟的PIN没有约束信息。可以对相应的PIN做一下设定就行了。主要是指你的某些管脚在电路当中起到了时钟管脚的作用,比如flip-flop的clk管脚,而此管脚没有时钟约束,因此QuartusII把“clk”作为未定义的时钟。
措施:如果clk不是时钟,可以加“not clock”的约束;如果是,可以在clock setting当中加入;在某些对时钟要求不很高的情况下,可以忽略此警告或在这里修改:Assignments>Timing analysis settings...>Individualclocks...>...
注意在Applies to node中只用选择时钟引脚一项即可,required fmax一般比所要求频率高5%即可,无须太紧或太松。

6.Timing characteristics of device EPM570T144C5 are preliminary
原因:因为MAXII 是比較新的元件在 QuartusII 中的時序並不是正式版的,要等 Service Pack
措施:只影响 Quartus 的 Waveform.

7.Warning: Clock latency analysis for PLL offsets is supported for the current device family, but is not enabled
措施:将setting中的timing Requirements&Option-->More Timing Setting-->setting-->Enable Clock Latency中的on改成OFF

8.Found clock high time violation at 14.8 ns on register "|counter|lpm_counter:count1_rtl_0|dffs[11]"
原因:违反了steup/hold时间,应该是后仿真,看看波形设置是否和时钟沿符合steup/hold时间
措施:在中间加个

原因:模块的名字和project的名字重名了
措施:把两个名字之一改一下,一般改模块的名字

19.Warning: Using design file lpm_fifo0.v, which is not specified as a design file for the current project, but contains definitions for 1 design units and 1 entities in project Info: Found entity 1: lpm_fifo0
原因:模块不是在本项目生成的,而是直接copy了别的项目的原理图和源程序而生成的,而不是用QUARTUS将文件添加进本项目
措施:无须理会,不影响使用

20.Timing characteristics of device <name> are preliminary
原因:目前版本的QuartusII只对该器件提供初步的时序特征分析
措施:如果坚持用目前的器件,无须理会该警告。关于进一步的时序特征分析会在后续版本的Quartus得到完善。

21.Timing Analysis does not support the analysis of latches as synchronous elements for the currently selected device family
原因:用analyze_latches_as_synchronous_elements setting可以让Quaruts II来分析同步锁存,但目前的器件不支持这个特性
措施:无须理会。时序分析可能将锁存器分析成回路。但并不一定分析正确。其后果可能会导致显示提醒用户:改变设计来消除锁存器,但实际其实无关紧要

22.Warning:Found xx output pins without output pin load capacitance assignment
原因:没有给输出管脚指定负载电容
措施:该功能用于估算TCO和功耗,可以不理会,也可以在Assignment Editor中为相应的输出管脚指定负载电容,以消除警告

 

系统分类: CPLD/FPGA   |    用户分类:    |    来源: 转贴

该用户于2009/5/15 19:42:54编辑过该文章

评论(1) | 阅读(207)
发表于:2009/4/2 20:14:10
标签:艾米电子工作室  

1

学习NIOS-II的经验分享(四)

 

学习NIOS-II的流程-4——体会

——艾米电子工作室


4——学习心得

搞技术是一个枯燥的过程,同时也是一个很有意思的过程,当你一天甚至一周都在为一个问题发愁时,你是枯燥无味的,当你由点亮一个小灯到能够控制液晶显示的时候,这个过程是很有意思的!

每个人都有一个不同的学习方法,这里将我的方法与大家分享,不一定适用于你,但只要给你提供一个思路,就达到我的目的了。

学习一门新的技术,尤其是以前没有接触过的,大家第一时间的想法都是搜集资料,大量的找资料,实际上我们从网络上搜集到的资料,真正自己能用心看的不到10%,真正精华的文章或者资料也就5%,当然我所指的是一个完全新的领域,比如NIOS的开发,一些简单的基本的资料随处可见,但是真正要找到一个高级点的可用的程序或者demo就很难很难,最后还需要自己开发!

初学者,能够达到入门的目标足以,当你在平地数山上的台阶时你看到的是有限的,当你走上山腰再看的时候你会发现你在平地看到的台阶都已经在你的脚下了!


学习体会1-做笔记

开始学习NIOS一定要做笔记,写简单的记录,比如如何建立Quartus工程,如何创建NIOS工程,调试时候哪些环节容易出问题,都一一记下,下次出现同样的问题可以很方便的解决!

学习体会2—利用网路

互联网给我们带来的信息是不可估量的,遇到一个新的问题,首先不要问别人,至少我是这样,呵呵,当然我在这里说这句话,有点推脱之嫌,但今天,我这里完全是以一个开发人员的身份来写这篇文章,而不是以一个卖开发板的来推脱责任!

你遇到的所有问题,尤其是初学者的问题,有时候只是一个微不足道的问题,简单的google一下就可以搞定了!

学习体会3-至少有一本好书

学习NIOS 或者 FPGA至少要有一本好书,本人从51到FPGA的书籍市价估计超过1k,本人03年入学,04年开始学习单片机至今学习过51、avr、msp430、arm7、arm9、FPGA等,购买的书籍很多。一本好书有的时候就是一个好老师!

学习体会4-泡论坛

泡论坛,我想很多网友都有经历,然而不知道大家发现一个问题没有,就是一个很简单的问题 ,可能会有很多网友提问,请大家记住,初学者所遇到的问题80%在论坛中或者网路上都能够找到答案,至于说你找不到,那责任不在于别人,在于你的搜索能力!所以有问题,先搜索,然后再提问!


写在最后

今晚连着写了四片文章,打字手都已经麻木了,所说的话完全是个人总结经验,希望对网友能有所帮助,也希望大家看了能够有所收获!

转载请注明出处,谢谢合作!

系统分类: CPLD/FPGA   |    用户分类:    |    来源: 原创

该用户于2009/4/2 23:19:17编辑过该文章

评论(3) | 阅读(381)
发表于:2009/4/2 20:13:37
标签:无标签

0

学习NIOS-II的经验分享(三)

 

学习NIOS-II的流程-3——完全定制

——艾米电子工作室


3——定制你自己的NIOS

到这个过程确实是学习 NIOS中比较高级的实验了,周立功的《SOPC 嵌入式系统实验教程(一)》中把这一知识点放在第7章-“SOPC硬件系统高级教程”

这里再次向广大网友推荐周立功的这本书,非常好,可以说是学习NIOS的教科书,定价29元,很值得!

这一讲,引用网上的几篇文章,摘录如下:

 自定义外设作为NiosII软核处理器超强灵活性的体现,其开发遵循一定的规律。一个用户自定义外设必须进行硬件设计,也就是说,必须用硬件描述语言来描述出硬件的逻辑组成。一般来说,一个自定义外设主要由下列部分组成:

       ①  描述自定义外设逻辑的硬件描述文件部分(主要是HDL程序)。
       ②  软件文件,一个用来定义外设寄存器的C语言头文件,以及让程序员控制这个元件的软件驱动程序。
       ③  元件的描述文件(class.ptf)。该文件定义了元件的架构,提供了SOPC。

       Builder将该元件集成到一个系统的各种信息。该文件由元件编辑器根据用户提供的硬件和软件文件以及在图形用户界面中设置的各个选项和参数自动生成。图1给出了带Avalon从端口的自定义外设组成框图。

       从图中可以看出,一个典型的自定义外设主要由下列功能模块组成:
      
       ①  任务逻辑。任务逻辑实现外设的基本功能,是必不可少的组成部分。
       ②  寄存器文件。寄存器文件部分提供任务逻辑和外界交换信息的桥梁。有了寄存器文件,用户就可以通过Avalon接口采用“基地址+地址偏移量”的方法来访问外设内部的各个寄存器。
       ③  Avalon接口。Avalon接口为寄存器文件提供了一个标准的Avalon前端。该模块使用Avalon规定的信号来访问寄存器文件,并且支持任务逻辑的传输类型。


 


用户自定义IP核按照对Avalon总线操作的不同可分为Avalon Master外设、Avalon Slaver外设及AvalonStreaming外设。用户开发的外设大多为Avalon Slaver外设,Avalon Master和Avalon Streaming外设的开发比Avalon Slaver外设要复杂,但开发流程相同。一个典型的Avalon外设的开发步骤如下:

(1)规划元件的硬件功能。如果采用微控制器来控制该元件,则规划访问该硬件的应用程序接口(API);

(2)在硬件和软件要求的基础上,定义一个恰当的Avalon接口(一般为Avalon从端口);

(3)使用硬件描述语言描述硬件逻辑。一个典型元件的硬件架构一般3部分组成:接口模块(avalon interface)作为顶层模块,定义总线接口信号;寄存器文件模块(register file)完成该元件与外部信号进行通信,提供访问与控制元件的逻辑界面;行为模块(task logic)实现元件的硬件功能。片上总线AvaIon从端口的信号都不是必须的,一个典型的Avalon从端口所包含的信号如表1所示。

(4)单独验证元件的硬件功能;

(5)写用于描述寄存器的C头文件来为软件定义硬件寄存器映像;

(6)写元件的驱动软件;

(7)把通过测试的源代码使用元件编辑器封装硬件HDL和软件文件,完成元件定制。


用户学习到这一步,基本上NIOS 的开发也就没什么难点了,可以完全自己定制系统,以后的开发就是时间问题,以及经验的积累!

预祝各位网友都能够早日成为这一领域的英才!


引用文章如下:

http://www.eepw.com.cn/article/75559.htm

http://article.ednchina.com/EDA/20081213100217.htm

 

系统分类: CPLD/FPGA   |    用户分类:    |    来源: 原创

该用户于2009/4/2 23:12:54编辑过该文章

评论(0) | 阅读(235)
发表于:2009/4/2 20:13:00
标签:艾米电子工作室  

0

学习NIOS-II的经验分享(二)

学习NIOS-II的流程-2——初体验

——艾米电子工作室


2——初步学习体验NIOS

这里包括 LED、 串口、 LCD、 按键输入、 中断、 定时器等等,这个过程跟单片机开发其实没什么区别,只是注意一下NIOS 中软件的开发特点即可,比如对IO的输入输出控制、方向控制等等。

 IOWR_ALTERA_AVALON_PIO_DATA(LED_BASE, led);】


附一个程序如下:

#include "system.h"
#include "altera_avalon_pio_regs.h"
#include "alt_types.h"

int main (void) __attribute__ ((weak, alias ("alt_main")));


int alt_main (void)
{
  alt_u8 led = 0x2;
  alt_u8 dir = 0;
  volatile int i;
    
 
  while (1)
  {
    if (led & 0x81)
    {
      dir = (dir ^ 0x1);
    }

    if (dir)
    {
      led = led >> 1;
    }
    else
    {
      led = led << 1;
    }
    IOWR_ALTERA_AVALON_PIO_DATA(LED_BASE, led);


    i = 0;
    while (i<200000)
      i++;
  }

  return 0;
}

 

点击看大图

如图所示,程序中的

IOWR_ALTERA_AVALON_PIO_DATA(LED_BASE, led);

对端口的输出进行操作,里面的base 对应Quartus中的

out_port_from_the LED[7..0]

注意,NIOS 编程时这个地址一定要大写,而在SOPC Builder中可以小写命名。比如——SM_bit,而程序中必须大写,如下:

 IOWR_ALTERA_AVALON_PIO_DATA(SM_SEGMENT_BASE, leddata[i+1]);
 IOWR_ALTERA_AVALON_PIO_DATA(SM_BIT_BASE, bit_sel[i]);


NIOS 一个工程的操作步骤顺序:

第一步,建立Quartus工程

这里面包括,在SOPC Builder中建立 NIOS的软核,并定制系统外设,完成基本编译,配置引脚之后,修改一些没有用到的IO属性为三态输入,最后完全编译系统。此时生成系统的配置文件sof。

点击看大图

 

第二步,建立NIOS IDE开发环境

写C语言代码,并编译工程,开始仿真或者直接调试,调试的技巧需要一点一点的积累总结。不过玩过单片机的朋友,我相信都很熟悉这个的设置与技巧。

 

点击看大图

 

第三步:系统的下载

系统编译调试通过后,我们需要把 sof文件和elf文件下载到EPCS配置芯片中,这样下次上电时候才能运行程序。

点击 tools》flash programer 》

点击看大图

第四步-重新定制系统

如果在前三步发现问题,返回差错,然后分别重新编译工程,如果期间需要加入新的模块,也需要重新定制系统,然后重新编译。

这期间由三个步骤的时间耗时非常长,所以为了节省开发时间,尽量不要反复编译工程

1 quartus的完全编译

2 SOPC Builder 生成系统文件

3 NIOS的第一次 Build

硬件系统完成后,NIOS也完成了第一次的完全编译,之后的软件开发工作就相对简单多了,每次只需要简单编译,很快就ok!


补充:run或者debug的时候 有可能会出现如下界面。

nios2-terminal: connected to hardware target using JTAG UART on cable
nios2-terminal: "USB-Blaster [USB-0]", device 1, instance 0

nios2-terminal: Warning: The JTAG cable you are using is not supported for Nios
nios2-terminal: II systems.  You may experience intermittent JTAG communication
nios2-terminal: failures with this cable.  Please use a USB Blaster revision B
nios2-terminal: cable or another supported cable.  Please refer to the file
nios2-terminal: errata.txt included in the Nios II development kit documents
nios2-terminal: directory for more information.

nios2-terminal: (Use the IDE stop button or Ctrl-C to terminate)

 

提示 JTAG的类型不匹配,但不影响使用,这里面用公版的USB-Blaster就没有问题的,具体的就不多说了,有可能是软件里面做的手脚。

系统分类: CPLD/FPGA   |    用户分类:    |    来源: 原创

该用户于2009/4/2 23:10:45编辑过该文章

评论(1) | 阅读(500)
发表于:2009/4/2 20:12:05
标签:艾米电子工作室  NIOS  

1

学习NIOS-II的经验分享(一)

学习NIOS-II的流程-1——资料的准备

——艾米电子工作室


声明:本文系站长的个人经验分享,不是专业人士的评论,如有瑕疵,还望见谅!

NIOS 即为 NIOS II的缩写!

 

本人学习NIOS的时间不算很长,也就2年多,开始接触NIOS 就是从我们的一个实际项目出发的,以前一直学习逻辑的FPGA知识。很多网友学习NIOS之前,都或多或少的接触过其他MCU,比如51、AVR、ARM等等,但是为什么还要学习NIOS呢,这之间有哪些区别呢 ?

先来看一下官方的介绍:


Nios II处理器——世界上最通用的嵌入式处理器

迅速构建最合适的处理器系统

嵌入式开发人员面临的主要挑战是如何选择一款最合适的处理器,既不会为了提高性能而超过预算,又不会牺牲功能特性。理想的嵌入式解决方案帮助您:

  • 选择最适合您应用的CPU、外设和接口
  • 现场远程更新,保持竞争,满足需求的变化。
  • 不必改动电路板设计,提升性能——针对需要的功能进行加速。
  • 避免处理器和ASSP过时的风险
  • 将多种功能在一个芯片中实现,降低了总成本、复杂度和功耗。

通过最合适的CPU、外设和存储器接口,以及定制硬件加速器,达到每一新设计周期的独特目标,Nios?  II 处理器以极大的灵活性满足了您的需求。

世界上最流行的可配置处理器

Nios II处理器在全世界已经发售了15,000多个开发套件,世界前20名OEM均采用了该处理器。Nios II处理器是目前最流行的可配置软核处理器。Nios II处理器具有很大的灵活性,得到了广泛应用,在特性、成本性能上达到了最佳,是一款避免昂贵的产品过时、帮助您将产品尽快推向市场的处理器。


这里面是否言过其实,我们不去追究,只是NIOS 确实可以让你的开发变得简单些,也完全可以根据你自己的意愿来定制CPU!网友学习NIOS大体可以分为以下几类,在校学生为了丰富自己毕业就业的工作筹码,需要掌握更多的专业技能;参加工作不久的开发人员,给自己充电;产品开发前期选型,进行实验;参加专业的比赛,比如电子设计大赛等等。那么如何才能快速的掌握NIOS的开发流程,从而快速入门的?在网上可以找到很多建立一个简单的NIOS工程之类的文章以及视频,本人也做了一些开放式的入门教程。

我总结学习NIOS 分为以下几个阶段:

1——资料的准备:

巧妇难为无米之炊,再好的设计也需要一个实验平台,硬件上需要有一个FPGA的开发板,这个开发板要能够支持NIOS的开发,也就是说需要有SDRAM或者SRAM,这里再次解释一下NIOS的开发板需要哪些配置。很多网友对这个概念不是很清楚,只知道需要SDRAM和FLASH等等,但是为什么需要?

NIOS 是一个软核,他的开发可以采用C语言,最后生成的代码可执行文件需要一个运行的环境,比如计算机的程序运行在内存中一样,其实如果FPGA内部的RAM足够大的话,完全没有必要用外部的了,但是水涨船高,这样芯片价格就会剧增,性价比不好,因此还是需要外部加入SDRAM或者SRAM。

近日见到网上有朋友说EP2C5T144的开发板也可以跑NIOS,这话不假,但是只能跑简单的NIOS实验,我见过这个板子,没有外部的SDRAM很多程序运行不了的,敬请广大网友注意!

现在新的问题又出来了,到底是用SDRAM还是SRAM呢?个人分析,如果系统中对处理速度要求不是很高,选用SDRAM即可,也即是说程序最后在SDRAM中运行,如果要求频繁的数据处理、图像处理或者电机的PID控制等等,还是建议选用SRAM!一般单纯学习NIOS系统或者做些简单的运算,可以考虑SDRAM;毕竟两者的价格相差还是很多的。

最后一个Flash,我们知道单片机的程序都是存在flash中的,掉电之后程序也不会丢失,再次上电可以正常运行,既然NIOS 是软核,应该也是一样的。所以为了保存NIOS的配置文件(sof文件,即整个系统的架构配置)以及最后的C代码文件,需要一个这样的东东。

那么是不是就一定需要一个外部的FLASH呢?其实不然,每个FPGA的开发板都有一个配置芯片,这个东东其实就是FLASH,用它完全可以实现程序的存储,本店销售的NIOS开发板完全使这种风格的设计,采用的均是EPCS4配置芯片。让大家看一个我们的NIOS系统实例,也是我第一次学习NIOS的东东。本人设计的开发板都是根据实际经验出发,并不是网上的抄板!

点击看大图

 

点击看大图

 

我们整个团队人员很多,我只是负责其中的电路部分,上面的核心板是我设计的,底下的大板是我一个师兄设计的。核心板上用到的芯片就是EP2C8Q208芯片,因为涉及到电机控制,我们采用了SRAM,同时测量外部电压采用了max197-AD芯片,无线模块等等,核心板很简洁。整个系统实现对一个机器人的底层控制,系统软件中用到了 AD驱动、无线模块驱动、电机测速模块、机器人分号、击球跳球、电机驱动、PID控制等等,完全都是NIOS里面实现。其中,无线模块、AD驱动、电机驱动均是自己设计的底层verilog文件,然后再上层调用,这样执行效率高,底层的文件是并行执行的,如果都放在系统中跟单片机的开发模式差不多,就是一个大的while了。

我们这个系统 用EP2C8Q208 和 EPCS4 可以搞定,网友可以思考一下自己学习的话,这个板子完全可以胜任了,初学者考虑EP2C5Q208 即可!

有了开发板,那么软件上,需要你设置那些呢?

Altera公司从最开始的Quartus 4.0 到现在的Quartus8.1甚至 9.0版本都出来了,你可以根据自己的情况选择软件,建议还是采用高版本的软件,都是向下兼容的!

Altera软件的下载链接通常都有很多,到网上随便搜索一下都可以找到,但是最后下载的源都是Altera的FTP。7.2版本需要下载如下三个文件,从8.0开始IP-core已经集成到Quartus中,也就是下载Quartus和nios2eds即可,至于DSP-Builder以及Modelsim 是否需要下载就看个人喜好了。本人还是习惯用Quartus的仿真。

 

分别简单介绍一下:

72_ip_windows.exe
首先 第一个是altera公司提供的IP core ,官方的一些软核设备驱动,这些在SOPC Builder中可以看到,只要接口一样,这些都可以直接调用,节省开发时间,那如果用户自己在开发过程中遇到了一个设备,而官方的IP中没有该怎么办呢?这个工作就需要开发部门的硬件工程师自己来写对应的驱动了,之后按照一定的格式加载进去!
举个例子,我们做的一个机器人项目,用到了无线模块nRF2401,没有对应的发射和接收的例子,只好自己写,还有max197-AD采集芯片,同样要自己写驱动!

72_nios2eds_windows.exe,这个是软核的编译集成开发环境,编写软件的地方,一般开发直接采用C语言开发,此时开发NIOS的工程师一般都具备了单片机开发的基础,采用C语言的思想开发起来,应该没有太大难度,与单片机类似,就是速度快一点!不过要熟悉起来还是需要一段时间的,尤其是初学者采用的函数都是Altera公司提供的函数库,需要熟悉一段时间才能熟练应用,不要一口吃一个胖子,慢慢消化!


72_quartus_windows.exe,这个就不做过多介绍了,FPGA的开发就在这个软件下面进行的!这里面有一个软件没有介绍就是SOPC Builder ,他是集成在Quartus中的!

这几者之间的关系如下图所示

Quartus 建立系统工程,完成综合、编译、管脚配置、sof下载等工作

SOPC Builder 完成 软核系统的配置,IP-core的添加各个模块之间的地址、中断的分配

NIOS IDE 完成 软件开发的工程建立,程序的编译、连接 以及最后软核代码的生成下载,仿真调试等!

 

 

 

 

系统分类: CPLD/FPGA   |    用户分类:    |    来源: 原创

该用户于2009/4/2 23:06:18编辑过该文章

评论(0) | 阅读(557)
发表于:2009/3/16 20:09:25
标签:FPGA  reg  integer  

0

Verilog中integer与reg的区别

 

艾米电子工作室FPGA系列文章

——Verilogintegerreg的区别

By 艾米电子

2009-03-16

 

Http://www.amy-studio.com

 

原文下载:

Verilog中integer与reg的区别.pdf

 

此片文章源于网友的一个问题?

原文地址:

http://amy-dz.bbs.id666.com/ShowPost.asp?ThreadID=94

 

开发板子LED例程中,计数变量为什么使用整数阿,跟使用reg有什么区别嘛?

 

以前一直用,也没有多想这二者之间的区别,今天抱着验证态度,做一个简单的测试,结论是:使用计数器寄存器的时候 还是 利用合适的位宽reg类型比较好,养成好习惯,对以后的深入学习很用帮助,附图如下:

 点击看大图

1 采用reg消耗资源情况

点击看大图

2 采用integer消耗资源情况

点击看大图 

3 采用reg 内部RTL

点击看大图

4 采用integer 内部RTL

 


 

 

附源程序如下:

module         test(

                                   clk_in,

                                   clk_out        

                                   );

 

input             clk_in;

output           clk_out;

 

reg         clk_out;

 

parameter    DIV = 3;

                    

reg  [3:0] count;

//integer             count;

 

always @(posedge clk_in)

begin

              if( count == DIV)

              begin

                     count <= 0;

                     clk_out = ~clk_out;

              end

              else

                     count <= count + 1'b1;     

end

endmodule

系统分类: CPLD/FPGA   |    用户分类:    |    来源: 原创

该用户于2009/3/16 20:09:52编辑过该文章

评论(4) | 阅读(682)
2345678910>>Next >Total , Page /