今月の作業日誌

2004/04/23   ハード到着
ハードが到着しました。なんとも不思議な経緯なのですが、せっかくのチャンスなので がんばりましょう(当社比で ^^;)。
まず電源につないでみましたが、何も起こらず消去済みの模様。
よく見ると、ディップスイッチのプルアップ抵抗の足に半田くずがついているのを発見。 ふつう電源を入れる前に確認して気づきませんか?と自分につっこみを入れつつも、 今の時点では問題ないはず(たぶん)。
動作確認のため、次のように、スイッチを押している間だけLEDが点灯する回路をVHDLで記述して、 ダウンロードして動作確認しました。他の部分の動作確認は、また後日行うことにしましょう。
---
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

--  Uncomment the following lines to use the declarations that are
--  provided for instantiating Xilinx primitive components.
--library UNISIM;
--use UNISIM.VComponents.all;

entity TEST1 is
    Port ( SW_IN : in std_logic;
           LED_OUT : out std_logic);
end TEST1;

architecture Behavioral of TEST1 is

begin
        LED_OUT <= SW_IN;

end Behavioral;
---

2004/04/24   6進カウンタ
引き続き、動作確認を兼ねて遊んでみましょう。
このハードの特徴をを何とかしてみたいところ。 ということで、正の文字で6進カウンタを作ってみました。 単に、1秒ごとにカウントアップするものです。
---
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

--  Uncomment the following lines to use the declarations that are
--  provided for instantiating Xilinx primitive components.
--library UNISIM;
--use UNISIM.VComponents.all;

entity COUNT6 is
    Port ( CLK72K : in std_logic;
           SG : out std_logic_vector(16 downto 0));
end COUNT6;

architecture RTL of COUNT6 is
        signal subclk : std_logic_vector(16 downto 0);
        signal n : std_logic_vector(2 downto 0);
        signal ce : std_logic;
begin
        process (CLK72K)
        begin
                if (CLK72K'event) and (CLK72K = '1') then
                        if subclk = 71999 then
                                subclk <= (others => '0');
                                ce <= '1';
                        else
                                subclk <= subclk + 1;
                                ce <= '0';
                        end if;
                end if;
        end process;

        process (CLK72K)
        begin
                if (CLK72K'event) and (CLK72K = '1') then
                        if ce = '1' then
                                if n = 5 then
                                        n <= (others =>'0');
                                else
                                        n <= n + 1;
                                end if;
                        end if;
                end if;
        end process;

        process (CLK72K, n)
        begin
                if (CLK72K'event) and (CLK72K = '1') then
                        case (n) is
                        when "000" => SG <= "01111111111111111";
                        when "001" => SG <= "11111111111111100";
                        when "010" => SG <= "11101110111111100";
                        when "011" => SG <= "11101010111111100";
                        when "100" => SG <= "11101010110111100";
                        when "101" => SG <= "11101010110001100";
                        when others => null;
                        end case;
                end if;
        end process;
end RTL;
---

2004/04/25   LED表示まわりを書き換えてみると
昨日作ったものではLED表示まわりを同期式にしていましたが、ハザードが出ても目には見えないので 書き換えてみました。具体的には
---
process (CLK72K, n)
begin
        if (CLK72K'event) and (CLK72K = '1') then
                case (n) is
                when "000" => SG <= "01111111111111111";
                when "001" => SG <= "11111111111111100";
                when "010" => SG <= "11101110111111100";
                when "011" => SG <= "11101010111111100";
                when "100" => SG <= "11101010110111100";
                when "101" => SG <= "11101010110001100";
                when others => null;
                end case;
        end if;
end process;
---
こう書いていたところを、
---
with n select
SG <=   "01111111111111111" when "000",
        "11111111111111100" when "001",
        "11101110111111100" when "010",
        "11101010111111100" when "011",
        "11101010110111100" when "100",
        "11101010110001100" when "101",
        "00000000000000000" when others;
---
このように変更。動作確認してみても、見た目には違いがわかりません。 が、レポートを見ると使っているレジスタ数がLEDの数だけ減っていて、効果があったことがわかります。

2004/04/30   階層設計
いつまでも一つのファイルでやっていくわけにはいかないでしょう、ということで、階層化を試してみました。
下位の階層の定義をもらってきて、componentとして記述します。 そういえば、Adaはこんな書き方だったような気がしてきました。ずっと昔、私が学生だった頃、Adaの授業が あって、半年ほど習ったのでした。Adaでも、手続きや関数の引数は書いた順番に対応づけるか、名前を指定して 対応づけることが可能です。それが、こんなところに出てくるとはな〜。
まあ、Adaを習った一番の収穫は、ランデブーの綴りがrendezvousなのを知ったことだと思いますが・・・
---
entity COUNT1F is
    Port ( PSW_A : in std_logic;
           PSW_B : in std_logic;
           CLK72K : in std_logic;
           SG : out std_logic_vector(16 downto 0));
end COUNT1F;

architecture RTL of COUNT1F is

component SYS_TIMING
    Port ( CLK : in std_logic;
               RST : in std_logic;
           CP_TAP_1024 : out std_logic);
end component;

signal CP_INPUT : std_logic;

begin
        U1:SYS_TIMING
                port map(
                        CLK => CLK72K,
                        RST => PSW_B,
                        CP_TAP_1024 => CP_INPUT);

---

ホーム 特殊工作室 作業日誌