芯有所想

精益求精

基本工具

除了EDA工具之外,以下是自己比较常用的工具。

python

python快速上手,可读性非常好,拥有极其丰富的库,完成复杂的任务只需要很少的代码。在文本处理,自动化工具设计,整合流程中用处很大。 python的jinja2模板用途很广泛,让工作事半功倍。

1
2
#打印2进制字符串
print bin(456)[2:]

Emacs

verilog-mode

emacs拥有 verilog-mode, 让verilog/sysverilog编写便捷了很多; emacs写python程序对齐也是非常完美。

1
2
3
4
5
6
7
8
9
10
11
module top(/*AUTOARG*/);
  /*AUTOWIRE*/
  /*AUTOREG*/

  always_comb begin
  /*AUTORESET*/
  end

  sub sub(/*AUTOINST*/)

endmodule

Typora

Typora是目前最好的markdown编辑器,支持导出latex,pdf,html,word等各种格式,是最强大的markdown编辑器。加上超级优秀的VOOK插件,是工程师文档写作的最佳选择之一。现在我写文档基本上不用word,而是用typora写markdown,同时用git做版本管理。

Git

git是我使用过的最佳的版本工具,在项目管理上,使用难度上要大于svn,因此很多公司依然使用svn做硬件开发的版本管理工具。因为SVN是集中式管理,管控上相对容易一些。git实际上功能更强大,更灵活,因此个人svn和git都会使用。不得不用svn的地方,就按照要求使用svn,local或者自定义的项目中,都是用git做版本管理。

org-mode

用org-mode写文档,可以生成HTML、pdf,ppt效果的pdf,由于是文本文件,可以做版本管理。是一个非常好的写作选择。(由于有了typora, org-mode现在也不怎么使用了,转到typora的markdown)

技巧和经验点滴

设置 utf-8编码

  1. 查看当前buffer的编码:M-x describe-coding-system
  2. \C-x r 列出所有编码
  3. 以指定编码重读当前buffer: \C-x r utf-8 (revert-buffer-with-coding-system)
  4. 改变当前buffer的编码: \C-x f uft-8 (set-buffer-file-coding-system)

gvim

最开始我使用的是gvim,后来学习了emacs的verilog-mode之后,就不怎么使用gvim了。 由于gvim启动速度比emacs快,当前gvim主要用来查看文件。

planUML

用文字描述,生成图形,包括流程图,状态机,架构图,类图等。其中时序图,甘特图的正在测试阶段。

gap

gap是一个免费的数学软件,支持抽象代数计算。用来做群/域的编程很方便。我曾经用gap实现了BCH和Reed-Solomon算法建模,非常直观清晰。因为gap在语言层面上支持GF域的数据类型,可以直接运算。 在gap建模基础上,完成RTL,加快了设计流程。如下示例用来求BCH的生成多项式gx.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
nbitsOfRedundent := function(t)
    local phi, i, j, n_k, gx;
    phi := [];;
    for i in [1,3..2*t-1] do
        phi[i] := MinimalPolynomial(GF(2), a^i);;
        j := i;;
        while j <= 2*t do
            phi[j] := phi[i];;
            j := j*2;;
        od;
    od;
    gx := Lcm(phi);; # 生成多项式
    n_k := DegreeIndeterminate(gx, x);;
    Print("BCH Encoder: n-k=", n_k, "(", n_k/8.0,")Bytes", " t=", t, "\n");
    return(n_k);
end;