您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 基于VerilogHDL的车载DVD位控子程序
//异常判断子程序moduleABN_DIFF(CLKIN,DATA,TIME00,ADCABCP2,ADCABCP5,VPA,VPB,VPC,VPD,HPE,HPF,HPG,HPH,MOTOR11P2,MOTOR12P2,MOTOR21P2,MOTOR22P2,MOTOR11P5,MOTOR12P5,MOTOR21P5,MOTOR22P5,ERROR0,MOTOR11P4,MOTOR12P4,MOTOR21P4,MOTOR22P4);inputCLKIN,VPA,VPB,VPC,VPD,HPE,HPF,HPG,HPH;inputMOTOR11P2,MOTOR12P2,MOTOR21P2,MOTOR22P2;inputMOTOR11P5,MOTOR12P5,MOTOR21P5,MOTOR22P5;input[2:0]ADCABCP2,ADCABCP5;input[12:0]TIME00;input[7:0]DATA;outputERROR0;outputMOTOR11P4,MOTOR12P4,MOTOR21P4,MOTOR22P4;regMOTOR11P4,MOTOR12P4,MOTOR21P4,MOTOR22P4;regERROR0;reg[7:0]V_POSTION4,H_POSTION4;parameterVA=20,VB=180,VC=210,VD=240,HE=20,HF=180,HG=210,HH=240;always@(posedgeCLKIN)beginif(ADCABCP2==3'b000||ADCABCP5==3'b000)begin//水平位置V_POSTION4=DATA;if((MOTOR11P2==1||MOTOR12P2==1||MOTOR11P5==1||MOTOR12P5==1)&&TIME00=4000&&(V_POSTION4VA&&V_POSTION4VB))beginERROR0=1;//出盒或进盒过程中出错MOTOR11P4=0;MOTOR12P4=0;endif((MOTOR11P2==1||MOTOR12P2==1||MOTOR11P5==1||MOTOR12P5==1)&&TIME00=2666&&(VPB==0&&VPC==0&&VPD==0))beginERROR0=1;//水平位置调节时出错MOTOR11P4=0;MOTOR12P4=0;endendif(ADCABCP2==3'b001||ADCABCP5==3'b001)beginH_POSTION4=DATA;if(((MOTOR21P2==1||MOTOR22P2==1)||(MOTOR21P5==1||MOTOR22P5==1))&&TIME00=4000&&(H_POSTION4HE&&H_POSTION4HF))beginERROR0=1;//大角度翻转时出错MOTOR21P4=0;MOTOR22P4=0;endif(((MOTOR21P2==1||MOTOR22P2==1)||(MOTOR21P5==1||MOTOR22P5==1))&&TIME00=2666&&(HPF==0&&HPG==0&&HPH==0))beginERROR0=1;//角度调节时出错MOTOR21P4=0;MOTOR22P4=0;endendif(ERROR0==1&&TIME00=4000)beginERROR0=0;endendEndmodule//DIVIDERFREQUENCY分频子进程moduleDIV_COUNT(CLKIN,TIME_S,ADIVDER,TIME00);inputCLKIN,TIME_S;outputADIVDER;output[12:0]TIME00;reg[23:0]COUNT;reg[12:0]TIME00;regADIVDER;always@(posedgeCLKIN)beginif(COUNT37)COUNT=COUNT+1;elseCOUNT=0;ADIVDER=!ADIVDER;endalways@(posedgeADIVDER)beginif(TIME_S==0)TIME00=0;elseTIME00=TIME00+1;endendmodule//open_closemoduleOPEN_OP(CLKIN,OPEN_CLOSE,ERROR0,TILT,TILT_BCD,TILT_FGH,DATA,GOOD0,ADCABCP2,MOTOR11P2,MOTOR12P2,MOTOR21P2,MOTOR22P2,TIME_S,EOC,READ,WRITE,OP,ADCCLK);inputCLKIN;inputOPEN_CLOSE,ERROR0,TILT,TILT_BCD,TILT_FGH;input[7:0]DATA;outputMOTOR11P2,MOTOR12P2,MOTOR21P2,MOTOR22P2,GOOD0,TIME_S,EOC,READ,WRITE,OP,ADCCLK;output[2:0]ADCABCP2;reg[7:0]V_POSTION2,H_POSTION2;regMOTOR11P2,MOTOR12P2,MOTOR21P2,MOTOR22P2;regGOOD0,TIME_S;reg[2:0]ADCABCP2;wireEOC,READ,WRITE,OP,ADCCLK;assignEOC=(CLKIN);assignREAD=(~CLKIN);assignWRITE=(~CLKIN);assignOP=(~CLKIN);assignADCCLK=(~CLKIN);parameterVA=20,VB=180,VC=210,VD=240,HE=20,HF=180,HG=210,HH=240;always@(posedgeCLKIN)beginif((OPEN_CLOSE==1)&&(ERROR0==0)&&(TILT_BCD==0)&&(TILT_FGH==0)&&(GOOD0==0))//正常情况下出盒beginADCABCP2=3'b000;V_POSTION2=DATA;if((V_POSTION2=VA)&&(V_POSTION2VB)&&(ADCABCP2==3'b000))beginMOTOR11P2=1;if((V_POSTION2=VB)&&(ADCABCP2==3'b000))beginMOTOR11P2=0;ADCABCP2=3'b001;TIME_S=0;H_POSTION2=DATA;endendelseif(H_POSTION2=HE&&H_POSTION2HF&&ADCABCP2==3'b001)beginMOTOR21P2=1;//向上翻转if(H_POSTION2=HF&&ADCABCP2==3'b001)beginMOTOR21P2=0;TIME_S=0;GOOD0=1;end//出盒操作完成endendelseif(OPEN_CLOSE==0&&ERROR0==0&&TILT_BCD==0&&TILT_FGH==0&&GOOD0==1)begin//回盒条件成立ADCABCP2=3'b001;H_POSTION2=DATA;if(H_POSTION2HE&&H_POSTION2=HH&&ADCABCP2==3'b001)beginMOTOR22P2=1;if(H_POSTION2=HE&&ADCABCP2==3'b001)begin//向下翻转MOTOR22P2=0;TIME_S=0;ADCABCP2=3'b000;V_POSTION2=DATA;endendelseif(V_POSTION2VA&&V_POSTION2=VD&&ADCABCP2==3'b000)beginMOTOR12P2=1;//水平回盒if(V_POSTION2=VA&&ADCABCP2==3'b000)beginMOTOR12P2=0;TIME_S=0;GOOD0=0;endendendendendmodule//判断输出子进程moduleOUT(CLKIN,ADCABCP2,ADCABCP5,ERROR0,OPEN_CLOSE,TILT,ADCABC00,MOTOR11_OUT,MOTOR12_OUT,MOTOR21_OUT,MOTOR22_OUT,MOTOR11P2,MOTOR11P5,MOTOR12P2,MOTOR12P5,MOTOR21P2,MOTOR21P5,MOTOR22P2,MOTOR22P5);inputCLKIN,TILT,OPEN_CLOSE;inputERROR0;inputMOTOR11P2,MOTOR11P5,MOTOR12P2,MOTOR12P5;inputMOTOR21P2,MOTOR21P5,MOTOR22P2,MOTOR22P5;input[2:0]ADCABCP2,ADCABCP5;outputMOTOR11_OUT,MOTOR12_OUT,MOTOR21_OUT,MOTOR22_OUT;output[2:0]ADCABC00;regMOTOR11_OUT,MOTOR12_OUT,MOTOR21_OUT,MOTOR22_OUT;reg[2:0]ADCABC00;always@(posedgeCLKIN)beginif(ADCABCP2==3'b000||ADCABCP5==3'b000)//通道0选择输出ADCABC00=3'b000;elseif(ADCABCP2==3'b000||ADCABCP5==3'b001)//通道1选择输出ADCABC00=3'b001;endalways@(posedgeADCABC00)beginif(ERROR0==0)beginif(MOTOR11P2==1||MOTOR11P5==1)//水平马达正方向转动MOTOR11_OUT=1;elseMOTOR11_OUT=0;if(MOTOR12P2==1||MOTOR12P5==1)MOTOR12_OUT=1;//水平马达反方向转动elseMOTOR12_OUT=0;//位置判断子进程modulePOS_DIFF(CLKIN,ADCABCP2,ADCABCP5,DATA,VPA,VPB,VPC,VPD,VPAB,VPBC,VPCD,HPE,HPF,HPG,HPH,HPEF,HPFG,HPGH);inputCLKIN;input[2:0]ADCABCP2,ADCABCP5;input[7:0]DATA;outputVPA,VPB,VPC,VPD,VPAB,VPBC,VPCD;outputHPE,HPF,HPG,HPH,HPEF,HPFG,HPGH;reg[7:0]V_POSTION3,H_POSTION3;regVPA,VPB,VPC,VPD,VPAB,VPBC,VPCD;regHPE,HPF,HPG,HPH,HPEF,HPFG,HPGH;parameterVA=20,VB=180,VC=210,VD=240,HE=20,HF=180,HG=210,HH=240;always@(posedgeCLKIN)if(ADCABCP2==3'b000||ADCABCP5==3'b000)beginV_POSTION3=DATA;if(V_POSTION3=VA)begin//在盒内状态VPA=1;VPB=0;VPC=0;VPD=0;VPAB=0;VPBC=0;VPCD=0;endelseif(V_POSTION3VA&&V_POSTION3VB)begin//出盒中间位置VPA=0;VPB=0;VPC=0;VPD=0;VPAB=0;VPBC=0;VPCD=0;endelseif(V_POSTION3==VB)begin//水平位置BVPA=0;VPB=1;VPC=0
本文标题:基于VerilogHDL的车载DVD位控子程序
链接地址:https://www.777doc.com/doc-2572665 .html