利用有限状态机进行复杂时序逻辑的设计:
目的:掌握利用有限状态机实现复杂时序逻辑的方法。
在数字电路中我们已经学习过通过建立有限状态机来进行数字逻辑的设计,而在Verilog HDL硬件描述语言中,这种设计方法得到进一步的发展。通过Verilog HDL提供的语句,我们可以直观地设计出适合更为复杂的时序逻辑的电路。关于有限状态机的设计方法在教材中已经作了较为详细的阐述,在此就不赘述了。
下例是一个简单的状态机设计,功能是检测一个5位二进制序列"10010"。考虑到序列重叠的可能,有限状态机共提供8个状态(包括初始状态IDLE)。
状态机设计确实是一个很实用的工具,可以加快设计的进展。当然在进行状态机原理图的会之前设计者心里要清楚各个状态间如何进行转换。
用状态机设计后生成的VerilogHDL:
module untitled(CLK,CODE_IN,RESET,CHECK);
input CLK;
input CODE_IN,RESET;
output CHECK;
reg CHECK,next_CHECK;
reg A,next_A,B,next_B,C,next_C,D,next_D,E,next_E,IDLE,next_IDLE;
always @(posedge CLK)
begin
A = next_A;
B = next_B;
C = next_C;
D = next_D;
E = next_E;
IDLE = next_IDLE;
CHECK = next_CHECK;
end
always @ (A or B or C or CODE_IN or D or E or IDLE or RESET)
begin
if ( ~RESET & CODE_IN & A | ~RESET & CODE_IN & B | ~RESET & CODE_IN & D | ~RESET & CODE_IN & E | ~RESET & CODE_IN & IDLE ) next_A=1;
else next_A=0;
if ( ~RESET & ~CODE_IN & A ) next_B=1;
else next_B=0;
if ( ~RESET & ~CODE_IN & B | ~RESET & ~CODE_IN & E ) next_C=1;
else next_C=0;
if ( ~RESET & CODE_IN & C ) next_D=1;
else next_D=0;
if ( ~RESET & ~CODE_IN & D ) next_E=1;
else next_E=0;
if ( ~CODE_IN & C | ~CODE_IN & IDLE | RESET ) next_IDLE=1;
else next_IDLE=0;
if ( ~RESET & ~CODE_IN & D ) next_CHECK=1;
else next_CHECK=0;
end
endmodule
我要赚赏金打赏帖 |
|
|---|---|
| 基于MCP23S17的输入输出功能模块控制被打赏¥20元 | |
| 【S32K3XX】SPD 软件包使用Link文件修改被打赏¥22元 | |
| Switch-Case局部变量定义问题被打赏¥23元 | |
| 基于米尔TIAM62L开发板的串口通信及应用被打赏¥20元 | |
| PCF8574功能模块及其使用被打赏¥20元 | |
| 传感器LSM6DSO及LIS3MDL的功能检测被打赏¥18元 | |
| LPS25HB气压传感器及其检测被打赏¥18元 | |
| HTS221温湿度传感器及其检测被打赏¥18元 | |
| 【S32K3XX】HSE FW 版本更新被打赏¥21元 | |
| 基于ArduinoUNO开发板的AT24C02读写测试被打赏¥16元 | |
我要赚赏金
