【 Sublime Text 】如何使用Sublime Text快速生成代码模板

举报
李锐博恩 发表于 2021/07/15 01:49:54 2021/07/15
5.4k+ 0 0
【摘要】 目录 背景 实现 Verilog模板 参考文章 背景 写的代码多了,会发现几乎每次都要敲那几行代码,例如写三段式状态机,我们只需要改变下内容即可,外壳永远都是一样,有没有方法来快速生成这样的模板呢? 今天看到了这么一个快速生成模板的方法,记录下来,方便以后快速开发。 今天只是使用了sublime,这个软件的好处在于可以生成Verilog模块例化模板,如何做...

目录

背景

实现

Verilog模板

参考文章



背景

写的代码多了,会发现几乎每次都要敲那几行代码,例如写三段式状态机,我们只需要改变下内容即可,外壳永远都是一样,有没有方法来快速生成这样的模板呢?

今天看到了这么一个快速生成模板的方法,记录下来,方便以后快速开发。

今天只是使用了sublime,这个软件的好处在于可以生成Verilog模块例化模板,如何做呢?见这篇博客。(准备弃用notepad++)。


实现

工具:Sublime Text

具体操作:首先打开,工具 —— 插件开发 —— 新建代码片段

如果是英文版,则为:Tools > Developer(开发者选项) > new Snippet(新的代码块)

建立一个状态机模板:

触发命令为state_machine,也就是说,当输入state_machine时候,就会显示模板:

如下图:

tabTrigger 标签中是你的 触发命令,如我触发状态机模板的命令为:state_machine;

之后,在这里写入你的代码模板:

我的三段式状态机模板为:


      <snippet>
      	<content><![CDATA[
     		/*-----third stage state machine start------*/
     		//parameter define
      		parameter s0
     		//state variables define
      		reg [N - 1 : 0] cur_state, nxt_state;
     		//the first stage
      		always@(posedge clk or negedge rst_n) begin
     			if(~rst_n) cur_state <= 0;
     			else cur_state <= nxt_state;
      		end
     		//the second stage
      		always@(*) begin
      			nxt_state = s0;
     			case(cur_state)
       s0: begin
       end
       s1: begin
       end
      default: begin
       end
      			endcase
      		end
     		//the third stage
      		always@(*) begin
       if() begin
       end
       else if() begin
       end
       else begin
       end
       end
      ]]></content>
       <!-- Optional: Set a tabTrigger to define how to trigger the snippet -->
       <tabTrigger>state_machine</tabTrigger>
       <!-- Optional: Set a scope to limit where the snippet will trigger -->
       <!-- <scope>source.python</scope> -->
      </snippet>
  
 

Ctrl + S 保存文件,名称随意,但是文件后缀必须是 .sublime-snippet

这里命令为sm_template.sublime-snippet;

现在测试下效果如何?

先建立一个.v文件,之后输入sm_template,然后Enter或者Tab:

Enter得到如下:

甚为好用,甚为好用呀。

最后给出一个方便的技巧:

就是单独建立一个文件夹,用来存放模板文件。

这样方便重装软件时候,可以直接把此文件夹拷贝到新的安装文件夹中,方便继续使用模板。

Verilog模板

这里给出我定义的其他模板:

计数器:


      <snippet>
     	<content><![CDATA[
      		reg [N-1 : 0] counter;
      		always@(posedge clk or negedge rst_n) begin
      			if(~rst_n) counter <= 0;
      			else if()
      			else
      		end
      ]]></content>
     	<!-- Optional: Set a tabTrigger to define how to trigger the snippet -->
     	<tabTrigger>counter</tabTrigger>
     	<!-- Optional: Set a scope to limit where the snippet will trigger -->
     	<!-- <scope>source.python</scope> -->
      </snippet>
  
 

时序逻辑always块:


      <snippet>
     	<content><![CDATA[
      		always@(posedge clk or negedge rst_n) begin
      			if(~rst_n)
      			else if()
      			else
      		end
      ]]></content>
     	<!-- Optional: Set a tabTrigger to define how to trigger the snippet -->
     	<tabTrigger>always_time</tabTrigger>
     	<!-- Optional: Set a scope to limit where the snippet will trigger -->
     	<!-- <scope>source.python</scope> -->
      </snippet>
  
 

组合逻辑always块:


      <snippet>
     	<content><![CDATA[
      		always@(*) begin
      			//use if
      			if(~rst_n)
      			else if()
      			else
      			//use case
      			/*
      			case()
      			endcase
      			*/
      		end
      ]]></content>
     	<!-- Optional: Set a tabTrigger to define how to trigger the snippet -->
     	<tabTrigger>always_com</tabTrigger>
     	<!-- Optional: Set a scope to limit where the snippet will trigger -->
     	<!-- <scope>source.python</scope> -->
      </snippet>
  
 

低电平复位之异步复位,同步释放电路:


      <snippet>
     	<content><![CDATA[
      		//Asynchronous reset, synchronous release
      		reg rstn_r0, rstn_out;
      		always@(posedge clk or negedge rst_n) begin
      			if(~rst_n) begin
       rstn_r0 <= 0;
       rstn_out <= 0;
      			end
      			else begin
       rstn_r0 <= 1;
       rstn_out <= rstn_r0;
      			end
      		end
      ]]></content>
     	<!-- Optional: Set a tabTrigger to define how to trigger the snippet -->
     	<tabTrigger>rstn</tabTrigger>
     	<!-- Optional: Set a scope to limit where the snippet will trigger -->
     	<!-- <scope>source.python</scope> -->
      </snippet>
  
 

高电平复位之异步复位,同步释放电路:


      <snippet>
     	<content><![CDATA[
      		//Asynchronous reset, synchronous release
      		reg reset_r0, reset_out;
      		always@(posedge clk or posedge reset) begin
      			if(reset) begin
       reset_r0 <= 1;
       reset_out <= 1;
      			end
      			else begin
       reset_r0 <= 0;
       reset_out <= reset_r0;
      			end
      		end
      ]]></content>
     	<!-- Optional: Set a tabTrigger to define how to trigger the snippet -->
     	<tabTrigger>reset</tabTrigger>
     	<!-- Optional: Set a scope to limit where the snippet will trigger -->
     	<!-- <scope>source.python</scope> -->
      </snippet>
  
 

testbench文件模板:


      <snippet>
     	<content><![CDATA[
      		//Parameter define
      		parameter PERIOD = ;
      		// Input placed by reg
      		reg clk;
      		//Output placed by wire
      		//Clock Generate
      		initial begin
      			clk = 0;
      			forever
       #(PERIOD/2) clk = ~clk;
      		end
      		//Input Design
      		initial begin
      		end
      		//Module Instantiation
      		MODULE_NAME inst_ ();
      ]]></content>
     	<!-- Optional: Set a tabTrigger to define how to trigger the snippet -->
     	<tabTrigger>testbench</tabTrigger>
     	<!-- Optional: Set a scope to limit where the snippet will trigger -->
     	<!-- <scope>source.python</scope> -->
      </snippet>
  
 

其他的模板习惯,大家自己定义,暂时就给出这几个比较常用的。

参考文章

Sublime 快速生成代码模板

Sublime Text3 自定义快速生成代码

文章来源: reborn.blog.csdn.net,作者:李锐博恩,版权归原作者所有,如需转载,请联系作者。

原文链接:reborn.blog.csdn.net/article/details/102553985

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

作者其他文章

评论(0

抱歉,系统识别当前为高风险访问,暂不支持该操作

    全部回复

    上滑加载中

    设置昵称

    在此一键设置昵称,即可参与社区互动!

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。