Professional Documents
Culture Documents
Sequential Statements
Next Statement
Exit Statement
Return Statement
Assertion Statement
Report Statement
Null Statement
Serial to Parallel
ENTITY s2p IS
GENERIC (bps: INTEGER);
PORT (s_in, rec : IN BIT; d_ready: BUFFER
BIT; overrun, f_error: OUT BIT;
p_out: OUT BIT_VECTOR(7 DOWNTO 0));
END s2p;
Serial to Parallel
ARCHITECTURE w OF s2p IS
BEGIN
collect: PROCESS
VARIABLE buff: BIT_VECTOR(7 DOWNTO 0);
CONSTANT half: TIME :=(1000000.0/REAL(bps))/2.0*1
US;
CONSTANT full: TIME :=(1000000.0/REAL(bps))/2.0*1 US;
BEGIN
WAIT UNTIL serial = 0;
WAIT FOR half;
FOR count IN 0 TO 7 LOOP
WAIT FOR full;
buff(count) := serail;
END LOOP;
Serial to Parallel
IF serial = 0 THEN
f_error <= 1;
WAIT UNTIL serial = 1;
ELSE
f_errro <= 0;
d_ready <= 1;
p_out <= buff;
WAIT UNTIL rec = 1;
WAIT UNTIL rec = 0;
d_ready <= 0;
END IF;
END PROCESS;
too_fast: PROCESS
BEGIN
IF d_ready = 1 THEN
WAIT UNTIL serial = 0;
IF d_ready = 1 THEN
overrun <= 1;
END IF;
ELSE
overrun <= 0;
END IF;
WAIT ON d_ready;
END PROCESS;
END w;
Moore FSM
TYPE identifier IS
(enumeration_literal { , enumeration_literal
} );
ENTITY moore IS
PORT (x, clk: IN BIT; z: OUT BIT);
END moore;
ARCHITECTURE behavioral OF moore IS
TYPE state IS
(reset,got1,got10,got101,got1011);
SIGNAL current : state := reset;
BEGIN
enumeration_literal ::=
identifier
| character_literal
10
Mealy FSM
PROCESS
BEGIN
WAIT UNTIL clk = 1 ;
CASE current IS
WHEN reset =>
IF x = 0 THEN current <= got1;
ELSE current <= reset; END IF;
END CASE;
END PROCESS;
z <= 1 WHEN current = got1011 ELSE 0;
END behavioral;
12
PROCESS (present , x)
BEGIN
z <= 0;
CASE present IS
WHEN a =>
IF x = 0 THEN nxt <= a ELSE nxt <= b; END
IF;
END CASE;
IF present = c AND x = 1 THEN z <= 1; END IF;
END PROCESS;
13
END behavioral ; -- of architecture
TYPE identifier IS
ARRAY ( index {, index} ) OF
element_subtype;
Index ::=
range
| NATURAL RANGE <>
14
TYPE BIT_VECTOR IS
ARRAY (NATURAL RANGE <>) OF BIT;
TYPE two_dim_bit IS
ARRAY (0 TO 7, 15 DOWNTO 0) OF BIT;
TYPE byte_memory IS
ARRAY (NATURAL RANGE <>) OF
BIT_VECTOR (7 DOWNTO 0);
15
16
Specifying Radix
SIGNAL a: BIT_VECTOR(7 DOWNTO 0);
SIGNAL b: INTEGER;
..
aa <= "10101111", B"0111_0101" AFTER
10 ns, x"F1" AFTER 50 ns;
bb <= 100_789, 16#3F7# AFTER 30 NS,
4#103_2122# AFTER 100 ns;
17