Sublime Text 3ã§VHDLã䜿çšãã
Sublime Textãšãã£ã¿ãŒã¯ãvhdlããã³verilogãã¡ã€ã«ãæäœããéã®æéãå€§å¹ ã«ç¯çŽããŸãã Sublime TextãNotepad ++ãªã©ã®ãšãã£ã¿ãŒã䜿çšããããšããªã人åã ãããã®ãšãã£ã¿ãŒã®äž»ãªäŸ¿å©ãªæ©èœã«ã€ããŠèª¬æããŸãã
- ã³ãŒãè¡ã®è€æ°éžæ/ç·šéïŒããŠã¹ã®äžå€®ãã¿ã³ãæŒãããCtrlããŒãæŒããªããïŒ
- ã³ãŒãã«ã©ãã«ïŒããã¯ããŒã¯ïŒãèšå®ãããšã倧ããªãã¡ã€ã«ãããã²ãŒããããããªããŸãã ïŒCtrl + F2ãŸãã¯ã¡ãã¥ãŒé ç®ãžã£ã³ãâããã¯ããŒã¯ã䜿çšïŒ
- ã¯ãŒã¯ã¹ããŒã¹ãè€æ°ã®ãŠã£ã³ããŠã«åå²ããæ©èœïŒAlt + Shift + 2ãŸãã¯ã¡ãã¥ãŒã®è¡šç€ºâã¬ã€ã¢ãŠãããïŒ
- 1ã€ã®ãã¡ã€ã«ãæ°åéãïŒãã¡ã€ã«->ãã¡ã€ã«ãžã®æ°ãããã¥ãŒïŒ
- éžæããã³ãŒãè¡ãã³ã¡ã³ãã¢ãŠãïŒCtrl + /ïŒ
- æ€çŽ¢ãšçœ®æïŒCtrl + hïŒ
- éããŠãããã¹ãŠã®ãã¡ã€ã«ãæ€çŽ¢ïŒCtrl + Shift + fïŒ
- ã¹ããããïŒã³ãŒããã³ãã¬ãŒãïŒãæ¿å ¥ïŒããŒã¯ãŒã+ TabããŒãèšè¿°ïŒ
- Pythoné¢æ°ã®äœæãšäœ¿çš
- ããŸããŸãªã¢ããªã³ãã€ã³ã¹ããŒã«ããæ©èœ
- æè»ãªèšå®
åŽé«ãªããã¹ãçµ±å
æåã«ãFPGAãšSublimeãšãã£ã¿ãŒãæäœããããã®CADãœãããŠã§ã¢ããããã³ã°ããŸãã
- Sublime Textãšã¶ã€ãªã³ã¯ã¹ISEã®çµ±åïŒ
ISEã§ã¡ãã¥ãŒ[ç·šé]â[èšå®]â[ãšãã£ã¿ãŒ]ã«ç§»åããŸããããã¹ããšãã£ã¿ãŒâãšãã£ã¿ãŒ=ã«ã¹ã¿ã
ãã³ãã³ãã©ã€ã³æ§æããŠã£ã³ããŠã«è¡ãæ¿å ¥ããŸãã
{C:\Program Files\Sublime Text 3\sublime_text.exe} $1
- Sublime TextãšXilinx Vivadoã®çµ±åïŒ
ããŒã«->ãªãã·ã§ã³->ããã¹ããšãã£ã¿ãŒ->çŸåšã®ãšãã£ã¿ãŒïŒSublime
ãŸãã¯
ããŒã«->ãªãã·ã§ã³->ããã¹ããšãã£ã¿ãŒ->çŸåšã®ãšãã£ã¿ãŒïŒã«ã¹ã¿ã ãšãã£ã¿ãŒ
ãšãã£ã¿ãŒãžã®ãã¹ãæå®ããŸãã次ã«äŸã瀺ããŸãã
C:\Program Files\Sublime Text 3\sublime_text.exe [file name]
ãã©ã°ã€ã³
ããŸããŸãªãã©ã°ã€ã³ïŒããã±ãŒãžïŒããšãã£ã¿ãŒã®æ©èœãæ¡åŒµããŸãã ããã±ãŒãžã¯ã§ããŸã
ãªã³ã©ã€ã³ãšãªãã©ã€ã³ã®äž¡æ¹ãã€ã³ã¹ããŒã«ããŸãã
ãã©ã°ã€ã³ããªãã©ã€ã³ã¢ãŒãã§ã€ã³ã¹ããŒã«ããã«ã¯ãããã€ãã®ç°¡åãªæäœãè¡ãå¿ èŠããããŸãã
- GitHubããå¿ èŠãªãã©ã°ã€ã³ãããŠã³ããŒãããŸã
- ã¢ãŒã«ã€ãããæœåº
- ãã©ã«ãã®ååãå€æŽããŸããããšãã°ããSublime-HDL-masterãããSublime HDLãã«å€æŽããŸã
- çµæã®ãã©ã«ããŒã¯ãPackagesãã©ã«ããŒã«ã³ããŒãããŸãïŒãã®ãã©ã«ããŒã®å Žæã¯ãã¡ãã¥ãŒé ç®[èšå®]â[Sublime Textã§ããã±ãŒãžãåç §]ãéžæãããšç°¡åã«èŠã€ãããŸãïŒ
SyncViewScroll-è€æ°ã®ãŠã£ã³ããŠã§äœæ¥ãããšãã«åçŽããã³æ°Žå¹³ã¹ã¯ããŒã«ãåæããããã®ãã©ã°ã€ã³ã ãã©ã°ã€ã³ãæ©èœãããã«ã¯ãåãŠã£ã³ããŠã®ã¡ãã¥ãŒã§[衚瀺]â[åæã¹ã¯ããŒã«]ãéžæããå¿ èŠããããŸãã
ããã¹ããã¹ããªãŒã¯ãèªåè€æ°çªå·ä»ãã®ãã©ã°ã€ã³ã§ãã å€æ°ã®çªå·ä»ãä¿¡å·/ããŒãã䜿çšããå Žåã«åœ¹ç«ã¡ãŸãã
ããã¹ããã¹ããªãŒã®äœ¿çšæ¹æ³
- è¡ã®å¿ èŠãªã»ã¯ã·ã§ã³ãéžæããŸã
- ã¡ãã¥ãŒãåŒã³åºãCtrl + Shift + P
- ã¢ã€ãã ãText Pasty Command Lineããæ¢ããŠããŸã
- ç»é¢ã®äžéšã«è¡šç€ºããããŠã£ã³ããŠã§ã次ãå
¥åããŸãã
- 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ããŒã¯ã¢ãããšåçã§ãã ããããšãã£ã¿ãŒã«èª¬æããã ãã§ãã
- ããã±ãŒãžãã©ã«ããŒã«æ°ããTcl.sublime-settingsãã¡ã€ã«ãäœæããŸã
- ãã¡ã€ã«ã«è¡ãå
¥åããŸã
{"extensions" : ["ucf"]}
- ãã¡ã€ã«ãä¿å
ã³ãŒããã³ãã¬ãŒãïŒã¹ããããïŒã®äœæ
ã³ãŒããã³ãã¬ãŒããæ¿å ¥ããŸãã
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ã¢ãŒããã©ã°ã€ã³ã®æ©èœã䜿çšããŸãã
ã¢ã¯ã·ã§ã³ã®è¿äŒŒã¢ã«ãŽãªãºã ïŒ
- ãã¹ãŠã®ã¢ãžã¥ãŒã«ããŒãã§ããŒã¿ãååŸãã
- ã¿ã€ããinãã®ããŒãã¯ãã¹ãŠãããã»ã¹ããããŒã«å«ããå¿ èŠããããŸãã
- ceããã³/ãŸãã¯rstãšããããŒããããå Žåã察å¿ããif elseæ¡ä»¶ãããã»ã¹ã«è¿œå ããŸã
- ããã»ã¹ã®åŸãåºåããŒããå éšä¿¡å·ã®å€ã«å²ãåœãŠãããã®æååãæ¿å ¥ããŸãïŒéåžžããã®ãããªä¿¡å·ã¯ããŒããšãåŒã°ããæ¥é èŸã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 \
ç§ã®ã¹ããããïŒ
- sintïŒä¿¡å·æŽæ°ïŒãsstdãsvector-察å¿ããã¿ã€ãã®ä¿¡å·èšè¿°ãã³ãã¬ãŒã
- ibufãibufdsãªã©ã -ãããã¡ã®èª¬æ
- generichelp-ãžã§ããªãã¯ãæ£ããé©çšããæ¹æ³ã®ãã³ãã®äŸ
- teststdãtestvectorãªã©ã -é©åãªããŒã¿åã®ãã¹ããã³ãã®ããã»ã¹
- procclkãprocceãprocrst-ã·ã°ãã«clkãceãrstã䜿çšããããã»ã¹
- clkãnetãinst-UCFãã¡ã€ã«ã®ãã³ãã¬ãŒã
ç§ã®æ©èœïŒ
- Alt + KãCãPïŒããŒãã®ã³ããŒïŒãAlt + KãPãZã®ãã€ã³ã-ãã®èšäºã§èª¬æãããŠããããã»ã¹ãæ¿å ¥ããŸã
- Alt + KãCãPïŒããŒãã®ã³ããŒïŒãAlt + KãPãTïŒãã¹ããã³ãã®è²Œãä»ãïŒã®ãã€ã³ã-VHDL MODEãã©ã°ã€ã³ã®æ©èœãããçŽãããã¹ãŠã®å ¥åä¿¡å·ã®ãã¹ãããã»ã¹ãçæãããããã«ãªããŸãã