基板全景
プリアンプ基板
電源基板
そういえば、操作表示部とFPGA基板との接続について紹介していないことに気がつきました。2つの基板の間は4本の信号線(とアース線)で接続しています。
操作表示部 SCLK端子 → FPGA 10ピン(SCLKIN)
操作表示部 SD端子 → FPGA 17ピン(SDATAIN)
操作表示部 EN端子 → FPGA 28ピン(SENIN)
操作表示部 RD端子 → FPGA 30ピン(SDATAOUT)
次にFPGAのVHDLソースです。もともと受信周波数の設定値(定数)が書かれていた const.vhdを次のように書き換えています。ここでは操作表示部から渡されたシリアルデータをシリパラ変換し、const_out として上位のモジュールに渡します。あと、FPGAからIQ信号を操作表示部に渡そうとしているんですが、これは動作確認していません。ちなみに、このVHDLソースは、Verilogで書いたものをVrilog-VHDL translatorを利用して作成しました。私のVerilogソースがいい加減だったらしく、変換後のソースに手を入れる必要がありました。
・・・半年以上たつと、改めてソースを見ても何を書いていたんだか忘れてしまっていますね。
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
entity const is
port(
SCLKIN : in std_logic; -- Serial Clock
SDATAIN : in std_logic; -- Serial Data
SENIN : in std_logic; -- Serial Data Enable
IFIN : in std_logic_vector(17 downto 0); -- IF(I)
IFIN2 : in std_logic_vector(17 downto 0); -- IF(Q)
OTR_LED : in std_logic;
ST_LED : in std_logic;
CLK : in std_logic;
RST : in std_logic;
SDATAOUT : out std_logic;
const_out : out std_logic_vector(27 downto 0)); -- Frequency Set
end;
architecture Behavioral of const is
signal qr : std_logic_vector(15 downto 0);
signal spc_stat : std_logic_vector(1 downto 0);
signal SCLKIN2 : std_logic;
signal SDATAIN2 : std_logic;
signal SENIN2 : std_logic;
signal qs : std_logic_vector(31 downto 0);
signal psc_stat : std_logic_vector(1 downto 0);
signal const_out_int: std_logic_vector(27 downto 0);
begin
v2v_pr_0:process (CLK)
begin
if (CLK'event and CLK = '1') then
if (RST = '1') then
SCLKIN2 <= '0';
SDATAIN2 <= '0';
SENIN2 <= '0';
else
SCLKIN2 <= SCLKIN;
SDATAIN2 <= SDATAIN;
SENIN2 <= SENIN;
end if;
end if;
end process;
v2v_pr_1:process (CLK)
begin
if (CLK'event and CLK = '1') then
if (RST = '1') then
qr <= "0000000000000000";
spc_stat <= "00";
const_out_int <= X"119C71C";
elsif (SENIN2 = '1') then
if (spc_stat = "10") then
spc_stat <= "00";
end if;
if (SCLKIN2 = '1') then
if (spc_stat = "00") then
qr <= qr(14 downto 0) & SDATAIN2;
spc_stat <= "01";
end if;
else
spc_stat <= "00";
end if;
else
if (spc_stat = "00") then
if (qr = X"0000") then
const_out_int <= X"119C71C"; -- 82.5MHz
else
const_out_int <= (qr & X"000");
end if;
spc_stat <= "10";
qr <= "0000000000000000";
end if;
end if;
end if;
end process;
const_out <= const_out_int;
v2v_pr_2:process (CLK)
begin
if (CLK'event and CLK = '1') then
if (RST = '1') then
qs <= X"00000000";
psc_stat <= "00";
elsif (SENIN2 = '1') then
if (SCLKIN2 = '1') then
if (psc_stat = "00") then
psc_stat <= "10";
end if;
if (psc_stat = "01") then
qs <= (qs(30 downto 0) & '0');
psc_stat <= "10";
end if;
else
if (psc_stat = "10") then
psc_stat <= "01";
end if;
end if;
else
if (psc_stat = "01") then
qs <= (OTR_LED & ST_LED & IFIN(17 downto 3) & IFIN2(17 downto 3));
psc_stat <= "00";
end if;
end if;
end if;
end process;
SDATAOUT <= qs(31);
end Behavioral;
const と上位モジュールとの接続(ispLEVERの例)
追加した入出力端子をユーザ制約に追加(ispLEVERの例)
0 件のコメント:
コメントを投稿