drink-st.v

来自「design compile synthesis user guide」· Verilog 代码 · 共 86 行

V
86
字号
`define vend_a_drink {D,dispense,collect} = {IDLE,2'b11}module drink_machine(nickel_in, dime_in, quarter_in,                     collect, nickel_out, dime_out,                     dispense, reset, clk) ;   parameter IDLE=0,FIVE=1,TEN=2,TWENTY_FIVE=3,             FIFTEEN=4,THIRTY=5,TWENTY=6,OWE_DIME=7;   input  nickel_in, dime_in, quarter_in, reset, clk;   output collect, nickel_out, dime_out, dispense;   reg collect, nickel_out, dime_out, dispense;    reg [2:0] D, Q; /* state */always @ ( nickel_in or dime_in or quarter_in or reset )      begin         nickel_out = 0;         dime_out   = 0;         dispense   = 0;         collect    = 0;         if ( reset ) D = IDLE;         else begin            D = Q;            case ( Q )            IDLE:     if (nickel_in)       D = FIVE;                      else if (dime_in)    D = TEN;                      else if (quarter_in) D = TWENTY_FIVE;            FIVE:     if(nickel_in)        D = TEN;                      else if (dime_in)    D = FIFTEEN;                      else if (quarter_in) D = THIRTY;            TEN:      if (nickel_in)       D = FIFTEEN;                      else if (dime_in)    D = TWENTY;                      else if (quarter_in) `vend_a_drink;            TWENTY_FIVE: if( nickel_in)       D = THIRTY;                      else if (dime_in)    `vend_a_drink;                      else if (quarter_in) begin                         `vend_a_drink;                          nickel_out = 1;                          dime_out = 1;                      end            FIFTEEN:  if (nickel_in)       D = TWENTY;                      else if (dime_in)    D = TWENTY_FIVE;                      else if (quarter_in) begin                         `vend_a_drink;                         nickel_out = 1;                      end             THIRTY:   if (nickel_in)       `vend_a_drink;                      else if (dime_in)    begin                         `vend_a_drink;                         nickel_out = 1;                      end                      else if (quarter_in) begin                         `vend_a_drink;                         dime_out = 1;                         D = OWE_DIME;                      end             TWENTY:   if (nickel_in)       D = TWENTY_FIVE;                      else if (dime_in)    D = THIRTY;                      else if (quarter_in) begin                         `vend_a_drink;                         dime_out = 1;                      end             OWE_DIME: begin                      dime_out = 1;                      D = IDLE;                      end            endcase    endendalways @ (posedge clk ) begin     Q = D;endendmodule

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?