ディジタル電子回路 設計演習課題

Similar documents
Verilog HDL による回路設計記述

FPGAによる24時間時計回路

Microsoft Word - 実験4_FPGA実験2_2015

VelilogHDL 回路を「言語」で記述する

Microsoft PowerPoint LC_15.ppt

三菱電機マイコン機器ソフトウエア株式会社

arduino プログラミング課題集 ( Ver /06/01 ) arduino と各種ボードを組み合わせ 制御するためのプログラミングを学 ぼう! 1 入出力ポートの設定と利用方法 (1) 制御( コントロール ) する とは 外部装置( ペリフェラル ) が必要とする信号をマイ

電卓の設計 1

<91E63589F161>

CMOS リニアイメージセンサ用駆動回路 C10808 シリーズ 蓄積時間の可変機能付き 高精度駆動回路 C10808 シリーズは 電流出力タイプ CMOS リニアイメージセンサ S10111~S10114 シリーズ S10121~S10124 シリーズ (-01) 用に設計された駆動回路です セン

回路 7 レジスタ ( 同期イネーブル及び非同期リセット付 ) 入力データを保持するのに用いる記憶素子 使用用途として, マイクロプロセッサ内部で演算や実行状態の保持に用いられる Fig4-2 のレジスタは, クロック信号の立ち上がり時かつ 信号が 1 のときに外部からの 1 ビットデータ R をレ

エンティティ : インタフェースを定義 entity HLFDD is port (, : in std_logic ;, : out std_logic ) ; end HLFDD ; アーキテクチャ : エンティティの実現 architecture RH1 of HLFDD is <= xor

スライド 1

Microsoft PowerPoint pptx

HW-Slides-05.ppt

Microsoft PowerPoint - 3.3タイミング制御.pptx

スライド 1

ソフトウェア基礎技術研修

QuartusII SOPC_Builderで利用できるGPIF-AVALONブリッジとは?

25mm LED DISPLAY UNIT PD SERIES [ フォトカプラ内蔵型表示器 ] 文字高 25mm 表示器 1 桁幅寸法 27mm LED 発光色 2 色用意 ワンタッチ取り付け フォトカプラ / 0~9 表示ドライバー内蔵型 フォトカプラ / 0~F 表示ドライバー内蔵型 形名の呼

- VHDL 演習 ( 組み合せ論理回路 ) 回路 半加算器 (half adder,fig.-) 全加算器を構成する要素である半加算器を作成する i) リスト - のコードを理解してから, コンパイル, ダウンロードする ii) 実験基板上のスイッチ W, が, の入力,LED, が, の出力とな

CMOS リニアイメージセンサ用駆動回路 C CMOS リニアイメージセンサ S 等用 C は当社製 CMOSリニアイメージセンサ S 等用に開発された駆動回路です USB 2.0インターフェースを用いて C と PCを接続

main.dvi

LSI LSI

SOPC Builder ペリフェラル 簡易ユーザ・ガイド - PIO (Parallel I/O)

計数工学実験/システム情報工学実験第一 「ディジタル回路の基礎」

ReferSTAR 78K/Kx2(CT-781) Applilet EZ PLプログラム集

-2 外からみたプロセッサ GND VCC CLK A0 A1 A2 A3 A4 A A6 A7 A8 A9 A10 A11 A12 A13 A14 A1 A16 A17 A18 A19 D0 D1 D2 D3 D4 D D6 D7 D8 D9 D10 D11 D12 D13 D14 D1 MEMR

内容 1. 仕様 動作確認条件 ハードウェア説明 使用端子一覧 ソフトウェア説明 動作概要 ファイル構成 オプション設定メモリ 定数一覧 変数一

データ収集用 NIM/CAMAC モジュールマニュアル 2006/5/23 目次 クレート コントローラ CC/ NIM ADC 1821 (Seiko EG&G)...3 ADC インターフェイス U デッドタイム

DELPHINUS EQUULEUS 2019 NASA SLS FPGA ( ) DELPHINUS 2

SICE東北支部研究集会資料(2009年)

スライド 1

KDC

スライド 1

, FPGA Verilog-HDL

形式 :MXAP 計装用プラグイン形変換器 MX UNIT シリーズ アナログパルス変換器 ( デジタル設定形 ) 主な機能と特長 直流入力信号を単位パルス信号に変換 出力周波数レンジ 出力パルス幅を前面パネルで設定可能 ドロップアウト機能付 ループテスト出力付 出力パルス数をカウント表示 ( 手動

2.5. Verilog 19 Z= X + Y - Z A+B LD ADD SUB ST (X<<1)+(Y<<1) X 1 2 LD SL ST 2 10

割り込み 今までのプログラムは 順番にそって命令を実行していくのみ それはそれで良いが 不便な場合もある 例えば 時間のかかる周辺機器を使う場合 その周辺機器が動作を終了するまで CPU は待たなければいけない 方法 1( ポーリング ) 一定時間毎に 周辺機器の動作が終了したか調べる 終了していれ

Microsoft PowerPoint - 01-VerilogSetup-2019.pptx

形式 :KAPU プラグイン形 FA 用変換器 K UNIT シリーズ アナログパルス変換器 ( レンジ可変形 ) 主な機能と特長 直流入力信号を単位パルス信号に変換 オープンコレクタ 5V 電圧パルス リレー接点出力を用意 出力周波数レンジは前面から可変 ドロップアウトは前面から可変 耐電圧 20

NCB564個別00版

. ディジタル回路設計を始める前に 2

1, Verilog-HDL, Verilog-HDL Verilog-HDL,, FPGA,, HDL, 11, 1 (a) (b) (c) FPGA (d) 2 10,, Verilog-HDL, FPGA, 12,,,, html % netscape file://home/users11/

電気的特性 (Ta=25 C) 項目 記号 条件 Min. Typ. Max. 単位 読み出し周波数 * 3 fop khz ラインレート * Hz 変換ゲイン Gc ゲイン =2-5 - e-/adu トリガ出力電圧 Highレベル Vdd V -

Microsoft Word - TC4017BP_BF_J_P10_060601_.doc

2ALU 以下はデータ幅 4ビットの ALU の例 加算, 減算,AND,OR の4つの演算を実行する 実際のプロセッサの ALU は, もっと多種類の演算が可能 リスト 7-2 ALU の VHDL 記述 M use IEEE.STD_LOGIC_1164.ALL; 00 : 加算 use IEE

Microsoft Word - N-TM307取扱説明書.doc

デジタル回路入門

VHDL

Report Template

Microsoft PowerPoint - 集積回路工学_ ppt[読み取り専用]

KEIm-08SoMハードウェアマニュアル

Microsoft PowerPoint - 01-VerilogSetup-2018.pptx

CCD リニアイメージセンサ用駆動回路 C CCD リニアイメージセンサ (S11155/S ) 用 C は 当社製 CCDリニアイメージセンサ S11155/S 用に開発された駆動回路です S11155/S11156-

GR-SAKURA-SAのサンプルソフト説明

0630-j.ppt

スライド 1

Taro-82ADAカ.jtd

スライド 1

フリップフロップ

Nios II - PIO を使用した I2C-Bus (2ワイヤ)マスタの実装

デザインパフォーマンス向上のためのHDLコーディング法

NI 6601/6602 キャリブレーション手順 - National Instruments


Microsoft PowerPoint - 01_Vengineer.ppt

1: ITT-2 DDR2 1.8V,.V(F) Config. Mem. JTAG XCFPV048 LEDs SWs Clock (VariClock) DDR2 DDR2 DDR2 FPGA XC5VFX0T General-Purpose LEDs SWs XTAL (2.68kHz) MC

光変調型フォト IC S , S6809, S6846, S6986, S7136/-10, S10053 外乱光下でも誤動作の少ない検出が可能なフォト IC 外乱光下の光同期検出用に開発されたフォトICです フォトICチップ内にフォトダイオード プリアンプ コンパレータ 発振回路 LE

NI P1200 Release Notes Cover

TMSx70 MCU の RTI(リアルタイム割り込み)を使用してオペレーティングシステムの Tick を発生させる方法

形式 :PDU 計装用プラグイン形変換器 M UNIT シリーズ パルス分周変換器 ( レンジ可変形 ) 主な機能と特長 パルス入力信号を分周 絶縁して単位パルス出力信号に変換 センサ用電源内蔵 パルス分周比は前面のスイッチで可変 出力は均等パルス オープンコレクタ 電圧パルス リレー接点パルス出力

NJU72501 チャージポンプ内蔵 圧電用スイッチングドライバ 概要 NJU72501はチャージポンプ回路を内蔵し 最大で3V 入力から 18Vppで圧電サウンダを駆動することができます このチャージポンプ回路には1 倍 2 倍 3 倍昇圧切り替え機能を備えており 圧電サウンダの音量を変更すること

卒業論文 巡回冗長検査 CRC32 のハード / ソフト最適分割の検討 氏名 : 伊藤大喜学籍番号 : 指導教員 : 山崎勝弘教授提出日 : 2009 年 2 月 19 日 立命館大学理工学部電子情報デザイン学科

if clear = 1 then Q <= " "; elsif we = 1 then Q <= D; end rtl; regs.vhdl clk 0 1 rst clear we Write Enable we 1 we 0 if clk 1 Q if rst =

形式 :WYPD 絶縁 2 出力計装用変換器 W UNIT シリーズ パルスアイソレータ ( センサ用電源付 2 出力形 ) 主な機能と特長 パルス入力信号を絶縁して各種のパルス出力信号に変換 オープンコレクタ 電圧パルス リレー接点パルス出力を用意 センサ用電源内蔵 耐電圧 2000V AC 密着

HW-Slides-04.ppt

スライド 1

ディジタル回路 第1回 ガイダンス、CMOSの基本回路

形式 :RPPD 計装用プラグイン形変換器 M UNIT シリーズ パルスアイソレータ ( センサ用電源付 ロータリエンコーダ用 ) 主な機能と特長 ロータリエンコーダの 2 相パルス入力信号を絶縁して各種の 2 相パルス出力信号に変換 オープンコレクタ 電圧パルス パワーフォト MOS リレー R

1. 使用する信号 1.1. UART 信号 UART 通信に使用する信号と接続相手との接続は以下の通りです UART 信号表 番号 CPU 機能名 CPU 信号名 基板コネクタピン番号 方向 接続相手の信号名 1 USART1_TX PA9 CN > RxD 2 USART1_R

Microsoft Word - AK8133_MS0930_J_05.doc

mbed祭りMar2016_プルアップ.key

内容 1. 仕様 動作確認条件 ハードウェア説明 使用端子一覧 ソフトウェア説明 動作概要 ファイル構成 オプション設定メモリ 定数一覧 変数一

Łñ“’‘‚2004

プリント


Cyclone IIIデバイスのI/O機能

Transcription:

Arch 研究室スキルアップ講座 NEXYS4 による 24 時間時計 仕様書および設計例 1

実験ボード (NEXYS4) 外観 ダウンロード (USB) ケーブル接続端子 FPGA:Xilinx 社製 Artix7 XC7A100T-CSG324 7 セグメント LED8 個 LED16 個 リセット SW スライドスイッチ (16 個 ) 押しボタンスイッチ (5 個 ) 2

実験ボードブロック図 8 8 8 8 8 8 8 8 a f g e d b c d.p CLK(100MHz) AN[7:0] SEGN[7:0] BTU BTL BTC BTR BTD RSTN FPGA Artix-7 XC7A100T SW[15:0] LED[15:0] : : Pull up : Pull down 3

FPGA 端子 信号レベルは全て 3.3V LVCMOS N で終わる信号は負論理 信号名方向 PIN 用途 CLK in E3 クロック (100MHz) RSTN in C12 リセット ( 負論理 ) BTU in F15 押しボタンスイッチ ( 正論理 ) BTL in T16 押しボタンスイッチ ( 正論理 ) BTC in E16 押しボタンスイッチ ( 正論理 ) BTR in R10 押しボタンスイッチ ( 正論理 ) BTD in V10 押しボタンスイッチ ( 正論理 ) 4

FPGA 端子 7 セグメント LED 関連出力端子 ( 全て負論理 ) 信号名 Seg. PIN SEGN[7] a L3 SEGN[6] b N1 SEGN[5] c L5 SEGN[4] d L4 SEGN[3] e K3 SEGN[2] f M2 SEGN[1] g L6 SEGN[0] d.p M4 SEGN 信号は 7 セグメント LED の各セグメントを制御負論理なので 0 の時発光 a 8 f g e d c b d.p 信号名 PIN 桁 AN[7] M1 Most Significant Digit AN[6] AN[5] AN[4] AN[3] AN[2] AN[1] L1 N4 N2 N5 M3 M6 AN[0] N6 Least Significant Digit AN 信号は 7 セグメント LED のアノードコモンを制御負論理なので 0 の時に発光する桁を選択 5

FPGA 端子 ( スライドスイッチ, 正論理 ) 信号名方向 PIN 桁 SW[15] in P4 Most Significant Bit SW[14] in P3 SW[13] in R3 SW[12] in T1 SW[11] in T3 SW[10] in U2 SW[9] in V2 SW[8] in U4 SW[7] in V5 SW[6] in V6 SW[5] in V7 SW[4] in R5 SW[3] in R6 SW[2] in R7 SW[1] in U8 SW[0] in U9 Least Significant Bit 6

FPGA 端子 (LED, 正論理 ) 信号名方向 PIN 桁 LED[15] out P2 Most Significant Bit LED[14] out R2 LED[13] out U1 LED[12] out P5 LED[11] out R1 LED[10] out V1 LED[9] out U3 LED[8] out V4 LED[7] out U6 LED[6] out U7 LED[5] out T4 LED[4] out T5 LED[3] out T6 LED[2] out R8 LED[1] out V9 LED[0] out T8 Least Significant Bit 7

24 時間時計の仕様 ( 設計例 ) 入力信号 クロック (CLK) として 100MHz を入力 リセット (RSTN) は初期リセット ( 内部状態の全クリア ) SETH により時カウンタの時刻合わせ (1 秒毎に +1) SETM により分カウンタの時刻合わせ (1 秒毎に +1) SCLR により秒,0.1 秒,0.01 秒のリセット カウンタの構成 hh: 時カウンタ 24 進カウンタ mm: 分カウンタ 60 進カウンタ ss: 秒カウンタ 60 進カウンタ uu: 1/100 秒,1/10 秒カウンタ 100 進カウンタ カウンタのインクリメント (+1) 周波数は 100Hz 7 セグメント LED はダイナミック点灯 (1kHz を利用 ) 入出力値は論理レベルに注意 8

24 時間時計のモジュール ( 設計例 ) clock24.v clock.v counter.v counter24.v counter60.v counter60.v counter100.v led_drv.v sevenseg.v clock24.v: 最上位階層 clock.v:1khz, 100Hzのパルス生成 counter.v: 時計用カウンタの上位階層 counter24.v:24 進カウンタ時間をカウントするカウンタ counter60.v:60 進カウンタ分および秒をカウントするカウンタファイルは1 個で実現可能 ( 別ファイルでも構わない ) counter100.v:100 進カウンタ 100m 秒,10m 秒をカウントする led_dev.v:7セグメントledのダイナミック点灯用制御信号生成 sevenseg.v:bcdコードから7セグメント LEDを表示するために必要なデコーダ 9

24 時間時計の仕様 ( サンプルブロック図 ) SETH SETM SCLR 8 F15 V10 E16 C12 counter.v counter24.v counter60.v 100Hz clock24.v counter60.v TIME[31:0] 桁上げ信号 counter100.v sevenseg.v 時間合せ用 1 秒タイミング SEG[7:0] BCD[3:0] SEGN[7:0] M4 L6 M2 K3 L4 L5 N1 L3 e a f g d AN[7] c b d.p クロックモジュール 100MHz RSTN CLK E3 TIME[31:0] led_drv.v DIGIT[7:0] 100Hz 1kHz clock.v RST T8 AN[0] M1 N6 動作確認用 LED ( 必要に応じ追加してよい ) 10

設計入力 ( 最上位階層 :clock24.v) module clock24 ( CLK, RSTN, SETH, SETM, SCLR, SEGN, AN, LED ) input CLK // Clock (100MHz) input RSTN // Reset (Low active) input SETH // Set hour (High active) input SETM // Set minute (High active) input SCLR // Clear sec and msec (high active) output [7:0] SEGN // segment for 7 segment LED (Low active) output [7:0] AN // Digit enable for 7 segment LED (Low active) output LED // LED (High active) // internal wire wire // Reset (High active) wire [31:0] // HH:MM:ss:mm wire [ 3:0] // BCD value of TIME digit wire // Clock enable 1ms = 1,000Hz wire // Clock enable 10ms = 100Hz wire [ 7:0] // Segment data wire [ 7:0] // Digit position assign = // 負論理信号は内部では正論理で統一 外部信号が負論理の場合でも, 内部信号は正論理で統一した方が分かりやすい clock C0 (.CLK( ),.RST( ),.CE10( ),.CE1( ) ) counter C1 (.CLK( ),.RST( ),.CE10( ),.SETH( ),.SETM( ),.SCLR( ),.TIME( )) led_drv C2 (.CLK( ),.RST( ),.CE( ),.TIME( ),.BCD( ),.DIGIT( ) ) sevenseg C3 (.BCD( ),.SEG( )) assign SEGN = assign AN = assign LED = // 負論理で出力 コメントに漢字は使えません // 負論理で出力 // 動作確認用に1 秒の信号などを出力しておくとよい module 11

制約条件ファイル :counter24.ucf ## Clock signal NET "CLK" LOC = "E3" IOSTANDARD = "LVCMOS33" NET "CLK" TNM_NET = CLK_pin TIMESPEC TS_CLK_pin = PERIOD CLK_pin 100 MHz HIGH 50% ## 7 segment display NET "SEGN<7>" LOC = "L3" IOSTANDARD = "LVCMOS33" NET "SEGN<6>" LOC = "N1" IOSTANDARD = "LVCMOS33" NET "SEGN<5>" LOC = "L5" IOSTANDARD = "LVCMOS33" NET "SEGN<4>" LOC = "L4" IOSTANDARD = "LVCMOS33" NET "SEGN<3>" LOC = "K3" IOSTANDARD = "LVCMOS33" NET "SEGN<2>" LOC = "M2" IOSTANDARD = "LVCMOS33" NET "SEGN<1>" LOC = "L6" IOSTANDARD = "LVCMOS33" NET "SEGN<0>" LOC = "M4" IOSTANDARD = "LVCMOS33" NET "AN<0>" LOC = "N6" IOSTANDARD = "LVCMOS33" NET "AN<1>" LOC = "M6" IOSTANDARD = "LVCMOS33" NET "AN<2>" LOC = "M3" IOSTANDARD = "LVCMOS33" NET "AN<3>" LOC = "N5" IOSTANDARD = "LVCMOS33" NET "AN<4>" LOC = "N2" IOSTANDARD = "LVCMOS33" NET "AN<5>" LOC = "N4" IOSTANDARD = "LVCMOS33" NET "AN<6>" LOC = "L1" IOSTANDARD = "LVCMOS33" NET "AN<7>" LOC = "M1" IOSTANDARD = "LVCMOS33" ## LED NET "LED" LOC = "T8" IOSTANDARD = "LVCMOS33" ## Buttons NET "RSTN" LOC = "C12" IOSTANDARD = "LVCMOS33" # Reset (N) NET "SCLR" LOC = "E16" IOSTANDARD = "LVCMOS33" # Center NET "SETH" LOC = "F15" IOSTANDARD = "LVCMOS33" # Up NET "SETM" LOC = "V10" IOSTANDARD = "LVCMOS33" # Down 12

clock.v におけるタイミング信号の考え方 1kHz のタイミングパルスは 1ms の周期で 100MHz の 1 周期だけ 1 になるような信号 1/100,000,000Hz=10ns 100,000 クロック 10ns 100,000=0.001s=1ms 1/0.001=1kHz CLK 100MHz 1kHz 1/100,000,000Hz=10ns このようなタイミングパルスを生成するには Verilog HDL でどのように記述すればよいだろうか? 13

基準タイミング生成 :clock.v module clock ( CLK, RST, CE10, CE1 ) input CLK // Clock input RST // Reset output CE10 // Clock enable 10ms (100Hz) output CE1 // Clock enable 1ms (1kHz) reg [ : ] cnt1 reg [ : ] cnt2 always @( or ) if( ) cnt1 <= else if( ) cnt1 <= else cnt1 <= always @( or ) if( ) cnt2 <= else if( ) if( ) cnt2 <= else cnt2 <= assign CE1 = // Clock enable 1ms = 1,000Hz assign CE10 = // Clock enable 10ms = 100Hz module 可能であれば, このような分周カウンタはインクリメント (+1) カウンタではなくデクリメント (-1) カウンタで実現した方が良い ( なぜでしょう?) 100,000 カウンタ 10 カウンタ : 100,000 カウンタを数えきった際にカウントアップする 1ms 周期で 10ns 幅のパルス 10ms 周期で 10ns 幅のパルス 14

時間用カウンタの考え方 時間をカウントするために以下のカウンタを要する 100ms, 10ms カウンタ 1/10 秒,1/100 秒をカウントする.100 進カウンタが必要 RSTにより0に初期化できるとする SCLRにより時間合わせのために0に初期化できるとする 秒カウンタ 60 進カウンタが必要 RSTにより0に初期化できるとする SCLRにより時間合わせのため,0に初期化できるとする 分カウンタ 60 進カウンタが必要 RSTにより0に初期化できるとする SETMにより時間合わせのため,1 秒ごとにカウントアップできるとする 時間カウンタ 24 進カウンタが必要 RSTにより0に初期化できるとする SETHにより時間合わせのため,1 秒ごとにカウントアップできるとするカウンタは2 進カウンタ,BCDカウンタのどちらでもよい. 但し,2 進カウンタの場合は表示ために 2 進 BCD 変換回路を要する. 15

時計用カウンタ上位階層 :counter.v module counter ( CLK, RST, CE10, SETH, SETM, SCLR, TIME ) input CLK // Clock input RST // Reset input CE10 // Clock enable 10ms input SETH // Set Hour 時間時刻合わせ input SETM // Set Minuite 分時刻合わせ input SCLR // Clear ss & mm, 秒,1/10 秒,1/00 秒リセット output [31:0] TIME // 時間出力 wire // 1 秒タイミング信号 wire // 1 分タイミング信号 wire // 1 時間タイミング信号 wire [7:0],,, // 時刻用変数 counter100 c100 (.CLK(CLK),.RST( ),.CE( ),.CNT( ),.UP( )) counter60 c60s (.CLK(CLK),.RST( ),.CE( ),.CNT( ),.UP( )) counter60 c60m (.CLK(CLK),.RST(RST),.CE( ),.CNT( ),.UP( )) counter24 c24 (.CLK(CLK),.RST(RST),.CE( ),.CNT( )) assign TIME = {,,, } module 16

100 進 BCD カウンタ :counter100.v module counter100 ( CLK, RST, CE, CNT, UP ) input CLK, RST, CE // Clock, Reset, Clock Enable output [7:0] CNT // 時間出力 output UP // 桁上げ reg [3:0] d1, d0 // カウンタ変数 always @( or ) if( ) リセット時 else if( ) if( ) if( ) else else 考え方 : 1 の位が 9 ならば 0 にして 10 の位を桁上げ, そうでなければ 1 の位を +1. 但し,10 の位も 9 であるときは 0 にする. assign CNT = {, } // 時間出力 assign UP = ( && && )? 1'd1 : 1'd0 module カウンタが 99 で, 桁上げが必要なタイミングに桁上げ信号を出力 17

60 進 BCD カウンタ :counter60.v module counter60 ( CLK, RST, CE, CNT, UP ) input CLK, RST, CE // Clock, Reset, Clock Enable output [7:0] CNT // 時間出力 output UP // 桁上げ reg [3:0] d1, d0 // カウンタ変数 always @( or ) if( ) リセット時 else if( ) if( ) if( ) else else 考え方 : 1 の位が 9 ならば 0 にして 10 の位を桁上げ, そうでなければ 1 の位を +1. 但し,10 の位が 5 であるときは 0 にする. assign CNT = {, } // 時間出力 assign UP = ( && && )? 1'd1 : 1'd0 module カウンタが 59 で, 桁上げが必要なタイミングに桁上げ信号を出力 18

24 進 BCD カウンタ :counter24.v module counter24 ( CLK, RST, CE, CNT ) input CLK, RST, CE // Clock, Reset, Clock Enable output [7:0] CNT // 時間出力 reg [3:0] d1, d0 // カウンタ変数 always @( or ) if( ) else if( ) if( ) リセット時 else if( ) else 考え方 : 1 の位が 9 のときは 0 にして 10 の位を桁上げ. カウンタ値が BCD で 23 であるときは 0. そうでなければ 1 の位を +1 にする. assign CNT = {, } // 時間出力 module 19

設計入力 (LED ドライバ :led_drv.v) 考え方 表示桁と表示位置を対応させる 1kHz led_drv.v DIGIT[7:0] CLK 3 ビットカウンタ 3-to-8 デコーダ RST TIME[31:0] 32 4 4 4 4 4 4 4 4 8-to-1 マルチプレクサ 4 BCD 20

設計入力 (LED ドライバ :led_drv.v) AN[7:0] 信号の変化の考え方 SEGN[7:0] 8 FPGA AN[7] AN[6] AN[5] AN[4] AN[3] AN[2] AN[1] AN[0] AN[7] AN[6] AN[5] AN[4] AN[3] AN[2] AN[1] AN[0] 0 レベルに対応する桁のみが点灯する 21

led_drv.v module led_drv ( CLK, RST, CE, TIME, BCD, DIGIT ) input input input // clock enable input output output reg reg reg always @( or ) if( ) <= else if( ) <= 3bit の free run counter を生成する always @( ) case( ) デコーダ 4'b000 :DIGIT<= 4'b001 :DIGIT<= 4'b010 :DIGIT<= 4'b011 :DIGIT<= 4'b100 :DIGIT<= 4'b101 :DIGIT<= 4'b110 :DIGIT<= 4'b111 :DIGIT<= default:digit<= case always @( ) case( ) 3-to-8 8-to-1 マルチプレクサ 4'b000 :BCD<=TIME[ : ] 4'b001 :BCD<=TIME[ : ] 4'b010 :BCD<=TIME[ : ] 4'b011 :BCD<=TIME[ : ] 4'b100 :BCD<=TIME[ : ] 4'b101 :BCD<=TIME[ : ] 4'b110 :BCD<=TIME[ : ] 4'b111 :BCD<=TIME[ : ] default:bcd<= case module 22

設計入力 (7 セグメントデコーダ :sevenseg.v) module sevenseg (BCD, SEG) input output reg always @( ) case( ) 4'h0: SEG<=8'b11111100 4'h1: SEG<= 4'h2: SEG<= 4'h3: SEG<= 4'h4: SEG<= 4'h5: SEG<= 4'h6: SEG<= 4'h7: SEG<= SEG[7:0] は 7 セグメント LED の各セグメント a, b, c, d, e, f, g, d.p の順に対応している 4'h8: SEG<= 4'h9: SEG<= default:seg<= case module 23

テストベンチ :clock24_test.v `timescale 1ns/1ns // シミュレーションの時間単位を1ns, 精度を1nsにする module clock24_text reg CLK // テスト回路への入力変数はregを使用 reg RSTN reg SETH reg SETM reg SCLR wire [7:0] SEGN // テスト回路からの出力変数はwireを使用 wire [7:0] AN wire LED initial $shm_open("waves.shm") $shm_probe("as") Verilog-XL シミュレータにおいて simvision 波形ビューアを使用する際の波形情報保存指定 `include "clock24_test.vct" テストベクタの読込み clock24 unit (.CLK(CLK),.RSTN(RSTN),.SETH(SETH),.SETM(SETM),.SCLR(SCLR),.SEGN(SEGN),.AN(AN),.LED(LED) ) module 24

テストベクタ :clock24_test.txt テストベクタのサンプルを示す. このテストベクタは, クロックとして 10ns (100MHz) を使用し, リセットをかけた後に 1 千万 ns 時間進めている. 1 千万 ns 時間は 10 7 10 9 [s] = 10 2 [s] = 10[ms] であり,0.01 秒の時間しかシミュレーションしないことになる. なお, これ以上時間をかけてもシミュレーションに多大な時間をかけることになるため,clock モジュールの 100,000 カウンタを一時的に変更するなどしてシミュレーション時間を加速した方が良い. 例えば clock モジュールの 100,000 カウンタを 10 カウンタとすれば,10,000 倍の加速シミュレーションを行うことになる. なお, シミュレーション後は変更箇所を元に戻すことを忘れないこと. また, 右記テストベクタでは時間合わせ機能のテストを省略している. もちろん, 時間わせ機能のテストも必要である. # input RSTN SETH SETM SCLR # clock CLK 10 # testvector # RSTN SETH SETM SCLR 5 1 0 0 0 10 0 0 0 0 10 1 0 0 0 10000000 1 0 0 0 Verilog シミュレータに入力する実際のテストベクタ (clock24_test.vct) は make_vector.pl コマンドを使用して clock24_test.txt から変換する. 25

シミュレーション結果 ( 例 ) シミュレーション結果の例を示す. clock モジュールの 100,000 カウンタを 10 カウンタとしているため,10,000 倍の加速シミュレーションを行った結果である. カーソル付近において,LED 表示の 1 セグメント分の表示期間が 1,720[ns]-1,620[ns]=100[ns] となっているが,10,000 倍なので実際の時間は 1[ms](1kHz) に相当する. TIME[31:0] も約 1,000[ns] の所で +1 されており,10[ms] でカウントアップされていることが分かる.BCD[3:0] が 1,620[ns] で "1" となっていることから, 10[ms] の桁の "1" が 7 セグメント LED に表示されようとしていることが分かる. 26