回路図からVHDLコードを作成
こちらの記事「ずっとFPGA初心者(その16):JKフリップフロップ(2)」にて、Quartusでは回路図エディタからVHDLコードを作成できるとのコメントを、有識者から頂いたので、その内容を記す。
参考URL
JKフリップフロップ(再掲)
自作コード(再掲)
library ieee;
use ieee.std_logic_1164.all;
entity JK is
port (CLK, J, K : in std_logic; -- ①
Q, Qbar : out std_logic); -- ②
end;
architecture RTL of JK is
signal out1 : std_logic := '0'; -- ③
signal out2 : std_logic := '0';
signal out3 : std_logic := '1';
signal out4 : std_logic := '0';
begin
process (CLK)
begin
if (rising_edge(CLK)) then -- ④
out1 <= J and out3;
out2 <= K and out4;
-- out3 <= not(out1 or out4); -- does not work -- ⑤
-- out4 <= not(out2 or out3); -- does not work
end if;
end process;
out3 <= not(out1 or out4); -- ⑥
out4 <= not(out2 or out3);
Q <= out4;
Qbar <= out3;
end RTL;
回路図エディタ
基本操作
新しいProjectを作成後、回路図ファイル(拡張子bdf)を作成する。
SymbolToolを選択し、
ANDなどのロジック(primitives内にある)や入出力ライン(信号線)を適宜選択する。
信号線の追加は、Node Toolなどを用いる。
作成した回路図
VHDLへの変換
「Create HDL Design File from Current File」をクリックし、
VHDLを選択する。
作成されたコードは下記となる(Copyright記述は省略)。
-- PROGRAM "Quartus Prime"
-- VERSION "Version 20.1.1 Build 720 11/11/2020 SJ Lite Edition"
-- CREATED "Sun Aug 21 09:37:41 2022"
LIBRARY ieee;
USE ieee.std_logic_1164.all;
LIBRARY work;
ENTITY Circ1 IS
PORT
(
J : IN STD_LOGIC;
CLK : IN STD_LOGIC;
K : IN STD_LOGIC;
Q : OUT STD_LOGIC;
Qbar : OUT STD_LOGIC
);
END Circ1;
ARCHITECTURE bdf_type OF Circ1 IS
SIGNAL SYNTHESIZED_WIRE_8 : STD_LOGIC;
SIGNAL SYNTHESIZED_WIRE_1 : STD_LOGIC;
SIGNAL SYNTHESIZED_WIRE_2 : STD_LOGIC;
SIGNAL SYNTHESIZED_WIRE_9 : STD_LOGIC;
SIGNAL SYNTHESIZED_WIRE_5 : STD_LOGIC;
SIGNAL SYNTHESIZED_WIRE_6 : STD_LOGIC;
BEGIN
Q <= SYNTHESIZED_WIRE_9;
Qbar <= SYNTHESIZED_WIRE_8;
SYNTHESIZED_WIRE_1 <= J AND CLK;
SYNTHESIZED_WIRE_2 <= CLK AND K;
SYNTHESIZED_WIRE_5 <= SYNTHESIZED_WIRE_8 AND SYNTHESIZED_WIRE_1;
SYNTHESIZED_WIRE_6 <= SYNTHESIZED_WIRE_2 AND SYNTHESIZED_WIRE_9;
SYNTHESIZED_WIRE_8 <= NOT(SYNTHESIZED_WIRE_9 OR SYNTHESIZED_WIRE_5);
SYNTHESIZED_WIRE_9 <= NOT(SYNTHESIZED_WIRE_6 OR SYNTHESIZED_WIRE_8);
END bdf_type;
回路図を忠実にコード化したものとなっている。
ただし、当然のことながら、CLKは単なる入力信号となっており、立ち上がりなどが考慮されたコードにはならない(上記自作コード参照)。センシティビティリストや条件を考慮したコードが必要なのであろう。もっと賢くならないと、まともなものにならない、、ということを痛感したシロートであった。
EOF