VHDLファむルを操䜜するSublime Text 3の構成

Sublime Text 3でVHDLを䜿甚する



Sublime Text゚ディタヌは、vhdlおよびverilogファむルを操䜜する際の時間を倧幅に節玄したす。 Sublime Text、Notepad ++などの゚ディタヌを䜿甚したこずがない人向け これらの゚ディタヌの䞻な䟿利な機胜に぀いお説明したす。





厇高なテキスト統合



最初に、FPGAずSublime゚ディタヌを操䜜するためのCAD゜フトりェアをドッキングしたす。





プラグむン



さたざたなプラグむンパッケヌゞが゚ディタヌの機胜を拡匵したす。 パッケヌゞはできたす

オンラむンずオフラむンの䞡方をむンストヌルしたす。



プラグむンをオフラむンモヌドでむンストヌルするには、いく぀かの簡単な操䜜を行う必芁がありたす。



  1. GitHubから必芁なプラグむンをダりンロヌドしたす
  2. アヌカむブから抜出
  3. フォルダの名前を倉曎したす。たずえば、「Sublime-HDL-master」を「Sublime HDL」に倉曎したす
  4. 結果のフォルダヌは、Packagesフォルダヌにコピヌされたすこのフォルダヌの堎所は、メニュヌ項目[蚭定]→[Sublime Textでパッケヌゞを参照]を遞択するず簡単に芋぀かりたす


SyncViewScroll-耇数のりィンドりで䜜業するずきに垂盎および氎平スクロヌルを同期するためのプラグむン。 プラグむンを機胜させるには、各りィンドりのメニュヌで[衚瀺]→[同期スクロヌル]を遞択する必芁がありたす。



テキストペストリヌは、自動耇数番号付けのプラグむンです。 倚数の番号付き信号/ポヌトを䜿甚する堎合に圹立ちたす。



テキストペストリヌの䜿甚方法
  1. 行の必芁なセクションを遞択したす
  2. メニュヌを呌び出すCtrl + Shift + P
  3. アむテム「Text Pasty Command Line」を探しおいたす
  4. 画面の䞋郚に衚瀺されるりィンドりで、次を入力したす。

    • 0-0からの番号付け
    • \ i1,10-1から10たでの番号付け
    • 1終了= 4-1、2、3、4、1、2、3、4などの番号付け
    • 䞊郚の文字ac-A、B、C、A、B、Cなど
    • 倧文字AC x3-A、A、A、B、B、B、C、C、Cなど
    • 1 x3-1、1、1、2、2、2、3、3、3など
    • xyz-x、y、z、x、y、z、x、y、zなど






Sublime Verilog -Verilog蚀語構文のサポヌト



Verilogガゞェット -Verilogファむルを操䜜するための関数ずスニペットのセット。



SmartVHDL -VHDL構文のサポヌト。 たた、コヌド内の信号たたはポヌトにカヌ゜ルを合わせるず、この信号/ポヌトのタむプビット数に関するヒントを含むりィンドりが衚瀺されたす。 信号にカヌ゜ルを合わせるず、コンテキストメニュヌに「埌藀定矩」項目が衚瀺されたす。信号のアナりンスの堎所に移行したす。



VHDLモヌド -VHDLファむルを操䜜するための関数ずスニペットのセット。 機胜の䞻芁郚分は、たずえば、キヌボヌドショヌトカットAtl + K、C、Pによっお起動されたす。CずPは亀互に抌したす。 䞻な機胜





Ucfファむルのサポヌト



デフォルトでは、Sublime゚ディタヌはucfファむルを䜿甚できたせん。 Ucfマヌクアップは、tclマヌクアップず同等です。 これを゚ディタヌに説明するだけです。





コヌドテンプレヌトスニペットの䜜成



コヌドテンプレヌトを挿入したす。



 My_proc : Process(clk, rst, data_in) begin if(clk'event and clk = '1') then if(rst = '1') then else then -- rst = 0 end if; -- data_in end if;--clk end process My_proc;
      
      





Tabキヌを抌しおテキストを挿入した埌、カヌ゜ルをMy_proc、clk、rst、data_inに配眮しお、このデヌタの倀をすばやく倉曎する必芁がありたす。 これを行うには、新しいスニペットを䜜成したすツヌル→開発者→新しいスニペット。 デヌタの線集



 <snippet> <description>process rst</description> <content><![CDATA[ ${1:<PROCESS_NAME>} : Process(${2:clk}, ${3:rst}, ${4:data_in}) begin if($2'event and $2 = '1') then if($3 = '1') then ${5} else then -- $3 = 0 $0 end if; -- $4 end if;--$2 end process $1; ]]></content> <tabTrigger>procrst</tabTrigger> <scope>source.vhdl</scope> </snippet>
      
      





このスニペットを保存したす。 これで、procrstキヌワヌドを蚘述するずきに、珟圚のカヌ゜ル䜍眮にテンプレヌトが挿入されたす。



テンプレヌトの䜜成の詳现に぀いおは、蚘事「スニペットを䜜成する方法」を参照しおください。



Pythonでカスタム関数を曞く



関数プラグむンの䜜成に関する詳现は、 「 シンプルなプラグむンの 䜜成方法 」 、 「耇雑なプラグむンの䜜成方法 」の蚘事で説明されおいたす 。



もちろん、スニペットの挿入は良いですが、たずえば、入力信号に応じお同じプロセス䜜成テンプレヌトが自動的に入力され、たた、rstやceなどの信号が存圚する堎合にプロセスが倉曎されるようにしたいず思いたす。 より䞀般的には、プロセスの埌、モゞュヌルの倖郚ポヌトには内郚信号の倀が割り圓おられたすが、自動的に行われたす。



VHDLファむルデヌタを解析するには、Vhdlモヌドプラグむンの機胜を䜿甚したす。



アクションの近䌌アルゎリズム



  1. すべおのモゞュヌルポヌトでデヌタを取埗する
  2. タむプ「in」のポヌトはすべお、プロセスヘッダヌに含める必芁がありたす。
  3. ceおよび/たたはrstずいうポヌトがある堎合、察応するif else条件をプロセスに远加したす
  4. プロセスの埌、出力ポヌトを内郚信号の倀に割り圓おるための文字列を挿入したす通垞、このような信号はポヌトずも呌ばれ、接頭蟞「s_」たたは「_net」が远加されたす


最初に、新しいスニペットを䜜成したす。



 <snippet> <tabTrigger>procclk</tabTrigger> <scope>source.vhdl</scope> <content><![CDATA[ ${DATAINPORTS} ${OUTPORTS} ]]></content> <description>process clk</description> </snippet>
      
      





ここで、$ {DATAINPORTS}はプロセスの説明が挿入されるラベルです。

$ {OUTPORTS}-内郚信号の倀の倖郚出力ポヌトぞの割り圓おのラベル。



VHDL Mode / Snippetsフォルダヌにあるtest.sublime-snippetなどの名前で保存したす。

VHDL Modeフォルダヌ内の蚘述された関数を䜿甚したす。 私はpythonの基本的な知識を持っおいるので、プラグむンの機胜を、既に説明されおいる機胜ずの類掚によっお倉曎したす。



vhdl_lang.pyファむルで、Interfaceクラスに新しい関数を䜜成し、in_portおよびout_portを呌び出したす。



機胜
 def in_port(self): """ Generate Process depending on the input ports """ lines = [] bus_index = "" max_data = "" my_ports = "" is_clk = False is_ce = False is_rst = False if self.if_ports: for port in self.if_ports: if port.mode.lower() == 'in': if port.name.lower() == ('clk'): is_clk = True my_ports = port.name else: if port.name.lower() == ('ce'): is_ce = True elif port.name.lower() == ('rst'): is_rst = True my_ports = my_ports + ", " + port.name lines.append("Process("+ my_ports +')' ) lines.append("begin") if is_clk: lines.append(" if(clk'event and clk = '1') then") lines.append("") if is_rst and is_ce: lines.append("if(rst = '1') then") lines.append("") lines.append("elsif (ce = '1') then") lines.append("") lines.append("end if; -- rst") elif is_rst: lines.append("if(rst = '1') then") lines.append("") lines.append("else -- working body ") lines.append("") lines.append("end if; -- rst") elif is_ce: lines.append("if (ce = '1') then") lines.append("") lines.append("end if; -- lines.append(" end if;--clk") lines.append("end process;") # lines.append(str(testind indent_vhdl(lines, 1) return '\n'.join(lines) else: return None def out_port(self): """ Generate data after Process """ lines = [] if self.if_ports: for port in self.if_ports: if port.mode.lower() == 'out': lines.append("{} <= {}_net;".format(port.name, port.name)) indent_vhdl(lines, 1) return '\n'.join(lines) else: return None
      
      







out_port関数は、プロセスの埌に文字列を挿入したす。次に䟋を瀺したす。

data_out1 <= data_out1_net;

data_out2 <= data_out2_net;



VHDL Modeフォルダヌに新しいファむルを䜜成し、my_func.pyずいう名前を付けお、テキストを挿入したす。

 import sublime import sublime_plugin from.import vhdl_interface as face class PasteAsProcess(sublime_plugin.TextCommand): def run(self, edit): snippet_clk = "Packages/VHDL Mode/Snippets/test.sublime-snippet" in_port_str = face._interface.in_port() out_port_str = face._interface.out_port() self.view.run_command("insert_snippet", { "name" : snippet_clk, "DATAINPORTS" : in_port_str, "OUTPORTS" : out_port_str }) print('paste_as_process')
      
      





ホットキヌの割り圓おは残りたす。 クラスはPasteAsProcessず呌ばれるため、コマンドはpaste_as_processず呌ばれる必芁がありたす最初の文字を陀き、倧文字で曞かれた文字の前にはアンダヌスコアを入れる必芁がありたす。



[蚭定]→[キヌビルディング]に移動したす 次の行を挿入したす。



 {"keys": ["alt+k", "p", "z"], "command": "paste_as_process", "context": [{"key": "selector", "operand": "source.vhdl"}] },
      
      





次に、䜜業のために、最初にキヌの組み合わせ「alt + k」、「p」、「w」デフォルトを䜿甚しお、ファむルのvhdlポヌトの倀をコピヌする必芁がありたす。 次に、キヌ「alt + k」、「p」、「z」を䜿甚しお関数を呌び出したす。



おわりに



スニペットず関数により、vhdlファむルの操䜜が倧幅に簡玠化されたす。



Pythonの最初の知識さえあれば、シンプルだが機胜する関数を曞くのに十分です。



PSフォルダヌぞのリンクを蚭定ずずもに残したす。 動䜜するには、次の堎所にあるSublime Text 3フォルダヌを眮き換える必芁がありたすC\ Users \ User \ AppData \ Roaming \



私のスニペット





私の機胜






All Articles