📄 car.vhd
字号:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY car IS
PORT(
iSensorState:IN STD_LOGIC_VECTOR(2 DOWNTO 0);
CLRn,clkin:IN STD_LOGIC;
Dclkout,Cclkout:OUT STD_LOGIC;
RWC,LWC:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
R_RUN:OUT STD_LOGIC;
L_RUN:OUT STD_LOGIC);
END car;
ARCHITECTURE beha OF car IS
SIGNAL WCCount:STD_LOGIC_VECTOR(2 DOWNTO 0);
SIGNAL Sensorstate:STD_LOGIC_VECTOR(2 DOWNTO 0);
SIGNAL WC1:STD_LOGIC_VECTOR(3 DOWNTO 0);
SIGNAL WC2:STD_LOGIC_VECTOR(3 DOWNTO 0);
SIGNAL clk:STD_LOGIC;
SIGNAL clk1:STD_LOGIC;
SIGNAL Dclk:STD_LOGIC;
BEGIN
PROCESS (clkin, CLRn)
VARIABLE count1 : INTEGER RANGE 0 TO 9;
BEGIN
IF CLRn='0' THEN
count1 := 0;
ELSIF clkin'EVENT AND clkin='1' THEN
IF count1=9 THEN
count1 := 0;
clk<=NOT clk;
ELSE
count1 := count1 + 1;
END IF;
END IF;
END PROCESS;
Cclkout <=clk;
PROCESS (clk, CLRn)
BEGIN
IF CLRn='0' THEN
clk1<='0';
WCCount <= "000";
ELSIF clk'EVENT AND clk='1' THEN
IF WCCount="111"THEN
clk1<=NOT clk1;
WCCount<="000";
ELSE
WCCount <= WCCount + 1;
END IF;
END IF;
END PROCESS;
PROCESS(clk1,CLRn)
VARIABLE count2: INTEGER RANGE 0 TO 7;
BEGIN
IF CLRn='0' THEN
Dclk<='0';
Count2:=0;
ELSIF clk1'EVENT AND clk1='1' THEN
IF count2=7 THEN
Dclk<=NOT Dclk;
Count2:=0;
ELSE
Count2:=Count2+1;
END IF;
END IF;
END PROCESS;
Dclkout<=Dclk;
PROCESS (Dclk, CLRn)
BEGIN
IF CLRn='0' THEN
SensorState <= "000";
ELSIF Dclk'EVENT AND Dclk='1' THEN
SensorState <= iSensorState;
END IF;
END PROCESS;
PROCESS (WCCount)
BEGIN
CASE WCCount IS
WHEN "000" => WC1 <= "0110"; --6
WHEN "001" => WC1 <= "0111"; --7
WHEN "010" => WC1 <= "0011"; --3
WHEN "011" => WC1 <= "1011"; --B
WHEN "100" => WC1 <= "1001"; --9
WHEN "101" => WC1 <= "1101"; --D
WHEN "110" => WC1 <= "1100"; --C
WHEN "111" => WC1 <= "1110"; --E
WHEN OTHERS=> WC1 <= "1111";
END CASE;
END PROCESS;
PROCESS (WCCount)
BEGIN
CASE WCCount IS
WHEN "000" => WC2 <= "1110"; --E
WHEN "001" => WC2 <= "1100"; --C
WHEN "010" => WC2 <= "1101"; --D
WHEN "011" => WC2 <= "1001"; --9
WHEN "100" => WC2 <= "1011"; --B
WHEN "101" => WC2 <= "0011"; --3
WHEN "110" => WC2 <= "0111"; --7
WHEN "111" => WC2 <= "0110"; --6
WHEN OTHERS=> WC2 <= "1111";
END CASE;
END PROCESS;
PROCESS(SensorState,WC1,WC2)--左中右,白色为低电平
BEGIN
IF SensorState="110" OR SensorState="100" THEN
RWC<=WC2;
LWC<="1111";
R_RUN<='1';
L_RUN <='0';
ELSIF SensorState="011" OR SensorState="001"OR SensorState="000" THEN
LWC<=WC1;
RWC<="1111";
L_RUN<='1';
R_RUN<='0';
ELSE
RWC<=WC2;
LWC<=WC1;
R_RUN<='1';
L_RUN<='1';
END IF;
END PROCESS;
END beha;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -