0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

ずっとFPGA初心者(その18):JKフリップフロップ(4)

Posted at

回路図からVHDLコードを作成

こちらの記事「ずっとFPGA初心者(その16):JKフリップフロップ(2)」にて、Quartusでは回路図エディタからVHDLコードを作成できるとのコメントを、有識者から頂いたので、その内容を記す。

参考URL

JKフリップフロップ(再掲)

image.png

自作コード(再掲)

JK.vhd
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)を作成する。
New.png
BDF.png

SymbolToolを選択し、
SymbolTool.png
ANDなどのロジック(primitives内にある)や入出力ライン(信号線)を適宜選択する。
and2.png
InOut.png
信号線の追加は、Node Toolなどを用いる。
NodeTool2.png

作成した回路図

Schematics.png

VHDLへの変換

「Create HDL Design File from Current File」をクリックし、
CreateHDL.png
VHDLを選択する。
SelectVHDL.png
作成されたコードは下記となる(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

0
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?