Home > other >  The VHDL couldn & # x27; T implement registers for assignments on this clock edge
The VHDL couldn & # x27; T implement registers for assignments on this clock edge

Time:09-18

The LIBRARY IEEE.
USE the IEEE. STD_LOGIC_1164. ALL;

The ENTITY hc_sr04 IS
The PORT (
CLK: IN STD_LOGIC;
ECHO0: IN STD_LOGIC;
ECHO1: IN STD_LOGIC;
ECHO2: IN STD_LOGIC;
ECHO3: IN STD_LOGIC;
ECHO4: IN STD_LOGIC;
ECHO5: IN STD_LOGIC;
ECHO6: IN STD_LOGIC;
ECHO7: IN STD_LOGIC;
TRIG0: OUT STD_LOGIC;
TRIG1: OUT STD_LOGIC;
TRIG2: OUT STD_LOGIC;
TRIG3: OUT STD_LOGIC;
TRIG4: OUT STD_LOGIC;
TRIG5: OUT STD_LOGIC;
TRIG6: OUT STD_LOGIC;
TRIG7: OUT STD_LOGIC;
DIS0: OUT STD_LOGIC_VECTOR DOWNTO 0 (1);
DIS1: OUT STD_LOGIC_VECTOR DOWNTO 0 (1);
DIS2: OUT STD_LOGIC_VECTOR DOWNTO 0 (1);
DIS3: OUT STD_LOGIC_VECTOR DOWNTO 0 (1);
DIS4: OUT STD_LOGIC_VECTOR DOWNTO 0 (1);
DIS5: OUT STD_LOGIC_VECTOR DOWNTO 0 (1);
DIS6: OUT STD_LOGIC_VECTOR DOWNTO 0 (1);
DIS7: OUT STD_LOGIC_VECTOR DOWNTO 0 (1));
END hc_sr04;

ARCHITECTURE concerns OF hc_sr04 IS
TYPE the state IS (s0, trig, wfor, echo, outdis);
SIGNAL cs: state:=s0;
SIGNAL S_TRIG: STD_LOGIC_VECTOR 7 DOWNTO (0) :="00000001";
SIGNAL CNT: INTEGER:=0;

The BEGIN
COM1: PROCESS (cs, CLK)
VARIABLE cnt1, cnt2, cnt3: INTEGER RANGE 0 TO 3:=0;
The BEGIN
CASE cs IS
The WHEN s0=& gt; IF cnt1/=3 THEN
IF CLK 'EVENT AND CLK=' 1 'THEN
Cnt1:=cnt1 + 1;
END IF;
The ELSE
Cnt1:=0;
Cs & lt;=trig;
END IF;
The WHEN trig=& gt; IF cnt2/=2 THEN
IF CLK 'EVENT AND CLK=' 1 'THEN
Cnt2:=cnt2 + 1;
END IF;
The ELSE
Cnt2:=0;
Cs & lt;=wfor;
END IF;
The WHEN wfor=& gt; IF ECHO0='1' OR ECHO1='1' OR ECHO2='1'
The OR ECHO3='1' OR ECHO4='1' OR ECHO5='1'
The OR ECHO6='1' OR ECHO7='1' THEN
Cs & lt;=echo;
END IF;
WHEN the echo=& gt; IF ECHO0='0' AND ECHO1='0' AND ECHO2='0'
AND ECHO3='0' AND ECHO4='0' AND ECHO5='0'
AND ECHO6='0' AND ECHO7='0' THEN
Cs & lt;=outdis;
END IF;
The WHEN outdis=& gt; IF cnt3/=3 THEN
IF CLK 'EVENT AND CLK=' 1 'THEN
Cnt3: cnt3 +=1;
END IF;
The ELSE
Cnt3:=0;
Cs & lt;=s0;
END IF;
The WHEN others=& gt; NULL;
END CASE;
END the PROCESS.
COM2: PROCESS (cs, CLK)
The BEGIN
CASE cs IS
The WHEN S0=& gt;
CASE S_TRIG IS
WHEN "00000001"=& gt; S_TRIG & lt;="00000010"; CNT & lt;=0;
WHEN "00000010"=& gt; S_TRIG & lt;="00000100"; CNT & lt;=0;
WHEN "00000100"=& gt; S_TRIG & lt;="00001000"; CNT & lt;=0;
WHEN "00001000"=& gt; S_TRIG & lt;="00010000"; CNT & lt;=0;
WHEN "00010000"=& gt; S_TRIG & lt;="00100000"; CNT & lt;=0;
WHEN "00100000"=& gt; S_TRIG & lt;="01000000"; CNT & lt;=0;
WHEN "01000000"=& gt; S_TRIG & lt;="10000000"; CNT & lt;=0;
WHEN "10000000"=& gt; S_TRIG & lt;="00000001"; CNT & lt;=0;
The WHEN OTHERS=& gt; S_TRIG & lt;="00000001"; CNT & lt;=0;
END CASE;
The WHEN trig=& gt;
CASE S_TRIG IS
WHEN "00000001"=& gt; TRIG0 & lt;='1'.
WHEN "00000010"=& gt; TRIG1 & lt;='1'.
WHEN "00000100"=& gt; TRIG2 & lt;='1'.
WHEN "00001000"=& gt; TRIG3 & lt;='1'.
WHEN "00010000"=& gt; TRIG4 & lt;='1'.
WHEN "00100000"=& gt; TRIG5 & lt;='1'.
WHEN "01000000"=& gt; TRIG6 & lt;='1'.
WHEN "10000000"=& gt; TRIG7 & lt;='1'.
The WHEN OTHERS=& gt; TRIG1 & lt;='1'.
END CASE;
The WHEN wfor=& gt; TRIG0 & lt;='0'.
TRIG1 & lt;='0'.
TRIG2 & lt;='0'.
TRIG3 & lt;='0'.
TRIG4 & lt;='0'.
TRIG5 & lt;='0'.
TRIG6 & lt;='0'.
TRIG7 & lt;='0'.
WHEN the echo=& gt;
IF CLK 'EVENT AND CLK=' 1 'THEN CNT & lt; CNT=+ 1; is this line appears the mistake of title
END IF;
The WHEN outdis=& gt;
CASE S_TRIG IS
WHEN "00000001"=& gt;
IF CNT & lt; 12 THEN DIS0 & lt;="00";
ELSIF CNT & lt; 58 THEN DIS0 & lt;="01";
ELSIF CNT & lt; 176 THEN DIS0 & lt;="10";
The ELSE DIS0 & lt;="11".
END IF;
WHEN "00000010"=& gt;
IF CNT & lt; 12 THEN DIS1 & lt;="00";
ELSIF CNT & lt; 58 THEN DIS1 & lt;="01";
ELSIF CNT & lt; 176 THEN DIS1 & lt;="10";
The ELSE DIS1 & lt;="11".
END IF;
WHEN "00000100"=& gt;
IF CNT & lt; 12 THEN DIS2 & lt;="00";
ELSIF CNT & lt; 58 THEN DIS2 & lt;="01";
ELSIF CNT & lt; 176 THEN DIS2 & lt;="10";
The ELSE DIS2 & lt;="11".
END IF;
WHEN "00001000"=& gt;
IF CNT & lt; 12 THEN DIS3 & lt;="00";
ELSIF CNT & lt; 58 THEN DIS3 & lt;="01";
ELSIF CNT & lt; 176 THEN DIS3 & lt;="10";
The ELSE DIS3 & lt;="11".
END IF;
WHEN "00010000"=& gt;
IF CNT & lt; 12 THEN DIS4 & lt;="00";
ELSIF CNT & lt; 58 THEN DIS4 & lt;="01";
ELSIF CNT & lt; 176 THEN DIS4 & lt;="10";
The ELSE DIS4 & lt;="11".
END IF;
WHEN "00100000"=& gt;
IF CNT & lt; 12 THEN DIS5 & lt;="00";
ELSIF CNT & lt; 58 THEN DIS5 & lt;="01";
nullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnull
  • Related