⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 复件 sellmachine.tdf

📁 用VHDL语言编写的自动售货机程序
💻 TDF
字号:
INCLUDE "lpm_counter";
INCLUDE "lpm_compare";
INCLUDE "lpm_dff";

SUBDESIGN SELLMACHINE

(
CLK1K:INPUT;
START:INPUT;
CANCEL:INPUT;

A1:INPUT;
A4:INPUT;
A8:INPUT;

COIN1:INPUT;
COIN2:INPUT;
COIN5:INPUT;

REJECTA:OUTPUT;
REJECTCOIN:OUTPUT;
OUTA1,OUTA4,OUTA8:OUTPUT;
 
LAMP[3..0]:OUTPUT;

TEST[7..0]:OUTPUT;
)

VARIABLE

FP500COUNT[8..0]:NODE;
CLK1S,CLK1/2S:NODE;
A1COUNT[1..0]:NODE;
A4COUNT[1..0]:NODE;
A8COUNT[1..0]:NODE;
A1EN,A4EN,A8EN:NODE;
COUNTTIME[4..0]:NODE;
CHANGE[3..0]:NODE;
SUMCOIN[3..0]:NODE;
COIN1COUNT[3..0]:NODE;
COIN2COUNT[3..0]:NODE;
COIN5COUNT[3..0]:NODE;
COIN1EN,COIN2EN,COIN5EN:NODE;
INCOIN5COUNT[1..0],INCOIN1COUNT[1..0],INCOIN2COUNT[1..0]:NODE;
INTREJECTCOIN:NODE;
INTSUMCOIN[3..0]:NODE;

BEGIN

--test pins
TEST[]=(B"000",COUNTTIME[4..0]);

--500 divide frequency
--(FP500COUNT[8..0],,,,,,,,,,,,,,,,,)=lpm_counter (,,,,,,,,,CLK1K,,,,,,,,,(FP500COUNT[]==H"1F3"),,,) WITH (LPM_WIDTH=9);
--(,CLK2S,,,,)=lpm_compare (FP500COUNT[],B"000000010",CLK1K,,) WITH (LPM_WIDTH=9,LPM_PIPELINE=1);

(FP500COUNT[8..0],,,,,,,,,,,,,,,,,)=lpm_counter (,,,,,,,,,CLK1K,,,,,,,,,(FP500COUNT[]==H"008"),,,) WITH (LPM_WIDTH=9);
(,CLK1/2S,,,,)=lpm_compare (FP500COUNT[],B"000000010",CLK1K,,) WITH (LPM_WIDTH=9,LPM_PIPELINE=1);


CLK1S=JKFF (VCC,VCC,CLK1/2S,,);

--select food
(A1COUNT[1..0],,,,,,,,,,,,,,,,,)=lpm_counter (,,CLK1K,!(A1EN # A4EN # A8EN),!(A1COUNT[]==H"3") & DFF(A1,CLK1K,,),,,DFF(START,CLK1K,,),,,,,,,) WITH (LPM_WIDTH=2);
IF A1COUNT[]==H"3" THEN A1EN=B"1";
ELSE A1EN=B"0";
END IF;

(A4COUNT[1..0],,,,,,,,,,,,,,,,,)=lpm_counter (,,CLK1K,!(A1EN # A4EN # A8EN),!(A4COUNT[]==H"3") & DFF(A4,CLK1K,,),,,DFF(START,CLK1K,,),,,,,,,) WITH (LPM_WIDTH=2);
IF A4COUNT[]==H"3" THEN A4EN=B"1";
ELSE A4EN=B"0";
END IF;

(A8COUNT[1..0],,,,,,,,,,,,,,,,,)=lpm_counter (,,CLK1K,!(A1EN # A4EN # A8EN),!(A8COUNT[]==H"3") & DFF(A8,CLK1K,,),,,DFF(START,CLK1K,,),,,,,,,) WITH (LPM_WIDTH=2);
IF A8COUNT[]==H"3" THEN A8EN=B"1";
ELSE A8EN=B"0";
END IF;

IF (A1EN # A4EN # A8EN) THEN
REJECTA=B"1";
ELSE
REJECTA=B"0";
END IF;


--pay coin,sum coin

   (COUNTTIME[4..0],,,,,,,,,,,,,,,,,)=lpm_counter (,,,,,CLK1S,(A1EN # A4EN # A8EN)&!DFF(VCC,CANCEL,!DFF(START,CLK1K,,),),!(COUNTTIME[]==H"1E"),,,DFF(START,CLK1K,,),,,,,,,) WITH (LPM_WIDTH=5);

   (INCOIN1COUNT[1..0],,,,,,,,,,,,,,,,,)=lpm_counter (,,CLK1K,,!(INCOIN1COUNT[]==H"3"),,,DFF(START,CLK1K,,) # DFF(!COIN1,CLK1K,,),,,,,,,) WITH (LPM_WIDTH=2);
   (,COIN1EN,,,,)=lpm_compare (INCOIN1COUNT[],B"10",CLK1K,,) WITH (LPM_WIDTH=2,LPM_PIPELINE=1);
   (COIN1COUNT[3..0],,,,,,,,,,,,,,,,,)=lpm_counter (,,,,COIN1EN,,DFF(COUNTTIME[]!=H"1E",CLK1K,,),,,DFF(START,CLK1K,,),,,,,,,) WITH (LPM_WIDTH=4);

   (INCOIN2COUNT[1..0],,,,,,,,,,,,,,,,,)=lpm_counter (,,CLK1K,,!(INCOIN2COUNT[]==H"3"),,,DFF(START,CLK1K,,) # DFF(!COIN2,CLK1K,,),,,,,,,) WITH (LPM_WIDTH=2);
   (,COIN2EN,,,,)=lpm_compare (INCOIN2COUNT[],B"10",CLK1K,,) WITH (LPM_WIDTH=2,LPM_PIPELINE=1);
   (COIN2COUNT[3..0],,,,,,,,,,,,,,,,,)=lpm_counter (,,,,COIN2EN,,DFF(COUNTTIME[]!=H"1E",CLK1K,,),,,DFF(START,CLK1K,,),,,,,,,) WITH (LPM_WIDTH=4);

   (INCOIN5COUNT[1..0],,,,,,,,,,,,,,,,,)=lpm_counter (,,CLK1K,,!(INCOIN5COUNT[]==H"3"),,,DFF(START,CLK1K,,) # DFF(!COIN5,CLK1K,,),,,,,,,) WITH (LPM_WIDTH=2);
   (,COIN5EN,,,,)=lpm_compare (INCOIN5COUNT[1..0],B"10",CLK1K,,) WITH (LPM_WIDTH=2,LPM_PIPELINE=1);
   (COIN5COUNT[3..0],,,,,,,,,,,,,,,,,)=lpm_counter (,,,,COIN5EN,,DFF(COUNTTIME[]!=H"1E",CLK1K,,),,,DFF(START,CLK1K,,),,,,,,,) WITH (LPM_WIDTH=4);
   INTSUMCOIN[3..0]=COIN1COUNT[]+COIN2COUNT[]+COIN2COUNT[]+COIN5COUNT[]+
                 COIN5COUNT[]+COIN5COUNT[]+COIN5COUNT[]+COIN5COUNT[];
   (SUMCOIN[],)=lpm_dff (INTSUMCOIN[], CLK1K,,,,,,, DFF(START,CLK1K,,),,)WITH (LPM_WIDTH=4);
   
--recognize whether cance key is pressed and deal with datas and state of output    
IF DFF(COUNTTIME[]!=H"1E",CLK1K,,) THEN 
   
   OUTA1=B"0";
   OUTA4=B"0";
   OUTA8=B"0";

   IF A1EN THEN 
      IF SUMCOIN[]>=H"1" THEN 
      INTREJECTCOIN=B"1";
      OUTA1=B"1";
      CHANGE[]=SUMCOIN[]-H"1";
      LAMP[]=CHANGE[];
      REJECTCOIN=DFF(INTREJECTCOIN,CLK1K,,);

      ELSIF (SUMCOIN[]<H"1")&DFF(VCC,CANCEL,!DFF(START,CLK1K,,),) THEN
      INTREJECTCOIN=B"1";
      CHANGE[]=SUMCOIN[];
      LAMP[]=CHANGE[];
      REJECTCOIN=DFF(INTREJECTCOIN,CLK1K,,);

      ELSE 
      INTREJECTCOIN=B"0";
      REJECTCOIN=DFF(INTREJECTCOIN,CLK1K,,);
      END IF;
   END IF;

   IF A4EN THEN 
      IF SUMCOIN[]>=H"4" THEN 
      INTREJECTCOIN=B"1";
      OUTA4=B"1";
      CHANGE[]=SUMCOIN[]-H"4";
      LAMP[]=CHANGE[];
      REJECTCOIN=DFF(INTREJECTCOIN,CLK1K,,);

      ELSIF (SUMCOIN[]<H"4")&DFF(VCC,CANCEL,!DFF(START,CLK1K,,),) THEN
      INTREJECTCOIN=B"1";
      CHANGE[]=SUMCOIN[];
      LAMP[]=CHANGE[];
      REJECTCOIN=DFF(INTREJECTCOIN,CLK1K,,);

      ELSE 
      INTREJECTCOIN=B"0";
      REJECTCOIN=DFF(INTREJECTCOIN,CLK1K,,);
      END IF;
   END IF;

   IF A8EN THEN 
      IF SUMCOIN[]>=H"8" THEN 
      INTREJECTCOIN=B"1";
      OUTA8=B"1";
      CHANGE[]=SUMCOIN[]-H"8";
      LAMP[]=CHANGE[];
      REJECTCOIN=DFF(INTREJECTCOIN,CLK1K,,);

      ELSIF (SUMCOIN[]<H"8")&DFF(VCC,CANCEL,!DFF(START,CLK1K,,),) THEN
      INTREJECTCOIN=B"1";
      CHANGE[]=SUMCOIN[];
      LAMP[]=CHANGE[];
      REJECTCOIN=DFF(INTREJECTCOIN,CLK1K,,);

      ELSE 
      INTREJECTCOIN=B"0";
      REJECTCOIN=DFF(INTREJECTCOIN,CLK1K,,);
      END IF;
   END IF;
   
   ELSE
      
     INTREJECTCOIN=B"1";
     REJECTCOIN=DFF(INTREJECTCOIN,CLK1K,,);
  
--changes
   IF A1EN THEN 
      IF SUMCOIN[]<H"1" THEN 
      OUTA1=B"0";
      CHANGE[]=SUMCOIN[];
      LAMP[]=CHANGE[];
      ELSE 
      OUTA1=B"1";
      CHANGE[]=SUMCOIN[]-H"1";
      LAMP[]=CHANGE[];
      END IF;
   END IF;
   IF A4EN THEN
      IF SUMCOIN[]<H"4" THEN 
      CHANGE[]=SUMCOIN[];
      OUTA4=B"0";
      LAMP[]=CHANGE[];
      ELSE 
      OUTA4=B"1";
      CHANGE[]=SUMCOIN[]-H"4";
      LAMP[]=CHANGE[];
      END IF;
   END IF;
   IF A8EN THEN
      IF SUMCOIN[]<H"8" THEN 
      CHANGE[]=SUMCOIN[];
      OUTA8=B"0";
      LAMP[]=CHANGE[];
      ELSE 
      CHANGE[]=SUMCOIN[]-H"8";
      OUTA8=B"1";
      LAMP[]=CHANGE[];
      END IF;
   END IF;

  
   
END IF;



END;

⌨️ 快捷键说明

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