Menu Close
%title缩略图

Verilog状态机设计与应用-2

线性序列机LSM(Linear sequence machine)可以看作是有限状态机的一种特例,当所描述的状态转移与时钟呈现出一种线性规律时,我们可以直接用时钟计数作为当前状态。

%title缩略图

Verilog状态机设计与应用-1

序列检测机在通信中应用非常广泛,尤其是在串行通信中,如何在一串连续01序列中找出需要通信帧的帧头,从而使整个数据帧同步起来。简单如UART找出start位,以太网通信中如何找到PREAMBLE和SFD等从而确定一个帧的开始。

%title缩略图

权值变换法实现16进制到BCD码转换-2

无论采用哪种变换,基本要求是转换后的数值与转换前的数值表达的含义不变,如X=4’b1111,转换成BCD码后为15,用两个4位二进制表示为 A=4’b0101, B =4’b0001, 其中A为低位, B为高位;B的权值为10,A的权值为1。

%title缩略图

权值变换法实现16进制到BCD码转换-1

加减计数法实现二进制(16进制)到BCD码(十进制)的转换,实现方法非常简单,但是其缺点也很明显,(1)计算速度慢,特别在利用软件进行计算式时速度更慢,(2)功耗大,由于计算速度慢,当数值较大时,无论硬件(FPGA或ASIC)还是软件,系统长期处在计算中,因此动态平均功耗都比较大。在数值较大要求快速计算或低功耗系统中时不能满足要求,因此提出一种快速算法–权值变换法。

%title缩略图

仿真工程中$readmemh 使用-4

使用xsim目录的缺点是每次仿真复位后(右键点击SIMULTAION,选择Reset,如图2所示),会删除led_sim.sim 文件,用户需要重新制作文件,再次放入的xsim 这个目录中,比较麻烦; 如果将led_sim.sim 放到其他的目录下,可以避免这个问题的出现。

%title缩略图

仿真工程中$readmemh 使用-3

例化一个 8-bit 宽的ram存储器,深度为128。 将文本文件test.txt 文件中每一行最后一个byte 数据,存储到ram中, 从ram[0] 开始, 直到test.txt 文件的最后一行结束,或者是读出的数据达到 ram 的最大深度。文本文件的格式需要注意只能使用0-9,a-f,每一行的末尾需要以回车换行结束。

%title缩略图

仿真工程中$readmemh 使用-2

$readmemh 系统函数就是用来帮助开发者加载仿真数据的。$readmemh系统函数本身具有文件操作功能,因此不需要$fopen等文件操作。通常来说 , $readmemh 也被归为文件操作类型的系统函数。

%title缩略图

仿真工程中$readmemh 使用-1

在verilog 仿真中,有时会使用$readmemh系统函数,帮助仿真者快速装载仿真所使用的数据。在一些简单的仿真中, 我们可以通过initial 来加载仿真的数据,但是当仿真数据比较多的情况下, 就需要使用系统函数加载数据了。

%title缩略图

状态机分段描述方法-3

三段式状态机将二段式状态机的第二段再进行拆分,将次态的实现作为状态机的第二段,将输出逻辑作为状态机的第三段。伴随着三段状态机的可能还有其它与状态转移相关的逻辑,该部分内容不属于三段式状态机本身的内容,可以分开描述,也可以合并到对应的状态机的各个段中。

%title缩略图

状态机分段描述方法-2

经过改写之后可以看出,按键去抖程序的状态转换更加清晰。而且从上例的最后可以看出按键最后的输出不仅与状态有关(RLS_DEBOUNCING),而且与按键的输入有关,因此该状态机是梅利机。而且上面是标准的一段式状态机。

%title缩略图

状态机分段描述方法-1

上几节内容介绍了状态机建模以及摩尔机、梅利机的描述,状态机的编码格式等内容,本节内容着重介绍状态机的分段描述方法。按照状态机的分段描述方法,状态机可分为一段式状态机,二段式状态机,三段式状态机。

%title缩略图

状态机的编码格式-3

由格雷码到自然二进制码转换,保留格雷码的最高位,二进制码次高位由二进制码最高位与格雷码次高位异或得到,之后的各位的计算结果由二进制码上一位的计算结果与格雷码本位相异或得到。

%title缩略图

状态机的编码格式-2

格雷码是一种可靠性高的编码,与自然二进制编码不同,相邻格雷码的编码每次只有一位不同,因此在状态顺序转换时,是错误最小的编码方式。 在数字系统中,常要求代码按一定顺序变化。

%title缩略图

状态机的编码格式-1

在上几节内容中介绍的状态机状态都是采用二进制自然码的编码格式,当状态机的状态比较多,而且状态机的时钟频率较高时,由于二进制编码在状态转换时会有多个位同时变化,会对状态机的安全产生影响;因此,二进制编码虽然简单,但有时为了可靠性还会选择其它的编码方式。

%title缩略图

状态机建模–梅利机与摩尔机-3

梅利机的描述如下面的例子所示,在状态S0时系统的输出也由输入与状态共同决定,这种状态机是典型的梅利机。梅利机中的输出可以是寄存器输出,也可以是组合逻辑输出。一般为了输出稳定都在clk的边沿下锁存输出。

%title缩略图

状态机建模–梅利机与摩尔机-2

从上例的描述可以清楚的看出状态机的现态cs(count)及次态ns的实现。而且从本例可以看出,输出仅仅是状态的译码,与输入无关,因此是典型的摩尔机。当然ns的描述也可以在always过程中由case语句实现。

%title缩略图

状态机建模–梅利机与摩尔机-1

上节内容讲解了状态机的基本理论、分类以及在数字电路,软件方面的建模及应用,最后以简单的例子对比常规Verilog程序设计状态机程序之间的设计关系。可以看出在时序电路的设计钟,特别是Verilog语言的描述中,尽管没有显式的使用状态机的描述方式,状态机在时序电路的设计中几乎无处不在的。

%title缩略图

状态机概述-3

状态机几乎无处不在,特别是在软件设计,数字时序电路设计,FPGA,IC设计等领域被广泛使用。如图4,就是一个典型数字时序电路状态机的模型。在数字时序电路中,由于触发器的翻转是受时钟和输入控制,触发器的输出可以很好的表达状态机的状态,所以许多日常生活中的状态都可以用时序电路描述,我们称这种行为为时序电路状态机建模。

%title缩略图

状态机概述-2

状态是将事务的发展过程加以抽象和概括,是事务发展的标志性阶段。例如可将手机的运行状态抽象为5个状态,分别为:关机,待机、呼叫、响铃、通话。

%title缩略图

状态机概述-1

在日常生活或工作中希望在特定条件下有步骤的做事,计算机或数字系统同样也类似的需求,这样才能充分利用软硬件系统更好的为人类服务。在特定条件下有步骤执行任务就会用到状态机的概念,那么到底什么是状态机呢?通俗的讲,状态机就是状态转移机制,一般涉及到状态和状态转移两个概念,状态转移一般在特定的条件下发生。在日常生活中状态机几乎无处不在。如手机的运行状态,作息时间表,小学及中学课表,农民的一年四季劳作安排等。

%title缩略图

SPI 通讯协议(1)SPI定义与应用-1

SPI(Serial Peripheral Interface)串行外设接口是Motorola公司在2000年推出的一种同步接口。这种接口首先由Motorola 公司在80年代中期开发,后来逐步成为行业标准。那么什么是SPI呢?它是一种高速、全双工的同步串行控制总线,主要用于芯片间的传输。相比较其他常用的通讯协议或接口,比如I2C,UART或其他并行总线等

%title缩略图

Vivado中综合,实现,编程和调试工程可能会出现的问题及解决方案-2

还有一种可能是连接JTAG和电脑的线缆供电不足,这种情况可以通过用外部12V电源供电的方式,如图3.2所示,将电源线接到电源口,并且将电源跳线连接EXT-5V和PWR_5V(用连接JTAG和电脑的线供电时,需要将电源跳线跳到USB_5V和PWR_5V),如图3.3所示,即可缓解单根JTAG到电脑线的供电不足问题。也可以尝试同时连接JTAG端口,UART端口和电脑,用两根线缆同时供电。