哈工大数电大作业三模式状态机Word文档格式.docx
《哈工大数电大作业三模式状态机Word文档格式.docx》由会员分享,可在线阅读,更多相关《哈工大数电大作业三模式状态机Word文档格式.docx(11页珍藏版)》请在冰豆网上搜索。
姓名:
学号:
哈尔滨工业大学
1、设计要求
利用VerilogHDL设计一个逻辑控制电路,用于对某备进行模式切换控制,设备模式共三种,控制方式为:
a)直通模式:
高电平为直通有效,接地为直通无效;
b)跳频模式:
接地为跳频模式有效,高电平跳频无效;
c)调谐模式:
接地为调谐模式有效,高电平调谐无效。
设备的同一时刻只有且必须有一个模式有效,其他两个无效。
为防止同时个模式有效,模式切换之间应有较小的延时,利用按键作为三种模式切换输入(按键最好有消除抖动的措施)
2设计内容
设计方案
设计一个三状态的状态机,分别对应a、b、c三种模式,change作为模式切换变量,din作为输出控制变量。
考虑按键的抖动发生在change变化时,如果不采用按键消抖措施,change键按动时,由于发生电平跳动,输出状态可能会多次变化。
为了解决这个问题,可以设计一个采集时钟,用来检测change的变化,只要时钟的频率设计的合适,就能在每次change变化时,只使得状态机只变化一次。
状态转换图
图1状态转换图
所使用的软件
XilinxISE
源程序
modulethree(clk,din,op,change);
inputclk,din,change;
outputop;
reg[1:
0]current_state,next_state;
regop;
parameterS0=2'
b00,S1=2'
b01,S2=2'
b10;
always@(posedgeclk)
begin
current_state<
=next_state;
end
always@(current_stateorchangeordin)
begin
case(current_state)
S0:
if(change)
next_state=S1;
else
next_state=S0;
if(din)
op=1;
else
op=0;
end
end
S1:
next_state=S2;
if(din)
S2:
default:
op=0;
next_state=S0;
endcase
endmodule
仿真电路图
RTLViewer仿真电路如图2所示:
TechnologyMapViewer仿真电路如图3所示:
图4TechnologyMapViewer仿真电路图
TestBenches程序
modulethreetest;
lk(clk),
.din(din),
.op(op),
.change(change)
);
initial
begin
#1clk=0;
#1din=0;
#10
din=0;
change=0;
din=1;
#5
change=1;
#10
#
$display("
Runningtestbench"
);
always
#5clk=~clk;
仿真波形图
图4仿真波形图
图5仿真波形——消抖示例
开关状态为current_state。
从上面两个波形图可以看出,当时钟上升沿时,如果检测到change为1,则状态机发生转换,否则状态机维持原状态。
输出op=1时为有效,op=0为无效。
在370ns左右发生change连续跳变,但由于采用了采集时钟,状态只发生一次变化。