數位系統設計概論

Download Report

Transcript 數位系統設計概論

第3章
VHDL Concurrent語法
義守大學電機工程學系
陳慶瀚
[email protected]
1. VHDL Operators
1.1 Comparison Operator
= : 等於
> : 大於
< : 小於
/= : 不等於
比較運算子的運算結果有兩種狀態:“TRUE”和“FALSE”
1.2 Logic Declaration
AND
OR
NOT
NOR
NAND
XOR
XNOR
邏輯運算子可以應用在三種資料型態:BIT, BOOLEAN 和STD_LOGIC
1.3 Arithmetic Operator
所有Synthetizer都支援
“+” : 加法
“-” : 減法
有些Synthetizer支援
“ * ” : 乘法
“ABS” : 求絕對值
編譯時設定數值運算時使用
“/” : 除法
“**” : 次方
“MOD” : 求模數
“REM” : 求餘數
1.4 Bitwise Operator
ROL
ROR
SLL
SRL
SLA
SRA
:
:
:
:
:
:
向左旋轉位元運算
向右旋轉位元運算
向左位移位元運算
向右位移位元運算
向左位移位元運算,空出位元補'1'
向右位移位元運算,空出位元補'1'
用法:X2 <= X1 ROL 2; -- 向左旋轉2位元
1.5 VHDL其他特殊符號
“--” : 註解
“=>” : 名稱對應
“&” : 字串串接
“ : ” : 用於名稱的模式、資料型別、或標題的宣
告
‘ U’ : 未知值
‘X’或‘-’ : 任意值
‘0’或‘L’ : 邏輯狀態0
‘1’或‘H’ :邏輯狀態1
‘Z’ : 高阻抗
2 Block
Block
• Blocks are a partition
mechanism of with
VHDL
• Each block represents
a self-contained area
of model
ARCHITECTURE cpu_block OF cpu IS
SIGNAL ibus dbus :tw32;
BEGIN
ALU :BLOCK
SIGNAL qbus :tw32;
BEGIN
--alu behavior statements
END BLOCK ALU
REG8 :BLOCK
SIGNAL zbus :tw32;
BEGIN
REG1 :BLOCK
SIGNAL qbus :tw32;
BEGIN
-- reg1 behavior statements
END BLOCK REG1
-- more REG8 statements
END BLOCK REG8
END cpu_block
12
3. VHDL Assignment
3.1 Assignment Operator
- Assignment Operator for Signal
<=
- Assignment Operator for Variable :=
Signal assignment 也可以加上時間的延遲, 如 a <= b AFTER
10ns 表示由訊號 b 變化到造成 a 改變的延遲是10ns
3.2 Conditional Signal Assignment
Conditional Signal Assignment
• 語法 :
Signal assignment
the other value/signal
WHEN condition ELSE
[WHEN…ELSE…]
• Example :
sel <= 0 WHEN
1 WHEN
2 WHEN
3 WHEN
4;
a
a
a
a
=
=
=
=
‘0’
‘1’
‘0’
‘1’
AND
AND
AND
AND
b
b
b
b
=
=
=
=
‘0’
‘0’
‘1’
‘1’
ELSE
ELSE
ELSE
ELSE
4
3.3 Selective Signal Assignment
Select Signal Assignment
• 語法 :
WITH expression SELECT
signal assignment
WHEN expression value,
the other assignment WHEN other expression value ;
• Example:
WITH sel SELECT
q <= i0 WHEN 0,
i1 WHEN 1,
i2 WHEN 2,
i4 WHEN 3,
‘X’ WHEN OTHERS;
5
3.4 Driver Problem
Driver Problem
• Bad Example :
ARCHITECTURE bad
BEGIN
q <= i0 WHEN a
q <= i1 WHEN a
q <= i2 WHEN a
q <= i3 WHEN a
END bad;
OF mux IS
=‘0’
=‘0’
=‘1’
=‘1’
AND
AND
AND
AND
b
b
b
b
=
=
=
=
‘0’
‘1’
‘0’
‘1’
ELSE
ELSE
ELSE
ELSE
ARCHITECTURE better OF mux IS
BEGIN
q <= i0 WHEN a =‘0’ AND b =
i1 WHEN a =‘0’ AND b =
i2 WHEN a =‘1’ AND b =
i3 WHEN a =‘1’ AND b =
‘x’; -- unknown
END bad;
‘0’
‘1’
‘0’
‘1’
ELSE
ELSE
ELSE
ELSE
‘0’;
‘0’;
‘0’;
‘0’;
• Better Example :
9
3.5 Example- 4to1Multiplexer
Example - 4-1 MUX
USE ieee.std_logic_1164.all
MUX4
ENTITY mux4 IS
PORT (i0,i1,i2,i3,a,b :IN STD_LOGIC);
q :OUT STD_LOGIC);
END mux4
I0
I1
Q
I2
I3
A
B
Mux function table
A
B
Q
0
0
I0
0
1
I1
1
0
I2
1
1
I3
ARCHOITECTUR OF mux4 IS
SIGNAL sel :INTEGER;
BEGIN
WITH sel SELECT
q <= i0 WHEN 0,
i1 WHEN 1,
i2 WHEN 2,
i4 WHEN 3,
‘X’ WHEN OTHERS;
sel <= 0 WHEN a = ‘0’ AND b = ‘0’ ELSE
1 WHEN a = ‘1’ AND b = ‘0’ ELSE
2 WHEN a = ‘0’ AND b = ‘1’ ELSE
3 WHEN a = ‘1’ AND b = ‘1’ ELSE
4;
6
END;
3.6 Example- 2to4 Decoder
Example - Decoder
LIBRARY IEEE;
USE IEEE.std_logic_1164.all;
2 to 4 decoder
table
addr
word
00
1110
01
1101
10
1011
11
0111
ENTITY decoder IS
PORT( addr :IN STD_LOGIC_VECTOR(1 DOWNTO 0);
word :OUT STD_LOGIC_VECTOR(3 DOWNTO 0));
END decoder;
ARCHITECTURE df OF decoder
BEGIN
word <= "1110" WHEN addr
"1101" WHEN addr
"1011" WHEN addr
"0111" WHEN addr
"1111" ;
END df;
IS
=
=
=
=
"00"
"01"
"10"
"11"
ELSE
ELSE
ELSE
ELSE
7
3.7 Exercise
請以When-Else敘述式的VHDL語法描述下面真值表的組合邏輯電路。
【註】真值表的布林邏輯 D  A BC  ABC
輸入
輸出
A
B
C
D
0
0
0
0
0
0
1
0
0
1
0
1
0
1
1
0
1
0
0
0
1
0
1
0
1
1
0
1
1
1
1
0
END