学习笔记1--用组合和时序逻辑的行为级别模型进行逻辑设计

行为建模

Verilog支持结构级建模和行为级建模。
结构级建模:把基本与/或门的功能单元进行连接,产生某一特定的功能器件。
行为级建模:描述设计的功能特性(逻辑电路的输入-输出模型),即所设计的电路是干什么的,而不用考虑怎样实现它的硬件设计。传播延迟不包含在电路的行为级模型中。
在当今设计ASIC和FPGA中,大规模的电路被分割以形成一个架构——即通过端口进行通信的功能单元组成的结构,这样就可以用一个能表示其功能的行为级模型来描述每一个单元(Hierarchy)

行为级建模的数据类型

线网型:起到物理电路中导线的作用,建立了设计对象之间的连接。
寄存器型:在程序运行过程中存储信息。

组合逻辑的Verilog描述的对应形式

逻辑描述 Verilog描述
电路原理图 结构模型
真值表 用户定义原语
布尔表达式 连续赋值语句

触发器和锁存器的周期性行为模型

过程块:位于并行块之中,仿真时被顺序读取。执行时,也是按照代码被读取的顺序执行。
周期行为:它们在最后一条过程语句执行完之后仍然不能终止,而是继续执行。

数据流/寄存器传输级模型

组合逻辑的数据流模型常用来描述同步逻辑信号的并发计算
在同步逻辑中计算的初始化是在时钟的有效沿时刻进行的,计算是在下一有效沿时刻寄存器的存储前完成的。(非阻塞赋值的语义很符合该特性,右侧表达式的值在active region计算,在unblocking region赋值)

基于算法的模型

用电路输入-输出算法关系描述的行为模型要比RTL描述的抽象。这种描述规定了周期性行为中过程语句的次序。语句的执行结果决定了存储变量的值以及其最后的输出。
RTL模型中的赋值语句是并行执行的(非阻塞赋值在效果上为并行执行),而且是在指定结构描述的上下文中显示定义的寄存器上进行操作运算的。而算法模型中的语句是按次序执行的,没有明显的结构形式。

任务和函数

任务为Verilog行为中创建过程语句的层次化结构,而函数替代表达式

任务

环境中的变量对任务是可见的,其余本地局部变量也可在任务中定义。任务可以调用它自己,而所有的调用均可共享存储任务变量的存储器。Verilog2001增加了automatic任务和函数,它们会给任务或函数的每次调用分配唯一的存储器,因而支持递归循环。
对于任务来说,所有自变量传递的都是一个值,而不是该值的指针。
以下是IEEE标准对automatic选项的解释:
The first syntax shall begin with the keyword task, followed by the optional keyword automatic, followed by a name for the task and a semicolon, and ending with the keyword endtask.
The keyword automatic declares an automatic task that is reentrant, with all the task declarations allocated dynamically for each concurrent task entry.
A task may be enabled more than once concurrently.
All variables of an automatic task shall be replicated on each concurrent task invocation to store state specific to that invocation.
All variables of a static task shall be static in that there shall be a single variable corresponding to each declared local variable in a module
instance, regardless of the number of concurrent activations of the task.
However, static tasks in different instances of a module shall have separate storage from each other.

行为建模的算法状态级图

通常时序机的行为动作是在控制通路的控制下,由数据通路寄存器上的同步时序操作组成的。
有限状态级可以借助时序图、状态表、状态图和算法状态机图描述和设计。
状态图(STG)表示引入输入而产生的状态转移,但是STG并不直接显示输入数据变化时状态的演变过程。
算法状态级图(ASM)类似于软件流程图,但显示的是计算动作(如寄存器操作)的时间顺序,以及在状态机输入影响下发生的时序步骤
三种基本元素:状态框、判决框、条件框。
基本单元:ASM块
状态框:表示同步时钟事件之间的机器状态。
判决框:在当前状态下,由输入判断下一状态。多个判决框的顺序隐含了相关信号或条件的优先级。
条件框:分支上的条件输出。
STG和ASM能相互转换。

数据通路与控制通路

FSM一种重要应用就是控制更普遍的时序机上的寄存器操作。为了方便起见,这种时序机被分为控制通路和数据通路。
控制通路能对外部事件做出反应。
数据通路则应满足高吞吐量数据计算和传输要求。通常包含算术模块。
控制通路可以用ASM图描述,其输出控制着数据通路的执行操作以及与周围环境的交互。控制通路的ASM图中的状态框可以表示状态机的Moore型输出,条件框可以表示Mealy型输出,判决框可以表示基本输入(来自环境的)和状态输入(来自数据通路的)。

ASMD图

当控制通路的状态沿着(ASM)通道发生转移并且标志信号(控制数据通路的信号)有效时,通过标注每个通道可指出那些在相关数据通路单元中所发生的并发寄存器操作。以这种方式连接到数据通路的ASM图成为ASMD图(算法状态机和数据通路图)。
ASMD图有助于将时序机设计中数据通路和控制器分离开来,同时建立两单元之间的清晰联系。随着状态转移而发生的寄存器并行执行操作是在图形的通道上标识出来的,而不是在条件框或状态框中标识,因为这些寄存器并不属于控制通路。
例1
画出二级流水线寄存器的控制通路、数据通路和ASMD图。
学习笔记1--用组合和时序逻辑的行为级别模型进行逻辑设计
学习笔记1--用组合和时序逻辑的行为级别模型进行逻辑设计
左图为简化的ASMD图,右图为完整的ASMD图。
控制通路通常用FSM设计,产生标志信号,如Clr_P1_P0, Ld_P1_P0。

数据通路控制器的设计步骤:

(1)首先理解在给定数据通路结构上必须执行的时序寄存器操作(设计时序机时,要先设计数据通路再控制通路)
(2)定义一个ASM图,其状态机受控于数据通路的主要输入信号和/或状态信号。
(3)使用与控制通路的状态转移相关的数据通路操作,标注ASM图的弧线来形成ASMD图。
(4)用无条件输出信号标注控制器的状态。
(5)把那些由控制通路产生用以控制数据通路的信号写入条件框。如果信号把数据通路的状态报给控制器,且这些信号被列入判决框中,则表明状态机之间具有反馈连接
强调文本 强调文本

去抖开关

学习笔记1--用组合和时序逻辑的行为级别模型进行逻辑设计
从上移动到下臂时,输出从1到0,即使会抖动也不会抖动到与上臂形成闭合,所以输入为1-0或1-1。1-0置0,1-1保持。

同步器

异步信号时序违例造成亚稳态,所得到的值是一个不确定的值。在对这个不确定的状态做进一步接释之前必须以某种方式来判定。其实得出什么决定并不重要,重要的是有唯一的结果。(不用电压域对x的解读不一样)
必须判断出一个异步信号是高电平还是低电平状态后才能进入同步环境。实现这一决定功能的电路成为同步器。一个同步器需要一些时间来做出决定,并且在某些情况下这一时间可能任意长(还有可能决定错)。因此一个异步-同步接口总是易于出错,这称为同步失效(失效了可以下个周期再读一边,那时数据就是稳定的了,不会出现亚稳态,只不过需要再延时一个周期)。一般通过加长做出决定前的等待时间可以使这一失效概率以指数方式减小。

两种基本类型的同步器

(1)异步输入脉冲宽度比时钟周期更大
学习笔记1--用组合和时序逻辑的行为级别模型进行逻辑设计
最大等待时间是n+1,n为同步器级数。等待时间是可以容忍的,因为异步输入本身没有一个可预测的到达时间。
(2)异步脉冲宽度比时钟周期小
学习笔记1--用组合和时序逻辑的行为级别模型进行逻辑设计
异步清0将Synch_out信号限制在一个周期内。
只有第二个寄存器会发生亚稳态,因为传到q1的VCC信号随时可以来;而异步清0信号,是在时钟上升沿到来Synch_out置1后清0不会引起亚稳态。
即使第二的触发器出现亚稳态,也会在最后稳定下来,对输出无影响,因为下一时钟沿读取的是稳定的值。
图c:不会出现亚稳态的情况
学习笔记1--用组合和时序逻辑的行为级别模型进行逻辑设计
图d:会出现亚稳态的情况
学习笔记1--用组合和时序逻辑的行为级别模型进行逻辑设计
学习笔记1--用组合和时序逻辑的行为级别模型进行逻辑设计

设计实例

5.18的键盘扫描和译码器,其中同步装置用与后续电路相反的敏感时钟沿消除硬件潜在的竞争条件很有意思,不知道怎么描述成一般情况可以再思考思考。