アフィリエイト広告を利用しています
ファン
検索
<< 2023年12月 >>
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31            
最新記事
(12/20)KI cad インストールしてみよう
(04/11)【JAVA】チョロメを外部から動作させます。 幽霊が操作してるような
(07/29)spartan3 を cy7c68013 のバルクライトで シリアルコンフィグしてみた
(07/28)ブログ村に参加してみた。いまとのころブログ村からはだれもこない^^;
(07/28)PIC16F1503 を使ってみようかな?? MPLAB 内部クロック
(07/01)からっぽのつぎ のページ きっとはげ に なんか作用するかも
(05/06)GCEでワードプレス 第2 困ったのでやり直し手順
(05/05)https://certbot.eff.org/lets-encrypt/centosrhel7-apache をみてハマったこと
(04/28)フェドラ をつかって switchbot をアクセス する。  ? 未解決
(04/02)【オープンVPN】setsebool -P openvpn_enable_homedirs 1 でうごいた
(04/01)【QT5】わからないのでタイムアウトで自動でキャンセルボタン押すメッセージボックスつくってみた
(03/31)qt5よくわからんのだが メッセージボックスの OKスイッチをタイマーで押してみた。
(03/09)【boost】message queue 使い方 目も目も
(03/08)【バカの一つ覚え】ユニークID作成とそのちょっとした応用
(03/04)【パソコン】【GPIO】いったいこれは?
(02/26)【VHDL入門】ABZ信号から Hsync Vsyncを作り出してみよう その2
(02/26)【VHDL入門】ABZ信号から Hsync Vsyncを作り出してみよう その1
(02/26)【VHDL入門】速度比較 エンコーダーABZ相 ソースファイル付き
(02/25)【VHDL入門】ロータリーエンコーダABZ 出力のサンプル 200Mhz動作?
(02/23)【VHDL入門】UART 送受信繰り返しのテストベンチ作成してみたい
最新コメント
カテゴリーアーカイブ
プロフィール
有象無象さんの画像
有象無象
はげはじめました 禿増されます。励ましのコメントお待ちしてます。  
プロフィール

広告

posted by fanblog

2021年02月13日

【VHDL入門】UARTを実装してみる。シミュレーターまで

https://www.nandland.com/vhdl/modules/module-uart-serial-port-rs232.html
を勝手に借りるとして
階層.png

ここに コンポーネントとして くっつけるのだ。
entityをコピーして コンポーネントにして貼り付ける。

試してみよう
 送信と受信があるので これを 1個のUART というファイルで 管理する。



library IEEE;
use IEEE.STD_LOGIC_1164.ALL;


entity UART is
generic (
g_CLKS_PER_BIT : integer := 115 -- Needs to be set correctly
);

port (
i_Clk : in std_logic;
i_TX_DV : in std_logic;
i_TX_Byte : in std_logic_vector(7 downto 0);
o_TX_Active : out std_logic;
o_TX_Serial : out std_logic;
o_TX_Done : out std_logic;

i_RX_Serial : in std_logic;
o_RX_DV : out std_logic;
o_RX_Byte : out std_logic_vector(7 downto 0)
);
end UART;
architecture Behavioral of UART is
component UART_TX
generic (
g_CLKS_PER_BIT : integer := 115 -- Needs to be set correctly
);
port (
i_Clk : in std_logic;
i_TX_DV : in std_logic;
i_TX_Byte : in std_logic_vector(7 downto 0);
o_TX_Active : out std_logic;
o_TX_Serial : out std_logic;
o_TX_Done : out std_logic
);
end component;

component UART_RX
generic (
g_CLKS_PER_BIT : integer := 115 -- Needs to be set correctly
);
port (
i_Clk : in std_logic;
i_RX_Serial : in std_logic;
o_RX_DV : out std_logic;
o_RX_Byte : out std_logic_vector(7 downto 0)
);
end component;

begin

UART_TXinst : UART_TX generic map (20)
port map (i_Clk, i_TX_DV, i_TX_Byte,o_TX_Active,o_TX_Serial,o_TX_Done);
UART_RXinst : UART_RX generic map (20)
port map (i_Clk, i_RX_Serial,o_RX_DV,o_RX_Byte);


end Behavioral;


さて それぞれの TX RXは 単純に元々のものをコピーしてきただけなので 階層としては
階層拡大」.png

 ここまでいいでしょうか  絵柄はさらに上にシミュ用の あれがなにしてます。
 シミュレーター用は VHDL TB テストベンチの略でしょうけどこれでつくります。

作ったテストベンチは こんな感じ 
  16進数で 送信に突っ込んで スタートして 送信されたデータを クロックで遅らせて
 受信に返します。 この結果がデコードできればいいわけです。

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;


entity UART is
generic (
g_CLKS_PER_BIT : integer := 115 -- Needs to be set correctly
);

port (
i_Clk : in std_logic;
i_TX_DV : in std_logic;
i_TX_Byte : in std_logic_vector(7 downto 0);
o_TX_Active : out std_logic;
o_TX_Serial : out std_logic;
o_TX_Done : out std_logic;

i_RX_Serial : in std_logic;
o_RX_DV : out std_logic;
o_RX_Byte : out std_logic_vector(7 downto 0)
);
end UART;
architecture Behavioral of UART is
component UART_TX
generic (
g_CLKS_PER_BIT : integer := 115 -- Needs to be set correctly
);
port (
i_Clk : in std_logic;
i_TX_DV : in std_logic;
i_TX_Byte : in std_logic_vector(7 downto 0);
o_TX_Active : out std_logic;
o_TX_Serial : out std_logic;
o_TX_Done : out std_logic
);
end component;

component UART_RX
generic (
g_CLKS_PER_BIT : integer := 115 -- Needs to be set correctly
);
port (
i_Clk : in std_logic;
i_RX_Serial : in std_logic;
o_RX_DV : out std_logic;
o_RX_Byte : out std_logic_vector(7 downto 0)
);
end component;

begin

UART_TXinst : UART_TX generic map (20)
port map (i_Clk, i_TX_DV, i_TX_Byte,o_TX_Active,o_TX_Serial,o_TX_Done);
UART_RXinst : UART_RX generic map (20)
port map (i_Clk, i_RX_Serial,o_RX_DV,o_RX_Byte);


end Behavioral;


特に怪説いらないと 思いますが
 プロセスという形式で  クロックをつくって
 クロックのエッジで 送信からでた シリアル信号を 1クロック遅らせて 受信にいれます。
 
今回 
UART_TXinst : UART_TX generic map (20)
port map (i_Clk, i_TX_DV, i_TX_Byte,o_TX_Active,o_TX_Serial,o_TX_Done);
UART_RXinst : UART_RX generic map (20)
port map (i_Clk, i_RX_Serial,o_RX_DV,o_RX_Byte);

 非同期のクロックを20クロックでという ことにしたので
 たとえば クロックが20MHzなら 1Mビット が一秒に転送されます。

では ここでシミュレーターを起動してみましょう。
 TBとしてさっきのファイルが追加されているので シミュレーターがクリックすれば起動します。
シミュレーター起動前修正版.png

この絵のなかの SimulateBehavioralModel というところをクリックすると なんとまぁ
 ということです TBをえらんで居る状態です ここで クリックすると

シミュレーター起動.png

さあ これで  VHDLを書いた  テストベンチを書いた シミュレーター起動した
という一連の流れの説明を終了します。
お疲れ様でした。

 ちなみに私は アルテラ 派です なんで ザイリンクスISEやねん という話ですが
 実はー  VHDLシミュレーターの起動は こっちが 速いのです。
 楽 だから プリミティブが アルテラ出ない場合は こっちで ちゃっちゃと シミュレーターです。



posted by 有象無象 at 12:16| Comment(0) | TrackBack(0) | VHDL
この記事へのコメント
コメントを書く

お名前:

メールアドレス:


ホームページアドレス:

コメント:

※ブログオーナーが承認したコメントのみ表示されます。

この記事へのトラックバックURL
https://fanblogs.jp/tb/10536230
※ブログオーナーが承認したトラックバックのみ表示されます。

この記事へのトラックバック
×

この広告は30日以上新しい記事の更新がないブログに表示されております。