解決済み

FPGAのシミュレーションに関して

  • 困ってます
  • 質問No.6426917
  • 閲覧数253
  • ありがとう数1
  • 気になる数0
  • 回答数1
  • コメント数0

お礼率 73% (55/75)

いつもお世話になっています。

以下の開発環境におけるFPGAのロジックのシミュレーションに疑問があるので質問します。

環境
modelsim Altera starter edition

質問概要
10進カウンターを作ってクロックの立ち上がりで動作するように作ったのに立下りで動作するのは何故か。(10進数をカウンター内部変数TQで数え上げqに出力しているがTQはクロックの立ち上がりで動いているが、qは立下りで動いている様に見える)

10進カウンターの内部構造

ソース概要
・内部変数TQが0から始まり、+1していき10回数えたら0から桁上がりの変数cを1にしてやりなおし。
・計算中の内部変数TQで7SEG LEDを駆動させるためのアウトプットqがある。
・リセットは0の時リセットされる。

VHDLのソースを載せます。
library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_unsigned.all;
entity COUNT10 is
port(RESET,CLK : in std_logic;
Q: out std_logic_vector(3 downto 0);
C: out std_logic
);
end COUNT10;
architecture RTL of COUNT10 is
signal TQ : std_logic_vector(3 downto 0);
begin
process (RESET,CLK ) begin
if(RESET='0') then
TQ <= "0000";
C<='0';
elsif(CLK 'event and CLK ='1') then
if(TQ="1001") then
TQ <= "0000";
C <='1';
elsif(TQ="0000") then
C <='0';
TQ <= TQ + '1';
else
TQ <= TQ + '1';
end if;
end if;
Q<=TQ;
end process;
end RTL;

シミュレーション結果
クロックを数え上げた内部変数TQがqへ値を渡す仕組みになっています。
これがたち下がりの時に行われている様に見える。

質問者が選んだベストアンサー

  • 回答No.1

ベストアンサー率 29% (217/731)

Q<=TQ;
の代入文がprocess文の中に入ってるからですね。
シミュレーションでprocess文が評価(実行)されるのは、センシティビティリスト内の信号が変化したときのみです。
ですから、TQがクロック立ち上がりで変化した後、process文内が再度実行されるのはクロックの立ち下り時になります。

合成するとシミュレーションとは違ってQはクロック立ち下りに同期しないかもしれませんね。
ただ、書き方としては代入文はこのプロセス文の外でやる方がいいと思います。
お礼コメント
Duke_Mike

お礼率 73% (55/75)

どうもありがとうございました。

疑問が解決した上に丁寧なアドヴァイスまでありがとうございました。
投稿日時 - 2011-01-07 15:36:02
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,500万件のQ&Aを分析して最適な回答をご提案します。

関連するQ&A
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する

特集

ピックアップ

ページ先頭へ