コンテンツ
- 1.トリガー・デザイン
- 2.ラッチデザイン
- 3.カウンタの設計
- シフトレジスタの4デザイン
- 実験対象
- 1)カウントイネーブル設計、キャリー出力、及び同期プリセット番号で2進カウンタで0にクリア
- 2)設計と非同期クリアし、カウントした8ビットのバイナリカウンタを実装0増加イネーブル
- 3)設計及び有効バンドを実装カウント、キャリー出力、及び8ビットのバイナリカウンタの非同期プリセット数が増加0にクリアする/減少
- シフトレジスタへと出て6列の4)デザイン(使用自動データローディング上)
- 5)文字列6のデザインは、取り込まれたシフトレジスタであります
- ビット列6シフトレジスタに文字列の6)デザイン
- 7)設計図6は、シフトレジスタに出し入れ組み込ま
- 6. VHDL言語の書き込み仕様
1.トリガー・デザイン
1.1基本的なDフリップフロップの設計
信号入力端子D、信号出力端子Q、及びクロック入力CLK:実質的に3ポートにDフリップフロップ。
その動作特性:クロックの立ち上がりエッジの瞬間、信号Q D出力ポートを更新するために、入力端子からの信号を取得するために、出力信号Dの残り時間が一定のままです。
以下は、実装コードです:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY DFF1 IS
PORT(
CLK,D : IN STD_LOGIC;
Q : OUT STD_LOGIC
);
END DFF1;
ARCHITECTURE BHV OF DFF1 IS
SIGNAL Q1 : STD_LOGIC;
BEGIN
PROCESS(CLK,D) BEGIN
IF CLK'EVENT AND CLK='1'
THEN Q1<=D;
END IF;
END PROCESS;
Q<=Q1;
END BHV;
図に示すように、最終的なシミュレーション結果。
1.1.1いくつかの異なるトリガ立ち上り検出方法
- そして、イベント・ロジックと機能の組み合わせを使用
CLK'EVENT AND CLK='1'
- その他の保険の組み合わせロジックとイベント+
CLK'EVENT AND (CLK='1') AND (CLK'LAST_VALUE='0')
- lastvalue関数形
CLK='1' AND CLK'LAST_VALUE='0'
- の形態でrising_edge()関数
IF RISING_EDGE(CLK)
1.2非同期リセットDクロックイネーブルフリップフロップと
名前が示唆するように、Dフリップフロップの2つの入力端子よりも塩基性である:非同期リセット端子RST、クロック端子ENを可能にします。RSTの非同期リセット端子のため、長い入力が直ちにクリア「1」、Dフリップフロップの出力端子である限り、クロックは、「1」である端子ENを、有効、Dフリップフロップは、クロックの立ち上がりエッジに信号を受信するの更新信号出力ポートを生成します。次のようにコードは次のとおりです。
library ieee;
use ieee.STD_logic_1164.all;
entity dff2 is
port (
D,CLK,EN,RST : IN std_logic;-- EN时钟使能 RST异步清零
Q : OUT std_logic
) ;
end dff2;
architecture behav of dff2 is
signal Q1 : std_logic;
begin
reg : process( RST,EN,CLK,D )
begin
if RST='1' then --触发器被清零
Q1<='0';
elsif EN='1' then
if (CLK'EVENT AND CLK='1') then
Q1 <= D;
end if ;
end if ;
end process ; -- reg
Q <= Q1;
end behav ; -- behav
このセクションでは二つの質問、フォローアップを解決するには、左があります。
- 敏感な変数の敏感な変数テーブルを処理し、どのようにそれを選択するには?
声明の中で表示される変数、右側の変数の代入記号を決定するための内部プロセスが敏感な変数テーブルに含まれています。 - 10nsの遅延がシミュレーションを行うことが妥当である程度あるのでしょうか?
リーズナブル!
1.3コントロール同期リセットDフリップフロップ
名前が示唆するように、4つの入力ポート、信号入力端子D、クロック信号CLK、クロックイネーブル信号ENと同期リセット端子RSTを含むトリガー、「RST = 1」のみの役割を果たしているために、クリアされるまで信号が立ち上がりエッジに到達したとき。
我々は2つの点に注意を払う必要があります。
- クロック同期信号がエッジ検出(下)内に配置され、非同期信号はエッジ検出クロック(またはそれ以上)の外側に配置されています。
- Elseステートメントは、ステートメントかどうかを判断する決意が肯定文は組み合わせ論理デバイスでインスタンス化、完了していることを示す表示されます。
以下は、実装コードです:
library IEEE;
use IEEE.std_logic_1164.all;
entity dff3 is
port(
RST,EN,CLK,D : in std_logic;
Q : out std_logic
);
end dff3;
architecture behav of dff3 is
signal Q1 : std_logic;
begin ---千万不要忘记architecture里的begin!
reg:process (CLK,EN) begin
if (CLK'event and CLK='1' and EN='1') then --外部的if语句是不完整的,构成了时序逻辑器件
if RST = '1' then --内部的if是完整的,构成了一个多路选择器
Q1<='0';
else --加上了else肯定是完整的判断语句
Q1 <=D;
end if;
end if;
end process;
Q <= Q1;
end behav;
次のようにシミュレーション結果は次のとおりです。
2.ラッチデザイン
2.1基本的なラッチ
基本的なラッチポートコンポーネント:
- 入力:クロック信号CLKと入力信号D
- 出力ポート:出力信号Q
基本的なラッチ動作特性:ときCLK =「1」は、出力信号Qは、入力されたタイミング信号D、CLK =「0」、出力信号Qが残るに等しいです。
次のようにコードは次のとおりです。
library IEEE;
use IEEE.std_logic_1164.all;
entity LTCH1 is
port(
CLK,D : in std_logic;
Q : out std_logic
);
end LTCH1;
architecture bhv of LTCH1 is
signal Q1 : std_logic;
begin
reg:process(CLK,D) begin
if CLK='1' then
Q1 <= D;
end if;
end process;
Q <= Q1;
end; --bhv
シミュレーション波形次のように:
含むラッチ2.2クリア制御
3.カウンタの設計
4進カウンタの3.1シンプル追加
同期ロードおよび非同期リセット機能付き3.2 10進加算カウンタ
シフトレジスタの4デザイン
実験対象
1)カウントイネーブル設計、キャリー出力、及び同期プリセット番号で2進カウンタで0にクリア
library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_unsigned.all;
entity CNT20 is
port (
CLK,RST,EN,LOAD : in std_logic;-- 时钟信号、同步清零信号、计数使能信号、预置数信号
DATA : in std_logic_vector(4 downto 0);--预置数信号
DOUT : out std_logic_vector(4 downto 0);--计数输出
COUT : out std_logic--进位输出
) ;
end CNT20;
architecture bhv of CNT20 is
signal Q : std_logic_vector(4 downto 0);
begin
REG : process( CLK,RST,EN,LOAD )
begin
if CLK'EVENT and CLK='1' then
if RST='0' then Q <= (others=>'0');-- 同步清零
elsif EN='1' then
if LOAD='0' then Q <= DATA;--采用低电平进行预置数
elsif Q<19 then
Q <= Q + 1;--未达到进位条件则进位
else
Q <= (others=>'0');--手动清零
end if ;
end if ;
end if ;
end process ; -- REG
COM : process( Q )
begin
if Q="10011" then --20进制计数到19
COUT <= '1';
else
COUT <= '0';
end if ;
end process ; -- COM
DOUT <= Q;
end bhv ; -- bhv
2)設計と非同期クリアし、カウントした8ビットのバイナリカウンタを実装0増加イネーブル
3)設計及び有効バンドを実装カウント、キャリー出力、及び8ビットのバイナリカウンタの非同期プリセット数が増加0にクリアする/減少
library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_unsigned.all;
entity CNT_8 is
port (
CLK,RST,EN,LOAD : in std_logic;-- 时钟信号、异步清零信号、计数使能信号、预置数信号
DATA : in std_logic_vector(7 downto 0);--预置数信号
DOUT : out std_logic_vector(7 downto 0);--计数输出
COUT : out std_logic--进位输出
) ;
end CNT_8;
architecture bhv of CNT_8 is
signal Q : std_logic_vector(7 downto 0);
begin
REG : process( CLK,RST,EN,LOAD )
begin
if RST='0' then Q <= (others=>'0');
elsif CLK'EVENT and CLK='1' then
if EN='1' then
if LOAD='0' then Q <= DATA;
else
Q <= Q + 1;
end if ;
end if ;
end if ;
end process ; -- REG
COM : process( Q )
begin
if Q="11111111" then --
COUT <= '1';
else
COUT <= '0';
end if ;
end process ; -- COM
DOUT <= Q;
end bhv ; -- bhv
必要が手動で最高のカウントビットはジャンプをクリアして設定するように、8ビットカウンタいるため、すべてのビットをカウントアップする、ということに注意してください。
シフトレジスタへと出て6列の4)デザイン(使用自動データローディング上)
--串行输入并行输出
library IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
entity SHIFT6_LEFT is
port (
CR,CLK,SHIFT : IN STD_LOGIC; --清零信号、时钟信号、串行输入信号
Y : OUT STD_LOGIC_VECTOR(5 DOwNTO 0) --并行四位输出
) ;
end SHIFT6_LEFT;
architecture A of SHIFT6_LEFT is
signal TEMP_DATA : STD_LOGIC_VECTOR(6 DOWNTO 0); --共计7位,增加一位作为状态位
begin
REG1:process( CLK ) --状态位"011111"工作特性的设定
begin
if CLK'EVENT AND CLK='1' then
if CR='0' then--信号清零
TEMP_DATA<="0000000";
elsif TEMP_DATA(6)='0' then--状态位重载 --此句更改了TEMP_DATA
--默认信号初始值都为0 (一般会先存在CR信号对TEMP_DATA进行清零)
TEMP_DATA<="111110" & SHIFT ;
else
TEMP_DATA <= TEMP_DATA(5 DOWNTO 0) & SHIFT ;--信号左移:串行输入一位 & 高四位右移
end if ;
end if ;
end process ;
REG2:process( TEMP_DATA ) --并行输出时刻的设定
--每 移动一位\状态位重载 检测一次
begin
if CLK'event and CLK='1' then
if TEMP_DATA(6)='0' then --输出状态位到达
Y <= TEMP_DATA(5 DOWNTO 0);
--else
--Y<="0000";
end if ;
end if ;
end process ;
end A ;
5)文字列6のデザインは、取り込まれたシフトレジスタであります
library IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
entity SHIFT6_RIGHT is
port (
CR,CLK : IN STD_LOGIC;
SHIFT : IN STD_LOGIC_VECTOR(5 DOwNTO 0);
Y : OUT STD_LOGIC
) ;
end SHIFT6_RIGHT;
architecture A of SHIFT6_RIGHT is
signal TEMP_DATA : STD_LOGIC_VECTOR(11 DOWNTO 0);
begin
REG1:process( CLK )
begin
if CLK'EVENT AND CLK='1' then
if CR='0' then
TEMP_DATA<=(others=>'0');
elsif TEMP_DATA(0)='0' then
TEMP_DATA<=SHIFT & "011111";
else
TEMP_DATA(10 DOWNTO 0) <= TEMP_DATA(11 DOWNTO 1);
end if ;
end if ;
end process ;
Y <= TEMP_DATA(6);
end A ;
ビット列6シフトレジスタに文字列の6)デザイン
7)設計図6は、シフトレジスタに出し入れ組み込ま
6. VHDL言語の書き込み仕様
:私は改善の必要がいくつか抜粋を提示し、それが習慣を書いVHDL理解されている
(フルバージョンリファレンス:VHDLの書き込み仕様)
- 大文字定数を識別するエンティティ構造名、ポート信号は、同様に、変数は、大文字の最初の文字を用いた一般的な信号を表しています。
- VHDLは小文字で予約語
- マルチビット信号とdowntoを使用して記載されています
- あなたはライブラリIEEEを呼び出すと、IEEEは、小文字の残りの部分を大文字
- 各信号、変数、定数、およびポートを定義するには、コメントを持つべきです
- 分離する - 「********」複数のプロセスが機能モジュール間で使用される機能モジュールを実現する場合の処理の間に使用する「--------」は、分離しました。
- ポート名を合わせます。結腸を整列させるために、ジェネリックが整列することで、または外、配向ベクトルを定義します。
- いくつかの一般的な略語信号