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

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

目录

背景

实现

Verilog模板

参考文章



背景

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

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

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


实现

工具:Sublime Text

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

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

建立一个状态机模板:

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

如下图:

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

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

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


  
  1. <snippet>
  2. <content><![CDATA[
  3. /*-----third stage state machine start------*/
  4. //parameter define
  5. parameter s0
  6. //state variables define
  7. reg [N - 1 : 0] cur_state, nxt_state;
  8. //the first stage
  9. always@(posedge clk or negedge rst_n) begin
  10. if(~rst_n) cur_state <= 0;
  11. else cur_state <= nxt_state;
  12. end
  13. //the second stage
  14. always@(*) begin
  15. nxt_state = s0;
  16. case(cur_state)
  17. s0: begin
  18. end
  19. s1: begin
  20. end
  21. default: begin
  22. end
  23. endcase
  24. end
  25. //the third stage
  26. always@(*) begin
  27. if() begin
  28. end
  29. else if() begin
  30. end
  31. else begin
  32. end
  33. end
  34. ]]></content>
  35. <!-- Optional: Set a tabTrigger to define how to trigger the snippet -->
  36. <tabTrigger>state_machine</tabTrigger>
  37. <!-- Optional: Set a scope to limit where the snippet will trigger -->
  38. <!-- <scope>source.python</scope> -->
  39. </snippet>

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

这里命令为sm_template.sublime-snippet;

现在测试下效果如何?

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

Enter得到如下:

甚为好用,甚为好用呀。

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

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

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

Verilog模板

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

计数器:


  
  1. <snippet>
  2. <content><![CDATA[
  3. reg [N-1 : 0] counter;
  4. always@(posedge clk or negedge rst_n) begin
  5. if(~rst_n) counter <= 0;
  6. else if()
  7. else
  8. end
  9. ]]></content>
  10. <!-- Optional: Set a tabTrigger to define how to trigger the snippet -->
  11. <tabTrigger>counter</tabTrigger>
  12. <!-- Optional: Set a scope to limit where the snippet will trigger -->
  13. <!-- <scope>source.python</scope> -->
  14. </snippet>

时序逻辑always块:


  
  1. <snippet>
  2. <content><![CDATA[
  3. always@(posedge clk or negedge rst_n) begin
  4. if(~rst_n)
  5. else if()
  6. else
  7. end
  8. ]]></content>
  9. <!-- Optional: Set a tabTrigger to define how to trigger the snippet -->
  10. <tabTrigger>always_time</tabTrigger>
  11. <!-- Optional: Set a scope to limit where the snippet will trigger -->
  12. <!-- <scope>source.python</scope> -->
  13. </snippet>

组合逻辑always块:


  
  1. <snippet>
  2. <content><![CDATA[
  3. always@(*) begin
  4. //use if
  5. if(~rst_n)
  6. else if()
  7. else
  8. //use case
  9. /*
  10. case()
  11. endcase
  12. */
  13. end
  14. ]]></content>
  15. <!-- Optional: Set a tabTrigger to define how to trigger the snippet -->
  16. <tabTrigger>always_com</tabTrigger>
  17. <!-- Optional: Set a scope to limit where the snippet will trigger -->
  18. <!-- <scope>source.python</scope> -->
  19. </snippet>

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


  
  1. <snippet>
  2. <content><![CDATA[
  3. //Asynchronous reset, synchronous release
  4. reg rstn_r0, rstn_out;
  5. always@(posedge clk or negedge rst_n) begin
  6. if(~rst_n) begin
  7. rstn_r0 <= 0;
  8. rstn_out <= 0;
  9. end
  10. else begin
  11. rstn_r0 <= 1;
  12. rstn_out <= rstn_r0;
  13. end
  14. end
  15. ]]></content>
  16. <!-- Optional: Set a tabTrigger to define how to trigger the snippet -->
  17. <tabTrigger>rstn</tabTrigger>
  18. <!-- Optional: Set a scope to limit where the snippet will trigger -->
  19. <!-- <scope>source.python</scope> -->
  20. </snippet>

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


  
  1. <snippet>
  2. <content><![CDATA[
  3. //Asynchronous reset, synchronous release
  4. reg reset_r0, reset_out;
  5. always@(posedge clk or posedge reset) begin
  6. if(reset) begin
  7. reset_r0 <= 1;
  8. reset_out <= 1;
  9. end
  10. else begin
  11. reset_r0 <= 0;
  12. reset_out <= reset_r0;
  13. end
  14. end
  15. ]]></content>
  16. <!-- Optional: Set a tabTrigger to define how to trigger the snippet -->
  17. <tabTrigger>reset</tabTrigger>
  18. <!-- Optional: Set a scope to limit where the snippet will trigger -->
  19. <!-- <scope>source.python</scope> -->
  20. </snippet>

testbench文件模板:


  
  1. <snippet>
  2. <content><![CDATA[
  3. //Parameter define
  4. parameter PERIOD = ;
  5. // Input placed by reg
  6. reg clk;
  7. //Output placed by wire
  8. //Clock Generate
  9. initial begin
  10. clk = 0;
  11. forever
  12. #(PERIOD/2) clk = ~clk;
  13. end
  14. //Input Design
  15. initial begin
  16. end
  17. //Module Instantiation
  18. MODULE_NAME inst_ ();
  19. ]]></content>
  20. <!-- Optional: Set a tabTrigger to define how to trigger the snippet -->
  21. <tabTrigger>testbench</tabTrigger>
  22. <!-- Optional: Set a scope to limit where the snippet will trigger -->
  23. <!-- <scope>source.python</scope> -->
  24. </snippet>

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

参考文章

Sublime 快速生成代码模板

Sublime Text3 自定义快速生成代码

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

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

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

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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