2.2 fpgaボードの設計デモ...

6
摂大・鹿間 論理回路 論理回路 (第15回) 特別講義: 言語を使った設計(2 2.1 HDL設計入門 2.2 FPGAボードの設計デモ 配布資料 「VHDLの言語構造と基本文法」 鹿間 信介 摂南大学 理工学部 電気電子工学科 摂大・鹿間 2.1 HDL設計入門 HDLコード記述 ④ 論理合成 ⑤ 配置配線 ⑦ ダウンロード ファイル作成 ⑧ ダウンロード ③ 論理シミュ レーション ⑥ 遅延シミュ レーション ⑨ 実機での 動作確認 FPGAベンダーが提供 (例: QuartusⅡ/Altera, ISE/Xilinx① 仕様設計 EDA * ツール: メンター社製品が有名 FPGAベンダーのSW にも簡易機能あり * EDA: Electronic Design Automation 仕様: 製作する回路機能を明確化 コード: VHDLによる記述 論理SIM: 実回路での遅延を考慮 しないSIM (小規模回路では省略) 合成: 論理回路を生成 配置配線: FPGA内部構成用デー タを生成し,ピン割り当てを行う 遅延SIM: 遅延を含めた動作SIM ファイル作成: FPGAに転送する形 式のファイルを作成 ダウンロード: PCよりファイル転送 実機動作: FPGAボードで実際の 動作を確認 論理回路 摂大・鹿間 2.2 FPGAボードの設計デモ FPGAボード Altera EP1C35万ゲート相当)搭載 設計ツール (QUARTSFPGA EP1C3 PC接続 コネクタ 7セグメント LED×3 プッシュSW ×4 単体LED 3,赤3 論理回路 摂大・鹿間 FPGAボードのブロック図 FPGA AlteraEP1C3 7セグメントLED ×3 単体LED 緑×3, 赤×3 ダウンロード回路 (ByteBlasterMV) パソコンの パラレルポート 電源回路 1.5V, 3.3V DC入力 56V クロック発振器 33MHプッシュ・スイッチ ×4 拡張ヘッダ (26I/O, オプション)

Upload: others

Post on 27-Jul-2021

4 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 2.2 FPGAボードの設計デモ FPGAボードのブロック図shikama/LogicCircuits2009/2019LC_15.pdf論理回路 摂大・鹿間 論理回路(第15回) 特別講義:言語を使った設計(2)

摂大・鹿間論理回路

論理回路 (第15回)

特別講義: 言語を使った設計(2)

2.1 HDL設計入門

2.2 FPGAボードの設計デモ

配布資料 「VHDLの言語構造と基本文法」

鹿間 信介

摂南大学 理工学部 電気電子工学科

論理回路 摂大・鹿間

2.1 HDL設計入門

② HDLコード記述

④ 論理合成

⑤ 配置配線

⑦ ダウンロードファイル作成

⑧ ダウンロード

③ 論理シミュレーション

⑥ 遅延シミュレーション

⑨ 実機での動作確認

FPGAベンダーが提供(例: QuartusⅡ/Altera, ISE/Xilinx)

① 仕様設計

EDA*ツール:メンター社製品が有名FPGAベンダーのSWにも簡易機能あり

* EDA: Electronic Design Automation

① 仕様: 製作する回路機能を明確化

② コード: VHDLによる記述

③ 論理SIM: 実回路での遅延を考慮

しないSIM (小規模回路では省略)④ 合成: 論理回路を生成

⑤ 配置配線: FPGA内部構成用デー

タを生成し,ピン割り当てを行う

⑥ 遅延SIM: 遅延を含めた動作SIM⑦ ファイル作成: FPGAに転送する形

式のファイルを作成

⑧ ダウンロード: PCよりファイル転送

⑨ 実機動作: FPGAボードで実際の

動作を確認

論理回路 摂大・鹿間

2.2 FPGAボードの設計デモ

FPGAボードAltera EP1C3(5万ゲート相当)搭載

設計ツール (QUARTSⅡ)

FPGAEP1C3

PC接続コネクタ

7セグメントLED×3

プッシュSW×4

単体LED緑3,赤3

論理回路 摂大・鹿間

FPGAボードのブロック図

FPGAAltera社EP1C3

7セグメントLED×3

単体LED緑×3, 赤×3

ダウンロード回路(ByteBlasterMV)

パソコンのパラレルポート

電源回路1.5V, 3.3V

DC入力5~6V

クロック発振器33MHz

プッシュ・スイッチ×4

拡張ヘッダ(26I/O, オプション)

Page 2: 2.2 FPGAボードの設計デモ FPGAボードのブロック図shikama/LogicCircuits2009/2019LC_15.pdf論理回路 摂大・鹿間 論理回路(第15回) 特別講義:言語を使った設計(2)

論理回路 摂大・鹿間

QuartusⅡによるFPGA設計フロー

④ ダウンロード

① プロジェクトの作成

② デザイン・エントリ(ソース・コード入力)

③ コンパイル

プロジェクト名の指定

設計ファイルの指定

ターゲット・デバイスの指定

(サードパーティ・ツールの指定)

プログラミング方式の指定

コンフィグレーション・ファイルの指定

プログラミングの実行

論理合成

配置配線

コンフィグレーション・データ生成

ピン配置指定

論理回路 摂大・鹿間

VHDLの基本構文 ライブラリ宣言

各種データ型や演算子に関するライブラリを指定

エンティティ宣言 入出力端子(port)

の設定

アーキテクチャ宣言

論理回路の機能・動作を記述

library IEEE;use IEEE.std_logic_1164.all;use IEEE.std_unsigned.all;

entity エンティティ名 is[エンティティ文]

end [エンティティ名];

architecture アーキテクチャ名 of エンティティ名 is-- ノード宣言部 (外部には出力しない信号)signal, type 等

begin[アーキテクチャ文]

end [アーキテクチャ名];

論理回路 摂大・鹿間

例題1: LEDの点灯と消灯

LEDの点灯・消灯をピンの

L/Hで制御 (負論理)

LEDのアノードにはVcc (3.3V)が印加されている

I/Oピンが”L”で点灯

I/Oピンが”H”で消灯

FPGAボードのLED周辺回路

EP1C3

560Ω×6363526283427

D4

D5

D6

D8 D9D7

Vcc3.3V

LED(D9)を点灯するピン配置

ピンの名前 ピン番号

led_out 36

論理回路 摂大・鹿間

例題1: LEDの点灯-- VHDLソースコード

library ieee;use ieee.std_logic_1164.all;entity practice1 is

port (led_out: out std_logic);

end practice1;architecture rtl of practice1 isbegin-- led_outが ‘0’で LEDが点灯-- led_outが ‘1’ でLEDが消灯led_out <= '0';

end rtl;

ライブラリ宣言

パッケージ呼び出し

エンティティ宣言(出力ポート設定)

アーキテクチャ宣言--- RTLレベルで論理回路の動作記述

Page 3: 2.2 FPGAボードの設計デモ FPGAボードのブロック図shikama/LogicCircuits2009/2019LC_15.pdf論理回路 摂大・鹿間 論理回路(第15回) 特別講義:言語を使った設計(2)

論理回路 摂大・鹿間

QuartusⅡの操作手順 (操作デモ概要)

プロジェクト名の指定

設計ファイルの指定

ターゲット・デバイスの指定

(サードパーティ・ツールの指定)

Tools ⇒ Programmer

設定確認,Auto Detect (EP1C3認識)

ファイル名指定 (*.sof) ⇒ Start

プリフィット(論理合成・配置配線)-- 回路規模,動作周波数チェック他

ポストフィット(書込みデータ生成)

④ ダウンロード

① プロジェクトの作成

② デザイン・エントリ(ソース・コード入力)

③ コンパイル

QuartusⅡの起動

EP1C3T100C8

・ ピン配置指定・ 未使用ピン処理(プルアップ&Hi-Z)

時間の関係上既存qpfを開く

(qdesigns¥quartus_usage)

論理回路 摂大・鹿間

例題2: 3個のLEDで2進数を表示する

library ieee;use ieee.std_logic_1164.all;entity practice2 is

port (led_out: out std_logic_vector(2 downto 0));

end practice2;architecture rtl of practice2 isbegin-- led_outが ‘0’のビットはLED点灯-- led_outが ‘1’のビットはLED消灯-- 2進数ビット反転式で(5)10を表現led_out <= "010";

end rtl;

ライブラリ宣言

パッケージ呼び出し

エンティティ宣言(3ビットバス出力)

アーキテクチャ宣言--- RTLレベルで論理回路の動作記述

論理回路 摂大・鹿間

例題3: 7セグメントLEDに16進数を表示する(1)

library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;

entity practice3 is

port (led_out: out std_logic_vector(7 downto 0));

end practice3;architecture rtl of practice3 issignal counter : std_logic_vector(3 downto 0) := (others=>'0');begin

counter <= "0010";

-- 以下に続く

ライブラリ宣言

エンティティ宣言(8ビットバス出力)

アーキテクチャ宣言ノード”counter”定義4ビットで7セグLED

の表示数値を設定

パッケージ呼び出し

論理回路 摂大・鹿間

FPGAボードの7セグメントLED回路

EP1C3

560Ω×8252221

2426

23

20

5

Vcc (3.3V)comA

comDP

abcdefg

D3

7セグメントLED(D3)のピン配置ピンの名前 接続 ピン番号

led_out[0] dp 25led_out[1] g 22led_out[2] f 21led_out[3] e 24led_out[4] d 26led_out[5] c 23led_out[6] b 20led_out[7] a 5

LED表示 a b c d e f g

0 0 0 0 0 0 11 0 0 1 1 1 10 0 1 0 0 1 00 0 0 0 1 1 01 0 0 1 1 0 00 1 0 0 1 0 00 1 0 0 0 0 00 0 0 1 1 1 10 0 0 0 0 0 00 0 0 0 1 0 00 0 0 1 0 0 01 1 0 0 0 0 01 1 1 0 0 1 01 0 0 0 0 1 00 1 1 0 0 0 00 1 1 1 0 0 0

アクティブLow信号

Page 4: 2.2 FPGAボードの設計デモ FPGAボードのブロック図shikama/LogicCircuits2009/2019LC_15.pdf論理回路 摂大・鹿間 論理回路(第15回) 特別講義:言語を使った設計(2)

論理回路 摂大・鹿間

例題3: 7セグメントLEDに16進数を表示する(2)

process(counter)begincase counter iswhen "0000" =>

led_out <= "00000011";when "0001" =>

led_out <= "10011111";when "0010" =>

led_out <= "00100101";when "0011" =>

led_out <= "00001101";when "0100" =>

led_out <= "10011001";when "0101" =>

led_out <= "01001001";when "0110" =>

led_out <= "01000001";when "0111" =>

led_out <= "00011111";

when "1000" =>led_out <= "00000001";

when "1001" =>led_out <= "00001001";

when "1010" =>led_out <= "00010001";

when "1011" =>led_out <= "11000001";

when "1100" =>led_out <= "11100101";

when "1101" =>led_out <= "10000101";

when "1110" =>led_out <= "01100001";

when "1111" =>led_out <= "01110001";

when others => null;end case;

end process;end rtl;

process文: 4ビット入力値の変化による8ビット出力値の変化を記述(7セグ表示用デコーダ)

case文:”when”条件で場合分けし,”=>”の文を実行する(同時並列に実行)

・othersは「それ以

外のとき」,処理なしの場合’null’・省略しないこと 論理回路 摂大・鹿間

例題4: 7セグメントLED表示を順次増加させる(1)library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;

entity practice4 is

port (clk : in std_logic;led_out: out std_logic_vector(7 downto 0));

end practice4;architecture rtl of practice4 is

signal counter : std_logic_vector(3 downto 0) := (others=>'0');signal div_counter : std_logic_vector(24 downto 0) := (others=>'0');signal div_clk : std_logic := '0';

ライブラリ宣言

エンティティ宣言(クロック入力clk)

アーキテクチャ宣言分周用カウンタ div_counter分周用クロック div_clk

パッケージ呼び出し

論理回路 摂大・鹿間

例題4: 7セグメントLED表示を順次増加させる(2)

begin

process (clk)begin

-- if文で33MHz clkの立上がりを検出し,div_counterを進めるif clk'event and clk='1' then

div_counter <= div_counter + 1;end if;

end process;

-- div_clkが1Hzの分周クロックで,デコーダへのクロック入力div_clk <= div_counter(24);

process(div_clk)begin

if div_clk'event and div_clk='1' thencounter <= counter + 1;

end if;end process;

Process文(分周回路):33MHzのclkを分周し,1秒のclkを作成(25bitカウンタのMSBは32M分周)

Process文:div_clkの立上がり検出し,LED表示用counterを進める

論理回路 摂大・鹿間

例題4: 7セグメントLED表示を順次増加させる(3)

process(counter)begin

case counter iswhen "0000" =>

led_out <= "00000011";when "0001" =>

led_out <= "10011111";when "0010" =>

led_out <= "00100101";when "0011" =>

led_out <= "00001101";when "0100" =>

led_out <= "10011001";when "0101" =>

led_out <= “01001001”;when "0110" =>

led_out <= "01000001";when "0111" =>

led_out <= "00011111";

when "1000" =>led_out <= "00000001";

when "1001" =>led_out <= "00001001";

when "1010" =>led_out <= "00010001";

when "1011" =>led_out <= "11000001";

when "1100" =>led_out <= "11100101";

when "1101" =>led_out <= "10000101";

when "1110" =>led_out <= "01100001";

when "1111" =>led_out <= "01110001";

when others => null;end case;

end process;end rtl;

process文: 4ビット入力値の変化による8ビット出力値の変化を記述(7セグ表示用デコーダ)

Page 5: 2.2 FPGAボードの設計デモ FPGAボードのブロック図shikama/LogicCircuits2009/2019LC_15.pdf論理回路 摂大・鹿間 論理回路(第15回) 特別講義:言語を使った設計(2)

論理回路 摂大・鹿間

3人による多数決の真理値表(論理回路基礎 第2回講義より)

入力変数A, B, Cとして,出力Yは

A B C0 0 00 0 10 1 00 1 11 0 01 0 11 1 01 1 1

Y00010111

AB

C

ABCCABCBABCAY

この論理式を順次簡単化

ABCABCABCCABCBABCAY )()()( CCABBBACAABC

CABCAB 論理回路 摂大・鹿間

SW入力回路とチャタリング除去

SW1~SW4:40~37番ピン(負論理)

ピンの名前 ピン番号

led_out 36sw_in1 37sw_in2 38sw_in3 39

clk 10

FPGAボードのSW入力回路

EP1C3

100Ω×4

Vcc3.3V

SW1

SW2

SW3

SW4

37

38

39

40

2.2k×4

1μ×4

10

33ΩCK

(33MHz)

OFF ⇒ ON チャタリング(1ms位)

↓ CK波形(基本CKの分周波形)

SW波形

理想タイミング

1回目"H"タイミング

1回目"L"タイミング

#1

#1

#1 #2

#2

CK立上がりでSW信号取得

1回目の結果がマチマチでも、2回目は”L" (周期msオーダ)

論理回路 摂大・鹿間

例題51: 3個のスイッチによる多数決論理(1)library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;

entity practice51 is

-- div_bits is division bits numbergeneric (div_bits : integer :=15);

port(clk : in std_logic;sw_in1 : in std_logic;sw_in2 : in std_logic;sw_in3 : in std_logic;led_out : out std_logic);

end practice51;

エンティティ宣言

②入出力ポート設定入力: SW1~3出力: LED

① チャタリング除去用分周設定(※)- 15bit分周 (33MHz⇒1KHz)

※ generic文:回路全体に適用可能なパラメータ(アーキテクチャ部でも使用可)

ライブラリ宣言 &パッケージ呼び出し

論理回路 摂大・鹿間

例題51: 3個のスイッチによる多数決論理(2)architecture rtl of practice51 issignal div_counter : std_logic_vector(div_bits-1 downto 0) := (others=>'0');signal sw_in_node1, sw_in_node2, sw_in_node3 : std_logic;signal a, b, c, y : std_logic;begin

-- チャタリング防止のためのクロック分周回路process(clk)begin

if clk‘event and clk = ’1‘ then -- CLKの立上がり検出 ⇒ カウントUPdiv_counter <= div_counter + 1;

end if;end process;-- 分周信号でSW入力をラッチする回路(分周CKのMSBをCKにする)process (div_counter(div_bits-1))begin -- processif div_counter(div_bits-1)'event and div_counter(div_bits-1) ='1' thensw_in_node1 <= sw_in1;sw_in_node2 <= sw_in2;sw_in_node3 <= sw_in3;

end if;end process;

div_counterの最上位ビットの立ち上がり検出3個のSW入力

(多数決入力)

Page 6: 2.2 FPGAボードの設計デモ FPGAボードのブロック図shikama/LogicCircuits2009/2019LC_15.pdf論理回路 摂大・鹿間 論理回路(第15回) 特別講義:言語を使った設計(2)

論理回路 摂大・鹿間

例題51: 3個のスイッチによる多数決論理(3)

a <= not sw_in_node1;b <= not sw_in_node2;c <= not sw_in_node3;y <= (a and b) or (b and c) or (c and a);

led_out <= not y;end rtl; cabcaby

多数決論理

論理演算結果をLEDに出力

論理回路の内部演算

論理回路 摂大・鹿間

まとめ

HDL設計入門 設計の流れ

FPGAボードによる設計デモ VHDL基本構文

QuartusⅡの操作手順と例題#1 LEDの点灯と消灯

#2 3個のLEDによる2進数表示

#3 7セグメントLEDに16進数を表示

#4 7セグメントLED表示を順次増加

#51 3個のスイッチによる多数決論理

論理回路 摂大・鹿間

参考図書 山際伸一,「改訂版 FPGAボードで学ぶ論理回路設計」,CQ出版(2009)

堀桂太郎,「図解 VHDL実習 第2版」,森北出版(2004)

徹底図解 ロジック回路設計 はじめの一歩,CQ出版(2009)