後輩に電磁気教えたら中間テストで満点を採ったらしくとても気分がいいです。
てか教えてた俺よりいいじゃねぇかwww
スペックの差でしょうか??
まぁ伸びしろが大きい子なのでそれほど驚きませんでしたが(まっ負け惜しみなんかじゃないんだからね。・゚・(ノД`)・゚・。

そして動かなかったロード命令も無事動作し、二重で気分がいいです^^

予定より1週間遅れているのは秘密♡

とはいえ、研究がちょっと一段落ついたんで、VHDLをやっているとつまずく、
signal、variableとprocess文について簡単にまとめてみようと思います。

processは逐次処理とよく言われますがちょっと微妙です。例えば

---
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity test is
Port (
clk_i : in STD_LOGIC;
test_o : out STD_LOGIC);
end test;

architecture Behavioral of ControlUnit is
signal sig_A,sig_B,sig_C,sig_D : STD_LOGIC :='1';
begin

process(clk_i)
begin
if(clk_i'event and clk_i='1')
sig_A <= '0';
sig_B <= sig_A;
sig_C <= sig_B;
sig_D <= sig_C;
end if;
test_o <= sig_C;
end process;
end Behavioral;
--

と書いたとします。C言語の感覚では「test_o」からはsig_Dの値、すなわち「'0'」の値が出力されるはずです、、、が違うのです。このコードをシミュレーションで実行してみるとtest_oからは常にsig_Dの初期値「’1’」が出力されているはずです。なぜでしょうか?
それは、process文は上から順に評価されて最後(end process;)に同時に値が代入されるからです。
評価というのは、「test_o <= sig_C;」の場合右側の項の事を指しています。「評価」という言葉がしっくりこないかもしれませんが、「+」や「-」の演算が右の項に入る事を思い出してもらえればしっくり来ると思います。
そのことを知らないと「process文でsignalの値がちゃんと変化しない!!」って事になってしまうわけです。

とは言え、このままではprocess文はとても不便です。

そこで、signal以外の型を使ってこの問題を解決しようと思います。自分が使っている「図解VHDL実習」にはsignalしか載っていませんでしたが、実はVHDLには、signal(信号)、variable(変数)、constant(定数)の3つの型が存在します。まずそれぞれについて簡単に説明します。

signal(信号)・・・architecturese宣言部で宣言され、グローバルな信号で中継用配線として用います。代入は『<=』で行います。
variable(変数)・・・process,function,procedure内で宣言し、その中でのみ有効となるローカルな変数で、コンパイル時に使用されるだけなので実回路とはなりません。代入は『:=』で行います。
constant(定数)・・・architecturese,function,procedure宣言部で宣言可能なグローバルな変数で途中で値の変更はできません代入は『:=』で行います。

習うより慣れろってことで、先ほどのコードをVariableを使って修正したものを↓に示します。

---ここから---
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity test is
Port (
clk_i : in STD_LOGIC;
test_o : out STD_LOGIC);
end test;

architecture Behavioral of ControlUnit is
begin

process(clk_i)
variable var_A,var_B,var_C,var_D : STD_LOGIC :='1';
begin
if(clk_i'event and clk_i='1')
var_A := '0';
var_B := var_A;
var_C := var_B;
var_D := var_C;
end if;
test_o <= sig_D;
end process;
end Behavioral;
---ここまで---

こうすれば「test_o」からは「'0'」が常に出力されると思います。
variableはsignalとは違い、値が即代入されますので、C言語の変数の感覚で使えると思います。
注意点としては宣言部がsignalとは違います。またvariableは宣言したprocess文内でしか使えませんので、variableの値を出力や保存しておきたい場合はsignalに入れとくかoutで出力させましょう。