guruguru123’s diary

かなり雑な作業日記です。

コマンド受付機構の改良

DDSやADコンバータ、DAコンバータの駆動回路を統合するために、コマンドを増やす作業が必要になった。コマンドはRS232_C通信で送っているが、今までは送信、受信ともにデータを16進数として内部で処理をしており、文字列解釈の記述量が多くなってしまっていた。

そこで、新しいデータタイプを作ってうまく処理をし、記述量を減らせないかと考えた。

type ascii is ('1','2','3','4','5','6','7','8','9','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z',':','?','!','-');

type ascii_vector is array (Natural range <>)of ascii;

というようにasciiというユーザ定義のデータタイプと、それのベクタであるascii_vectorを作った。

しかし、これをモジュールファイルに書き込んだのでは入出力で用いることができなかった。そこで、これを記述したパッケージを作って対応した。パッケージファイルの中身は以下の通り。

f:id:guruguru123:20171223230217p:plain

これをモジュール内で有効にするにはライブラリworkと作成したパッケージをuseで宣言しなければならない。

library work;
use work.ascii_pac.all;

これをトップモジュールと有効にしたいモジュールに記述するとユーザ定義のデータタイプを使うことができる。

これを用いることで送信の際の文字列指定が容易になった。これを元にコマンドを増やしていく。コマンドは以下のステートに追加するだけでよい。

f:id:guruguru123:20171226165144p:plain