电子竞赛培训教程5.6 编程的技巧.docVIP

  • 3
  • 0
  • 约8.72千字
  • 约 13页
  • 2018-11-03 发布于福建
  • 举报
电子竞赛培训教程5.6 编程的技巧

5.6 编程技巧 5.6.1 程序优化 对于一个较大的应用系统来说, FPGA芯片的资源是有限的,FPGA芯片的价格随门数增加而增加。通过对程序的优化,提高芯片资源的利用率,可以降低器件功耗,提高电路性能,并为以后升级留下空间。 下面是一些常用的优化原则与方法。 1. 限制向量的位数和变量(integer)的范围 少用latch ,用register 替代latch;多使用常量(constant)描述ROM。例如:如果不限定变量的范围,系统将默认其为32位,而一般使用中往往不需要这么多,造成了资源的浪费。因此,建议将变量的范围根据使用情况尽可能地缩小。 2. 优化算法 采用串行化处理,功能模块复用,资源共享,以速度换面积。例如要完成如下一个运算:a×b×c×d时,系统需要用到多个乘法器,但是乘法器占用的资源较多,可以将上式改写为(a×b)×(c×d),只编写一个乘法器,先分别计算a×b和c×d,再将其结果相乘。可见,节省了硬件资源。 3. 注意警告提示 综合出错时要从头到尾修改,不放过每一个警告。警告的出现,意味着程序有不合理之处,或资源有浪费,或硬件可能存在问题等等。因此,必须要认真对待每一个警告。 4.以逻辑描述代替行为描述 用移位寄存器代替乘法器与除法器。在二进制中,将数据左移1位等于将其乘以2,右移1位等于将其除以2,根据这些特点,在某些应用中也可以达到节省资源的目的。 5.尽量使用片内的ROM结构 FPGA内部的一片Slice可以组成一个16x1的ROM。当需要使用一个常量时,要把它写到ROM中去。而不要将它定义为变量,因为变量的定义意味着指派了FF,而FF的值却是不变的,这就造成了资源的浪费。现在的综合工具,如XST大多能从代码中提取出ROM结构的数据来,这不能理解为可以不必定义常量了,因为直接地定义常量可以减轻综合工具的负担,有利于提高综合速度和质量,尤其在较大的系统设计中。 5.6.2 状态机优化 1. 状态机的选型 按状态机的输出方式分类,有限状态机可分为Mealy型和Moore型。从输出时序上看,Mealy型属于同步输出状态机,其输出是当前状态和所有输入信号的函数,它的输出是在输入变化后立即发生的,不依赖时钟的同步。Moore型属于异步输出状态机其输出则仅为当前状态的函数,这种状态机的输入发生变化还必须等待时钟的到来。由于Mealy状态机的输出不与时钟同步,所以当状态译码比较复杂的时候,很容易在输出端产生大量的毛刺,这是无法避免的。不过,考虑到一般的系统是低速、时序比较简单的系统,,这些毛刺一般不会造成太大的影响。Moore状态机的输出与时钟同步,所以在一定程度上可以剔除抖动。所以,建议使用Moore状态机以提高系统的稳定性. 状态编码 状态编码,是指定义状态机现态和次态,一般有3种方式: (1)方式1 signal curren_state:std_logic_vector(1 downto 0) signal next_state:std_logic_vector(1 downto 0) 方式1定义的状态有比较多的毛病。首先,这种方式定义的状态为逻辑向量,缺乏具体的状态含义,程序的可读性较差,更重要的是,设计后期调试修改比较麻烦;第二,此方式设计的状态编码可能与综合后的实际的状态编码不同,也就可能无法达到设计者的要求。第三,此方式不易综合出较好的状态机(不如枚举型的状态定义)。 (2)方式2 Type mystate is (st0,st1,st2,st3); Signal curren_state,next_state:mystate; 采用方式2定义的状态有具体的状态含义,可读性好,易于调试和修改。使用attribute可以对状态进行手动编码,通过设置用户型编码方式,综合工具很容易根据手动状态编码进行高效的综合。 (3)方式3 Signal curren_state,next_state:std_logic_vector(1 downto 0); Constant st0:std_logic_vector(1 downto 0):=”00”; Constant st1:sta_logic_vector(1 donwot 0):=”01”; Constant st2:sta_logic_vector(1 donwot 0):=”10”; Constant st3:sta_logic_vector(1 donwot 0):=”11”; 方式3比方式1要好,因为方式3的可读性比方式1要好。但是方式3的修改还是没有方式2方便。 状态机的编码在ISE中有6种,其中常用的是顺序编码和一位热码。实际应用中最关心的是使用哪一种状态机编码比较好,以下提出几点意见供参考: ①如果要设计的状态机的状态译码比较

文档评论(0)

1亿VIP精品文档

相关文档