题目内容售货机有一款 2 元的商品支持 0.5 元和 1 元两种币值。设计一个状态机检测投入的货币当累计投入币值大于等于商品价格时自动输出商品并找零。有没有投币看din_vld投币多少看din_vld有效时的din输出商品看dout_vld找零看dout_vld有效时的dout。一.画图判断分支点二.编写前两段的初始化和组合逻辑判断代码module c_shj1(clk ,rst_n ,din ,din_vld ,dout_vld,dout);input clk ;input rst_n ;input din ;input din_vld ;output dout ;output dout_vld ;reg dout ;reg dout_vld ;reg [3:0] state_c ;reg [3:0] state_n ;wire s02s1_state;wire s02s2_state;wire s12s2_state;wire s12s3_state;wire s22s3_state;wire s22s0_state;wire s32s0_state;parameter S0 4b0000;parameter S1 4b0001;parameter S2 4b0010;parameter S3 4b0100;always (posedge clk or negedge rst_n) beginif (rst_n0) beginstate_c S0 ;endelse beginstate_c state_n;endendalways (*) begincase(state_c)S0 :beginif(s02s1_state)beginstate_n S1 ;endelse if(s02s2_state)beginstate_n S2 ;endelsestate_n state_c ;endS1 :beginif(s12s2_state)beginstate_n S2 ;endelse if(s12s3_state)beginstate_n S3 ;endelsestate_n state_c ;endS2 :beginif(s22s3_state)beginstate_n S3 ;endelse if(s22s0_state)beginstate_n S0;endelsestate_n state_c ;endS3 :beginif(s32s0_state)beginstate_n S0 ;endelsestate_n state_c ;enddefault : state_n S0 ;endcaseend三.编写第三段判断条件assign s02s1_state state_c S0 din_vld din 0 ;assign s02s2_state state_c S0 din_vld din 1 ;assign s12s2_state state_c S1 din_vld din 0 ;assign s12s3_state state_c S1 din_vld din 1 ;assign s22s3_state state_c S2 din_vld din 0 ;assign s22s0_state state_c S2 din_vld din 1 ;assign s32s0_state state_c S3 din_vld ;四.编写第四段的输出判断always (posedge clk or negedge rst_n)beginif(rst_n1b0)begindout_vld 0 ;endelse begindout_vld s22s0_state || s32s0_state;endendalways (posedge clk or negedge rst_n)beginif(rst_n1b0)begindout 0 ;endelse if(s32s0_state din_vld din1)begindout 1 ;endelse begindout 0 ;endend