状态机

状态机的基本概念安全

  硬件设计很讲究并行设计思想,虽然用Verilog描述的电路大都是并行实现的,可是对于实际的工程应用,每每须要让硬件来实现一些具备必定顺序的工做,这就要用到状态机的思想。异步

状态机就是经过不一样的状态迁移来完成一些特定的顺序逻辑,硬件的并行性决定了用Verilog描述的硬件实现都是并行执行的,那么若是但愿分多个时间完成一个任务,怎么办?或许能够用多个使能信号来衔接各个不一样的模块,可是多少有些繁琐,状态机的提出就大大简化了这一工做。模块化

  构成状态机的基本要素是状态机的输入、输出和状态。输入就是一些引起状态变化的条件;输出就是状态变化后引发的变化,如控制总线、地址总线和数据总线的输出值就是状态变化决定的;状态就是空闲、读、写等,他们通常是由一些逻辑值来表示。函数

  状态机根据其状态变化是否与输入条件相关分为两类,即Moore型状态机和Mealy型状态机。Moore型状态机的状态变化仅与当前状态有关,而与输入条件无关,Mealy型状态机的状态变化不只与当前状态有关还取决于当前的输入条件。工具

  三种不一样状态机写法测试

状态机通常有三种不一样的写法,即一段式、两段式和三段式的状态机写法,他们在速度、面积、代码可维护性等各个方面互有优劣设计

一、好的状态机标准 状态机要安全,不会进入死循环,特别是不会进入非预期的状态,并且因为某些扰动进入非设计状态,也能很快的恢复到正常的状态循环中来,这里面有两层含义,其一要求该FSM的综合实现结果无毛刺等异常扰动;其二要求FSM都要完备,即便受到异常扰动进入非设计状态,也能很快恢复到正常状态;好的状态机的设计要知足设计的面积和速度的要求,状态机的设计要清晰易懂 易维护 。接口

二、状态机的描述方法资源

状态机描述时关键是要描述清楚几个状态机的要素:如何进行状态转移;每一个状态的输出是什么;状态转移的条件等。input

一段式:整个状态机写到一个always模块里面,在该模块中即描述状态转移又描述状态的输入和输出;

二段式:用两个always模块来描述状态机,其中一个always模块采用同步时序描述状态转移,另外一个模块采用组合逻辑判断状态转移的条件,描述状态转移规律及输出。

三段式:在两个always模块描述方法基础上,使用第三个always模块。一个always模块采用同步时序描述状态转移,一个always采用组合逻辑判断状态转移的条件,描述状态转移规律,另外一个always模块描述状态输出,能够用组合电路输出,也能够用时序电路输出。

复位设计

  异步复位always(@posedge clk or negedge rst)

  同步复位always(@posedge clk ) begin if(!rst)...end;与异步复位相比,同步复位没有用到存储器的CLR端口,综合出来的实际电路知识把复位信号做为输入逻辑的使能信号,那么这样的同步复位势必会额外增长FPGA内部的资源消耗。

  同步复位在时钟信号clk的上升沿触发时进行系统是否复位的判断,这下降了亚稳态出现的几率,虽然缺点在于须要消耗更多的器件资源,没法充分利用专用的复位端口CLR

 

FPGA重要设计思想及工程应用

  一、速度和面积互换原则

  二、乒乓操做及串并转换设计

  三、流水线设计

  四、逻辑复制与模块复用

  五、模块化设计

通常整个设计的顶层只作例化,不作逻辑,而后顶层下面会有模块A\B\C等,下面又能够分多个子模块。如此一来,就能够将大规模复杂系统按照必定规则划分为若干模块,而后对每一个模块进行设计 输入与综合,并将实现结果约束在预先设置好的区域内,最后将全部模块的实现结果有机的组织起来,就能完成整个系统的设计。

对于顶层模块的设计,主管设计师须要完成顶层模块的设计输入与综合,这也是进行模块化设计实现阶段的第一步即初始预算。

 六、时钟设计技巧

基于FPGA的跨时钟域信号处理

 

 

简单的TestBench设计

  所谓TestBench,即测试平台,详细的说就是给待验证的设计添加激励,同时观察他的输出响应是否符合设计要求。就是要模拟一个和待验证涉及接口的各类外围设备。

  仿真测试是FPGA设计流程中必不可少的步骤,对于测试结果的判断不只能够经过观察对比波形获得,并且能够灵活的使用脚本命令将有用的输出信息打印到终端或者产生文本进行观察,也能够写一段代码让它自动比较输出结果,总之,TestBench的设计时多种多样的,是基于行为级的语法。

简单的TestBench的搭建

  ①对被测试设计的顶层接口进行例化

  ②给被测试设计的输入接口添加激励

  ③判断被测试设计的输出响应是否知足设计要求

input转化为reg,output转换为wire

inout端口,例化时也为wire

对于激励信号的产生,只提最基本的时钟信号和复位信号的产生,时钟信号产生方式有不少,使用initial和always语句都是能够的

TestBench书写技巧

  一、封装有用的子程序

    使用task进行代码的封装,它可以和C语言的子函数同样被灵活的调用

  二、关于变量的定义

    EX1C

    EX2C

  三、HDL的并行性

    

  四、结构化TestBench

  五、读写紊乱状态

  六、防止同时调用task

时序分析基础

  一、静态时序分析基础

    静态时序分析的前提就是设计者先提出要求,而后时序分析工具才会根据特定的时序模型进行分析,即有约束才会有分析,若设计者不添加时序约束,那么时序分析就无从谈起

  二、时钟相关概念

  创建时间,是指在时钟上升沿到来以前数据必须保持稳定的时间,

  保持时间,是指时钟上升沿到来之后数据必须保持稳定的时间。

一个数据须要在时钟的上升沿被锁存,那么这个数据就必须在这个时钟上升沿的创建时间和保持时间内保持稳定。

 

  三、数据传输路径分析

  

基于ISE的时序约束

相关文章
相关标签/搜索