AHDLからVerilog-HDLへの移植

 AHDLとはALTERA-HDLの略でALTERA社のPLD(FPGA)用のHDL言語だ。ベンダーローカルな言語であるにもかかわらずFPGA業界のなかではかなりのシェアをしめているので結構広く使われている。

 AHDLで記述された回路を他のアーキテクチャ(ゲートアレイとか)に移すためにはALTERAのPLDに落としてからEDIFをSynopsys社のDesign_Compiler等でネットリスト変換する方法とAHDLをVHDLやVerilog-HDL等のHDLに移植してから改めて合成する方法がある。  前者の方法は簡単ではあるものの回路の動作が予測できなかったり、回路内でクロックを分周するなどしてクロックを生成していると内部クロックに対してクロック指定出来ないなどで性能を出しにくい。後者の方法では移植の手間はかかるものの回路の内部動作が追いやすいために最終的なチップの性能は出し易い。  どちらを選ぶかは納期などの状況に応じて異なる。

 もっとも試作の段階ではじめっからVHDLやVerilog-HDLで書いてくれればなんの問題も無いのであるが(ていうか書いてくれ、たのむから)

 VHDLやVerilog等とABLEやAHDLが大きく異なる点は「ラッチやフリップフロップ」などを動作を記述することによって実現するか、直接特定の変数に順序回路の素子である事を宣言することにより実現するかの違いである。ABLEやAHDLはどちらかと言えば順序回路周辺においてネットリスト的な記述であるといえるかもしてない。

 そうそう、AHDLのレジスタはset/reset端子が負論理である点に注意。
 

---- AHDL ----

SUBDESIGN dff
(
    clk, reset, din : input;
    dout : output;
)
VARIABLE
    ff : DFF;

BEGIN
    ff.clk = clk;
    ff.clrn = reset;
    ff.d = din;
    dout = ff.q;
END;
---- VHDL ----

library IEEE;
use IEEE.std_logic_1164.all;

entity DFF is
  
  port (
    CLK, RESET, DIN : in  std_logic;
    DOUT            : out std_logic);

end DFF;

architecture RTL of DFF is

begin  -- RTL

  DFF: process (CLK, RESET)
  begin  -- process DFF
    if RESET <= '0' then
      DOUT <= '0';
    elsif CLK'event and CLK='1' then
      DOUT <= DIN;
    end if;
  end process DFF;

end RTL;
---- Verilog-HDL ----

module dff (clk, reset, din, dout);
  input clk, reset, din;
  output dout;

  reg dout;

  always @(posedge clk or negedge reset)
    if (!reset)
      dout <= 0;
    else
      dout <= din;

endmodule

もどる