⭐本专栏针对FPGA进行入门学习,从数电中常见的逻辑代数讲起,结合Verilog HDL言语学习与仿真,主要对组合逻辑电路与时序逻辑电路进行剖析与规划,对状况机FSM进行剖析与建模。 文章和代码已归档至【Github库房:hardware-tutorial】,需求的朋友们自取。或者关注大众号【AIShareLab】,回复 FPGA 也可获取。
轿车尾灯操控电路规划
重点介绍结构状况图的两种办法:一是试探法,二是基于算法状况机结构状况图的办法。
例 (试探法)轿车尾灯宣布的信号主要是给后边行进轿车的司机看的,一般轿车驾驶室有刹车开关(HAZ)、左转弯开关(LEFT)和右转弯开关(RIGHT),司机经过操作这3个开关给出车辆的行进状况。假定在轿车尾部左、右两边各有3个指示灯,分别用LA、LB、LC、RA、RB、RC表明,如图所示。这些灯的亮、灭规矩如下:
- 轿车正常行进时,尾部两边的6个灯悉数平息。
- 刹车时,轿车尾灯作业在告警状况,一切6个灯按必定频率闪耀(或一向坚持常亮状况)。
- 左转弯时,左侧3个灯轮番次序点亮(或按必定频率闪耀),其规矩如图(a)所示,右侧灯全灭。
- 右转弯时,右侧3个灯轮番次序点亮(或按必定频率闪耀),其规矩如图(b)所示,左侧灯全灭。
假定电路的输入时钟信号为CP,CP的频率对于轿车尾灯所要求的闪耀频率。试依据上述要求规划出一个时钟同步的状况机来操控轿车的尾灯。
(1)画出原始状况图
挑选Moore机规划该电路,则尾灯的亮、灭直接由状况译码就能够得到。由规划要求可知:轿车左转弯时,右边的灯不亮而左面的灯依次循环点亮,即0个、1个、2个或3个灯亮,分别用L0、L1、L2、L3表明,状况机在4个状况中循环。同理,轿车右转弯时,状况机也会在4个状况中循环,即左面灯不亮而右边的灯有0个、1个、2个或3个灯亮,分别用R0、R1、R2、R3表明。因为L0和R0都表明6个灯不亮,所以合起来用IDLE表明。将6个灯都亮的状况用LR3表明。可得原始的状况图就画出来了,如图所示。
剖析一下下图,就会发现一个没有考虑到的实际问题,即假如多个输入一同有用,状况机如何作业呢?下图解决了多个输入一同有用的问题,并将LEFT和RIGHT一同有用的情况处理成告警状况。经过改善且具有这一特性的状况图如下所示。
(2)列出电路的输出
因为电路的输出信号较多,不便于写在状况图中,所以单独列出输出逻辑真值表,如表所示。
(3)挑选一种编码计划,对上述状况图进行状况分配,然后用Verilog HDL描绘状况图和输出逻辑。
状况图完成后,有必要进行齐备性和互斥性的检查。
①齐备性的检查办法是:对于每一个状况,将一切脱离这一状况的条件表达式进行逻辑或运算,假如成果为1便是齐备的。不然不齐备,也便是说状况图进入某状况后,却不能跳出该状况。
②互斥性的检查办法是:对于每一个状况,将一切脱离这一状况的条件表达式找出来,然后恣意两个表达式进行逻辑与运算,假如成果为0便是互斥的。也便是要确保在任何时候不会一同激活两个脱离状况的转化,即从一个状况跳到两个状况。
运用算法状况机规划十字路口交通灯操控电路
算法状况机ASM(Algorithmic State Machine)图是描绘数字体系操控算法的流程图。运用ASM图规划数字体系,能够很简单将言语描绘的规划问题变成时序流程图的描绘,依据时序流程图就能够得到电路的状况图和输出函数,从而得出相应的硬件电路。
1.ASM图的状况框、判别框和输出框。
ASM图中有三种根本的符号,即状况框、判别框和输出框。数字体系操控序列中的状况用状况框表明,如图(a)所示。图(b)为状况框实例。图中的箭头表明体系状况的流向。
判别框表明状况变量对操控器作业的影响,如图所示:
条件输出框如下图所示,条件框的入口必定与判别框的输出相连。
2.ASM图中各种逻辑框之间的时间关系
从表面上来看ASM图与程序流程图很类似,但实际上有很大的差异。程序流程图只表明事情发生的先后次序,没有时间概念,而ASM图则不同,它表明事情的准确时间距离次序。在ASM图中每一个状况框表明一个时钟周期内的体系状况,状况框和与之相连的判别框,条件输出框所规定的操作,都是在一个共同的时钟周期完成的,一同体系的操控器从现在状况(现态)转移到下一个状况(次态)。因而,能够很简单将图(a)所示的ASM图转化成状况图,如图(b)所示,其间E和F为状况转化条件。与ASM图不同,状况图无法表明寄存器操作。
图(c)给出了ASM图的各种操作及状况转化的时间图。
3.十字路口交通灯操控电路规划举例
例(基于算法状况机结构状况图的办法)图4.4.10表明位于主干道和支干道的十字路口交通灯体系,支干道两边安装有传感器S(Sensor),试规划一个主干道和支干道十字路口的交通灯操控电路,其技能要求如下:
- 一般情况下,坚持主干道疏通,主干道绿灯亮、支干道红灯亮,而且主干道绿灯亮的时间不得少于60秒。
- 主干道车辆通行时间已经到达60秒,且支干道有车时,则主干道红灯亮、支干道绿灯亮,但支干道绿灯亮的时间不得超过30秒。
- 每次主干道或支干道绿灯变红灯时,黄灯先亮5秒钟。
规划过程:
- 明确体系的功能,进行逻辑笼统
- 确定体系计划并画出ASM图
交通灯操控单元的操控过程分为四个阶段,对应的输出有四种状况,分别用S0, S1, S2和S3表明:
S0状况:主干道绿灯亮支干道红灯亮,此刻若支干道有车等候经过,而且主干道绿灯已亮足规定的时间距离TL(60s),操控器宣布状况转化信号ST,操控器从状况S0转化到S1。
S1状况:主干道黄灯亮,支干道红灯亮,进入此状况,黄灯亮足规定的时间距离TY(5s)时,操控器宣布状况转化信号ST,操控器从状况S1转化到S2。
S2状况:支干道绿灯亮,主干道红灯亮,若此刻支干道持续有车,则持续坚持此状况,但支干道绿灯亮的时间不得超过TS(30s)时间距离,不然操控单元宣布状况转化信号ST,操控器转化到S3状况。
S3状况:支干道黄灯亮,主干道红灯亮,此刻状况与S1状况持续的时间距离相同,均为TY(5s) ,时间到时,操控器宣布ST信号,操控器从状况S3回到S0状况。
对上述S0、S1、S2和S3四种状况依照格雷码进行状况编码,分别为00,01,11和10,由此得到交通灯操控单元的ASM图如图所示。依此类推得出所示的状况图。
(3)交通灯操控器各功能模块电路的框架规划
经过剖析交通灯操控电路的要求可知,体系主要由传感器S(Sensor)、时钟脉冲发生器(CLK )、定时器(TL, TS, TY)、操控器及译码器构成,传感器S在有车辆经过期宣布一个高电平信号。
①规划操控器
依据交通灯操控单元的ASM图,得出其状况图如图4.4.13所示。ASM图中的状况框与状况图中的状况相对应,判别框中的条件是状况转化的输入条件,条件输出框与操控单元状况转化的输出相对应。状况图是描绘状况之间的转化。
②规划定时器
定时器由与体系秒脉冲同步的计数器构成,时钟脉冲上升沿到来时,在操控信号ST效果下,计数器从零开始计数,并向操控器供给模M5、M30和M60信号,即TY、TS和TL定时时间信号。
③规划译码器
当交通灯操控电路处于不同作业状况时,交通信号灯按必定的规矩与之对应。
(4)用Verilog HDL描绘交通灯操控电路
依据以上规划思路,能够写出交通灯操控电路的Verilog HDL代码如下:
//--------------- controller.v ---------------
// Traffic Signal Controller
//State definition HighWay Country
`define S0 2'b00 //GREEN RED,选用宏界说方式给出状况编码
`define S1 2'b01 //YELLOW RED,不建议选用此办法
`define S2 2'b11 //RED GREEN
`define S3 2'b10 //RED YELLOW
module controller (CLK, S, nRESET, HG, HY, HR, FG, FY, FR, TimerH, TimerL);
//I/O ports
input CLK, S, nRESET; //if S=1, indicates that there is car on the country road
output HG, HY, HR, FG, FY, FR;
//declared output signals are registers
reg HG, HY, HR, FG, FY, FR;
output [3:0] TimerH;
output [3:0] TimerL;
reg [3:0] TimerH, TimerL;
//Internal state variables
wire Tl, Ts, Ty; //timer output signals
reg St; //state translate signal
reg [1:0] CurrentState, NextState; //FSM state register
/*===== Description of the timer block =====*/
always @(posedge CLK or negedge nRESET )
begin: counter
if (~nRESET) {TimerH, TimerL} <= 8'h00;
else if (St) {TimerH, TimerL} <= 8'h00;
else if ((TimerH == 5) & (TimerL == 9))
begin {TimerH, TimerL} <= {TimerH, TimerL}; end
else if (TimerL == 9)
begin TimerH <= TimerH + 1; TimerL <= 0; end
else
begin TimerH <= TimerH; TimerL <= TimerL + 1; end
end // BCD counter
assign Ty = (TimerH==0)&(TimerL==4);
assign Ts = (TimerH==2)&(TimerL==9);
assign Tl = (TimerH==5)&(TimerL==9);
/*===== Description of the signal controller block =====*/
//FSM register:State change only at positive edge of clock
always @(posedge CLK or negedge nRESET )
begin: statereg
if (~nRESET) //Signal controller starts in S0 state
CurrentState <= `S0;
else CurrentState <= NextState;
end //statereg
// FSM combinational block: state machine using case statements
always @(S or CurrentState or Tl or Ts or Ty )
begin: fsm
case(CurrentState)
`S0: begin //S0是用define界说的,在引用时要加右撇号(反撇号)
NextState = (Tl && S) ? `S1 :`S0;
St = (Tl && S) ? 1:0;
end
`S1: begin
NextState = (Ty) ? `S2 :`S1;
St = (Ty) ? 1:0;
end
`S2: begin
NextState = (Ts || ~S) ? `S3 :`S2;
St = (Ts || ~S) ? 1:0;
end
`S3: begin
NextState = (Ty) ? `S0 :`S3;
St = (Ty) ? 1:0;
end
endcase
end //fsm
/*===== Description of the decoder block =====*/
//Compute values of main signal and country signal
always @(CurrentState)
begin
case (CurrentState)
`S0: begin
{HG, HY, HR} = 3'b100; //Highway signal is green
{FG, FY, FR} = 3'b001; //Country signal is red
end
`S1: begin
{HG, HY, HR} = 3'b010; //Highway signal is yellow
{FG, FY, FR} = 3'b001; //Country signal is red
end
`S2: begin
{HG, HY, HR} = 3'b001; //Highway signal is red
{FG, FY, FR} = 3'b100; //Country signal is green
end
`S3: begin
{HG, HY, HR} = 3'b001; //Highway signal is red
{FG, FY, FR} = 3'b010; //Country signal is yellow
end
endcase
end
endmodule
状况机规划准则
状况机要安全,是指FSM不会进入死循环,特别是不会进入非预知的状况,而且因为某些扰动进入非规划状况,也能很快的康复到正常的状况循环中来。这里面有两层含意:
其一要求该FSM的归纳完成成果无毛刺等异常扰动;
其二要求FSM要齐备,即使遭到异常扰动进入非规划状况,也能很快康复到正常状况。
状况机的规划要满足规划的面积和速度的要求;
状况机的规划要清晰易懂、易维护.
FSM输出办法
ONE HOT编码
运用N位状况寄存器表达具有Ng 状况的FSM,每个状况具有独立的寄存器位。恣意时间只有1位寄存器为1,即hot point。此为one hot。
One hot 编码方程用简单的次态方程驱动,减少了状况寄存器之间的组合逻辑级数,因而提高了运行速度。一同是以牺牲寄存器逻辑资源和提高成本为代价的。
目标器材具有较多寄存器资源,寄存器之间组合逻辑较少时比较适用。
有限状况机HDL描绘规矩
单独用一个模块来描绘一个有限状况机。这样易于简化状况的界说、调试和修正;一同,也可运用EDA东西来进行归纳与优化。
运用代表状况名的参数(parameter)来给状况赋值,不运用宏界说(define)。宏界说发生大局界说,参数则仅仅界说一个模块内的部分界说常量。不宜发生抵触。
在always组合块中运用阻塞赋值,在always时序块中运用非阻塞赋值。
可靠性与容错性
状况机应该有一个默认(default)状况,当转移条件不满足,或者状况发生了突变时,要能确保逻辑不会陷入“死循环” ;
状况机剩下状况的设置(3个去向):
a) 转入空闲状况,等候下一个作业任务的到来;
b) 转入指定的状况,去履行特定任务;
c) 转入预界说的专门处理过错的状况,如预警状况。
参考文献:
- Verilog HDL与FPGA数字体系规划,罗杰,机械工业出版社,2015年04月
- Verilog HDL与CPLD/FPGA项目开发教程(第2版), 聂章龙, 机械工业出版社, 2015年12月
- Verilog HDL数字规划与归纳(第2版), Samir Palnitkar著,夏宇闻等译, 电子工业出版社, 2015年08月
- Verilog HDL入门(第3版), J. BHASKER 著 夏宇闻甘伟 译, 北京航空航天大学出版社, 2019年03月
欢迎关注大众号【AIShareLab】,一同交流更多相关常识,前沿算法,Paper解读,项目源码,面经总结。