###### tags: `111-1學校上課`
# 期中考sheet
## IC(EP4CE115F29C7)
http://www.terasic.com.tw/attachment/archive/502/DE2_115_User_manual.pdf
## generic 常數
```vhdl=
--請打在entity is 跟
generic (N:integer := 8);
```
## library
```vhdl=
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
```
## ENTITY
```vhdl=
ENTITY logic is port(
腳位設定
);
end logic;
```
## singnal
當你需要在電路多於線路,請在architecture中is 跟 begin之間進行宣告
## INT_ARRAY
```vhdl=
TYPE int_array is array(integer range<>) of integer;
CONSTANT C1:int_array(0 to 9):=(1,2,3,4,5,6,7,8,9,10);
```
## architecture
```vhdl=
architecture Logic of logic is begin
end Logic;
```
## variable
```vhdl=
variable X:integer:=0;
variable y:std_logic:='0';
```
## logic_vector to integer
```vhdl=
to_integer(unsigned(B)+unsigned(C))
```
## integer to logic_vector
```vhdl=
std_logic_vector(to_unsigned(X,11));
```
## component+package
```vhdl=
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
package 打包名稱 is
component 名稱
port(
腳位
);
end component 打包名稱;
end package BCD_package;
```
**請名稱檔名要一致,否則會抓不到**
**若要在main引用請use work.打包名稱.all;**
## If
```vhdl=
--一定要在porcess使用
if 條件 then
code1;
elsif
code2;
.
.
else
code3;
end if;
```
## case
```vhdl=
--一定要在porcess使用
case (sw) is
when 條件=>code1;
when 條件=>code2;
when 條件=>code3;
when others =>code4;
end case;
```
## for
```vhdl=
for i in 0 to 10 generate
code1
end generate
for i in 10 downto 0 generate
code1
end generate
```
## 物件使用
```vhdl=
--腳位輸入順序照定義,也可以指定
隨編一個名稱:你設定的component名稱 port map(腳位1);
隨編一個名稱:你設定的component名稱 port map(名稱1=>腳位1,名稱2=>腳位2);
```
## 7 seg decoder
```vhdl=
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
Entity logic is port(
sw: in std_logic_vector(3 donto 0);
seg:out std_logic_vector(6 downto 0)
);
end logic;
architecture Counter of logic is
begin
process(sw)
case (sw) is
when 0 => seg <= "1000000"; --
when 1 => seg <= "1111001"; --
when 2 => seg <= "0100100"; --
when 3 => seg <= "0110000"; --
when 4 => seg <= "0011001"; --
when 5 => seg <= "0010010"; --
when 6 => seg <= "0010010"; --
when 7 => seg <= "1111000"; --
when 8 => seg <= "0000000"; --
when 9 => seg <= "0010000"; --
when others => seg <= "1111111"; -- error
end case;
end process;
end Counter;
```
## 使用物件ex
```vhdl=
Gen_dff : for i in 0 to N-1 generate
dff:dff1 port map(D(i),clk,not clear,pr(i),qo(i));
end generate ;
```