状态机作业8-3根据图8-32(a),按照图8-32(b)写出对应结构的VerilogHDL状态机。modulefsmb(CLK,rese,ina,outa);inputCLK,reset;inputina;outputouta;regouta;reg[1:0]c_state;parameter[1:0]st0=0;parameter[1:0]st1=1;parameter[1:0]st2=2;parameter[1:0]st3=3;always@(posedgeCLKornegedgereset))begin:if(!reset)c_state=st0;elsebegincase(c_state)st0:beginif(ina=3'b101)outa=4'b0010;elseifina=3'b111outa=4'b1100;c_state=st1;endst1:beginouta=4'b1001;if(ina==3'b000)beginc_state=st1;endelseif(ina==3'b011)beginc_state=st2;endendst2:beginouta=4'b1111;if(ina==3'b100)beginc_state=st2;endelseif(ina==3'b011)beginc_state=st1;endelseif(ina/==3'b100)beginc_state=st3;endendst3:beginif(ina=3'b101)outa=4'b1101;elseifina=3'b011outa=4'b1110;c_state=st0;enddefault:beginc_state=st0;endendcaseendendmodule8-3根据图8-32(a),按照图8-32(c)写出对应结构的VerilogHDL状态机。modulefsmc(CLK,rese,ina,outa);inputCLK,reset;inputina;outputouta;regouta;reg[1:0]current_state;reg[1:0]next_state;parameter[1:0]st0=0;parameter[1:0]st1=1;parameter[1:0]st2=2;parameter[1:0]st3=3;always@(current_stateC)begin:COMcase(current_state)st0:beginif(ina=3'b101)outa=4'b0010;elseifina=3'b111outa=4'b1100;next_state=st1;endst1:beginouta=4'b1001;if(ina==3'b000)beginnext_state=st1;endelseif(ina==3'b011)beginnext_state=st2;endendst2:beginouta=4'b1111;if(ina==3'b100)beginnext_state=st2;endelseif(ina==3'b011)beginnext_state=st1;endelseif(ina/==3'b100)beginnext_state=st3;endendst3:beginif(ina=3'b101)outa=4'b1101;elseifina=3'b011outa=4'b1110;next_state=st0;enddefault:beginnext_state=st0;endendcaseendalways@(posedgeCLKornegedgereset)begin:REGif(!reset)current_state=st0;elsecurrent_state=next_state;endendmodule用多进程方法实现状态机的设计,程序可读性强,各个进程作用明确。输出比单进程状态机快1个CLK时钟。该方法的缺点是:输出信号由组合逻辑控制输出,必将容易产生毛刺。应用单进程状态机设计将输出信号锁存后输出参考源代码略:该方法用CLK信号来驱动所有的控制输出信号输出,并由CLK判别不完全的IF语句生成锁存器,消除输出信号的毛刺。该方法的缺点是:输出信号将比用多进程的设计方法要延迟一个CLK时钟。使用状态码直接输出型的状态机:参考源代码略:该方法用CLK信号来驱动所有的控制输出信号输出,并由CLK判别不完全的IF语句生成锁存器,消除输出信号的毛刺。并用输出控制信号作为状态编码的各个位。加快输出的反应速度。不需要向方法1延迟。该方法的缺点是:程序的可读性降低。