北邮数电实验电子沙漏源代码汇总.docx
《北邮数电实验电子沙漏源代码汇总.docx》由会员分享,可在线阅读,更多相关《北邮数电实验电子沙漏源代码汇总.docx(10页珍藏版)》请在冰豆网上搜索。
北邮数电实验电子沙漏源代码汇总
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
USEIEEE.STD_LOGIC_ARITH.ALL;
ENTITYdivIS--50000和50000000分频
PORT(
clk,clear,stop:
INSTD_LOGIC;
clk_out1,clk_out2:
OUTSTD_LOGIC;
ENDdiv;
ARCHITECTUREaOFdivIS
SIGNALtmp1:
INTEGERRANGE0TO24999;
SIGNALtmp2:
INTEGERRANGE0TO499;
SIGNALclktmp1:
STD_LOGIC;
SIGNALclktmp2:
STD_LOGIC;
BEGIN
clk_out1<=clktmp1;
clk_out2<=clktmp2;
P1:
PROCESS(clear,clk
BEGIN
IFclear='1'THEN
tmp1<=0;
ELSIFclk'eventANDclk='1'THEN
IFtmp1=24999THEN
tmp1<=0;clktmp1<=notclktmp1;
ELSE
tmp1<=tmp1+1;
ENDIF;
ENDIF;
ENDPROCESSP1;
P2:
PROCESS(clear,stop,clktmp1
BEGIN
IFclear='1'THEN
tmp2<=0;
ELSIFstop='0'THEN
IFclktmp1'eventANDclktmp1='1'THEN
IFtmp2=499THEN
tmp2<=0;clktmp2<=notclktmp2;
ELSE
tmp2<=tmp2+1;
ENDIF;
ENDIF;
ENDIF;
ENDPROCESSP2;
ENDa;
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
USEIEEE.STD_LOGIC_ARITH.ALL;
ENTITYshalouIS
PORT(
clk0,reset,pause:
INSTD_LOGIC;
dir:
INSTD_LOGIC;
figures:
OUTSTD_LOGIC_VECTOR(6downto0;
cats:
OUTSTD_LOGIC_VECTOR(1downto0;
cat0:
OUTSTD_LOGIC_VECTOR(3downto0;
row:
OUTSTD_LOGIC_VECTOR(15downto0;
col:
OUTSTD_LOGIC_VECTOR(7downto0
;
ENDshalou;
ARCHITECTUREbOFshalouIS
COMPONENTdiv
PORT(
clk,clear,stop:
INSTD_LOGIC;
clk_out1,clk_out2:
OUTSTD_LOGIC;
ENDCOMPONENT;
SIGNALclk1,clk2:
STD_LOGIC;
SIGNALaddress:
STD_LOGIC_VECTOR(1downto0;
SIGNALs1,s2:
STD_LOGIC_VECTOR(3downto0;
SIGNALled1,led2:
STD_LOGIC_VECTOR(6downto0;
SIGNALst1:
STD_LOGIC_VECTOR(7downto0;
SIGNALdata:
STD_LOGIC_VECTOR(15downto0;
SIGNALd0,d1,d2,d3,d4,d5,d6,d7:
STD_LOGIC_VECTOR(15downto0;
SIGNALpic:
STD_LOGIC_VECTOR(4downto0;
BEGIN
u1:
divPORTMAP(clk=>clk0,clear=>reset,stop=>pause,clk_out1=>clk1,clk_out2=>clk2;cat0<="1111";
p1:
PROCESS(clk1,reset
BEGIN
IFreset='1'THEN
address<="11";
ELSIFclk1'eventANDclk1='1'THEN
IFaddress="01"THEN
address<="00";
ELSE
address<=address+1;
ENDIF;
ENDIF;
ENDPROCESSp1;
p2:
PROCESS(clk2,reset,pause
BEGIN
IFreset='1'THEN
s1<="0000";
ELSIFclk2'eventANDclk2='1'THEN
IFs1="0101"ANDs2="1001"THEN
s1<="0000";
ELSIFs2="1001"THEN
s1<=s1+1;
ENDIF;
ENDIF;
ENDPROCESSp2;
p3:
PROCESS(clk2,reset,pause
BEGIN
IFreset='1'THEN
s2<="0000";
ELSIFclk2'eventANDclk2='1'THEN
IFs2="1001"THEN
s2<="0000";
ELSE
s2<=s2+1;
ENDIF;
ENDIF;
ENDPROCESSp3;
p4:
PROCESS(s1,s2
BEGIN
CASEs1IS
WHEN"0000"=>led1<="0111111";WHEN"0001"=>led1<="0000110";WHEN"0010"=>led1<="1011011";WHEN"0011"=>led1<="1001111";WHEN"0100"=>led1<="1100110";WHEN"0101"=>led1<="1101101";WHENOTHERS=>led1<="0000000";
ENDCASE;
CASEs2IS
WHEN"0000"=>led2<="0111111";WHEN"0001"=>led2<="0000110";WHEN"0010"=>led2<="1011011";WHEN"0011"=>led2<="1001111";WHEN"0100"=>led2<="1100110";WHEN"0101"=>led2<="1101101";WHEN"0110"=>led2<="1111101";WHEN"0111"=>led2<="0000111";WHEN"1000"=>led2<="1111111";WHEN"1001"=>led2<="1101111";WHENOTHERS=>led2<="0000000";ENDCASE;
ENDPROCESSp4;
p5:
PROCESS(address
BEGIN
CASEaddressIS
WHEN"00"=>figures<=led2;cats<="10";WHEN"01"=>figures<=led1;cats<="01";WHENOTHERS=>figures<="0000000";ENDCASE;
ENDPROCESSp5;
row<=data;
col<=st1;
d0<=
"0000000001111111"WHENpic="00000"ELSE
"0000100001110111"WHENpic="00001"ELSE
"0000110001110011"WHENpic="00010"ELSE
"0001110001100011"WHENpic="00011"ELSE
"0001111001100001"WHENpic="00100"ELSE
"0011111001000001"WHENpic="00101"ELSE
"0011111101000000"WHENpic="00110"ELSE
"0111111100000000"WHENpic="00111"ELSE
"0111111100000000"WHENpic="01000"ELSE
"0111111100000000"WHENpic="01001"ELSE
"0111111100000000"WHENpic="01010"ELSE
"0111111100000000"WHENpic="01011"ELSE
"0111111100000000"WHENpic="01100"ELSE
"0111111100000000"WHENpic="01101"ELSE
"0111111100000000"WHENpic="01110"ELSE
"0111111100000000"WHENpic="01111"ELSE
"0111111100000000"WHENpic="10000"ELSE"0000000000000000";
d1<=
"0000000000111110"WHENpic="00000"ELSE"0000000000111110"WHENpic="00001"ELSE"0000000000111110"WHENpic="00010"ELSE"0000000000111110"WHENpic="00011"ELSE"0000000000111110"WHENpic="00100"ELSE"0000000000111110"WHENpic="00101"ELSE"0000000000111110"WHENpic="00110"ELSE"0000000000111110"WHENpic="00111"ELSE"0000100000110110"WHENpic="01000"ELSE"0000110000110010"WHENpic="01001"ELSE"0001110000100010"WHENpic="01010"ELSE"0001111000100000"WHENpic="01011"ELSE"0011111000000000"WHENpic="01100"ELSE"0011111000000000"WHENpic="01101"ELSE"0011111000000000"WHENpic="01110"ELSE"0011111000000000"WHENpic="01111"ELSE"0011111000000000"WHENpic="10000"ELSE"0000000000000000";
d2<=
"0000000000011100"WHENpic="00000"ELSE"0000000000011100"WHENpic="00001"ELSE"0000000000011100"WHENpic="00010"ELSE"0000000000011100"WHENpic="00011"ELSE"0000000000011100"WHENpic="00100"ELSE"0000000000011100"WHENpic="00101"ELSE"0000000000011100"WHENpic="00110"ELSE"0000000000011100"WHENpic="00111"ELSE"0000000000011100"WHENpic="01000"ELSE"0000000000011100"WHENpic="01001"ELSE"0000000000011100"WHENpic="01010"ELSE"0000000000011100"WHENpic="01011"ELSE"0000000000011100"WHENpic="01100"ELSE"0000100000010100"WHENpic="01101"ELSE"0000110000010000"WHENpic="01110"ELSE"0001110000000000"WHENpic="01111"ELSE"0001110000000000"WHENpic="10000"ELSE"0000000000000000";
d3<=
"0000000000001000"WHENpic="00000"ELSE"0000000000001000"WHENpic="00001"ELSE"0000000000001000"WHENpic="00010"ELSE"0000000000001000"WHENpic="00011"ELSE"0000000000001000"WHENpic="00100"ELSE"0000000000001000"WHENpic="00101"ELSE"0000000000001000"WHENpic="00110"ELSE"0000000000001000"WHENpic="00111"ELSE"0000000000001000"WHENpic="01000"ELSE"0000000000001000"WHENpic="01001"ELSE"0000000000001000"WHENpic="01010"ELSE"0000000000001000"WHENpic="01011"ELSE"0000000000001000"WHENpic="01100"ELSE"0000000000001000"WHENpic="01101"ELSE"0000000000001000"WHENpic="01110"ELSE"0000000000001000"WHENpic="01111"ELSE"0000100000000000"WHENpic="10000"ELSE"0000000000000000";d4<="0000100000000000"WHENpic="00000"ELSE"0000100000000000"WHENpic="00001"ELSE"0000100000000000"WHENpic="00010"ELSE"0000100000000000"WHENpic="00011"ELSE"0000100000000000"WHENpic="00100"ELSE"0000100000000000"WHENpic="00101"ELSE"0000100000000000"WHENpic="00110"ELSE"0000100000000000"WHENpic="00111"ELSE"0000100000000000"WHENpic="01000"ELSE"0000100000000000"WHENpic="01001"ELSE"0000100000000000"WHENpic="01010"ELSE"0000100000000000"WHENpic="01011"ELSE"0000100000000000"WHENpic="01100"ELSE"0000100000000000"WHENpic="01101"ELSE"0000100000000000"WHENpic="01110"ELSE"0000100000000000"WHENpic="01111"ELSE"0000000000001000"WHENpic="10000"ELSE"0000000000000000";d5<="0001110000000000"WHENpic="00000"ELSE"0001110000000000"WHENpic="00001"ELSE"0001110000000000"WHENpic="00010"ELSE"0001110000000000"WHENpic="00011"ELSE
"0001110000000000"WHENpic="00100"ELSE"0001110000000000"WHENpic="00101"ELSE"0001110000000000"WHENpic="00110"ELSE"0001110000000000"WHENpic="00111"ELSE"0001110000000000"WHENpic="01000"ELSE"0001110000000000"WHENpic="01001"ELSE"0001110000000000"WHENpic="01010"ELSE"0001110000000000"WHENpic="01011"ELSE"0001110000000000"WHENpic="01100"ELSE"0001010000001000"WHENpic="01101"ELSE"0001000000001100"WHENpic="01110"ELSE"0000000000011100"WHENpic="01111"ELSE"0000000000011100"WHENpic="10000"ELSE"0000000000000000";d6<="0011111000000000"WHENpic="00000"ELSE"0011111000000000"WHENpic="00001"ELSE"0011111000000000"WHENpic="00010"ELSE"0011111000000000"WHENpic="00011"ELSE"0011111000000000"WHENpic="00100"ELSE"0011111000000000"WHENpic="00101"ELSE"0011111000000000"WHENpic="00110"ELSE"0011111000000000"WHENpic="00111"ELSE"0011011000001000"WHENpic="01000"ELSE"0011001000001100"WHENpic="01001"ELSE"0010001000011100"WHENpic="01010"ELSE"0010000000011110"WHENpic="01011"ELSE"0000000000111110"WHENpic="01100"ELSE"0000000000111110"WHENpic="01101"ELSE"0000000000111110"WHENpic="01110"ELSE"0000000000111110"WHENpic="01111"ELSE"0000000000111110"WHENpic="10000"ELSE"0000000000000000";d7<="0111111100000000"WHENpic="00000"ELSE"0111011100001000"WHENpic="00001"ELSE"0111001100001100"WHENpic="00010"ELSE"0110001100011100"WHENpic="00011"ELSE"0110000100011110"WHENpic="00100"ELSE"0100000100111110"WHENpic="00101"ELSE"0100000000111111"WHENpic="00110"ELSE"0000000001111111"WHENpic="00111"ELSE
"0000000001111111"WHENpic="01000"ELSE"0000000001111111"WHENpic="01001"ELSE"0000000001111111"WHENpic="01010"ELSE"0000000001111111"WHENpic="01011"ELSE"0000000001111111"WHENpic="01100"ELSE"0000000001111111"WHENpic="01101"ELSE"0000000001111111"WHENpic="01110"ELSE"0000000001111111"WHENpic="01111"ELSE"0000000001111111"WHENpic="10000"ELSE"0000000000000000";p6:
PROCESS(clk1,resetBEGINIFreset='1'THENst1<="00000000";ELSIFclk1'eventANDclk1='1'THENIFst1="00000000"ORst1="01111111"THENst1<="11111110";data<=d0;ELSIFst1="11111110"THENst1<="11111101";data<=d1;ELSIFst1="11111101"THENst1<="11111011";data<=d2;ELSIFst1="11111011"THENst1<="11110111";data<=d3;ELSIFst1="11110111"THENst1<="11101111";data<=d4;ELSIFst1="11101111"THENst1<="11011111";data<=d5;ELSIFst1="11011111"THENst1<="10111111";data<=d6;ELSIFst1="10111111"THENst1<="01111111";data<=d7;ENDIF;ENDIF;ENDPROCESSp6;p7:
process(clk2,reset,pauseBEGINIFreset='1'THENpic<="00000";ELSIFclk2'eventANDclk2='1'THENIFdir='0'THENIFpic/="10000"THENpic<=pic+1;
ENDIF;ELSEIFpic/="00000"THENpic<=pic-1;ENDIF;ENDIF;ENDIF;ENDPROCESSp7;