精益求精
除了EDA工具之外,以下是自己比较常用的工具。
python快速上手,可读性非常好,拥有极其丰富的库,完成复杂的任务只需要很少的代码。在文本处理,自动化工具设计,整合流程中用处很大。 python的jinja2模板用途很广泛,让工作事半功倍。
1
2
#打印2进制字符串
print bin(456)[2:]
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是目前最好的markdown编辑器,支持导出latex,pdf,html,word等各种格式,是最强大的markdown编辑器。加上超级优秀的VOOK插件,是工程师文档写作的最佳选择之一。现在我写文档基本上不用word,而是用typora写markdown,同时用git做版本管理。
git是我使用过的最佳的版本工具,在项目管理上,使用难度上要大于svn,因此很多公司依然使用svn做硬件开发的版本管理工具。因为SVN是集中式管理,管控上相对容易一些。git实际上功能更强大,更灵活,因此个人svn和git都会使用。不得不用svn的地方,就按照要求使用svn,local或者自定义的项目中,都是用git做版本管理。
用org-mode写文档,可以生成HTML、pdf,ppt效果的pdf,由于是文本文件,可以做版本管理。是一个非常好的写作选择。(由于有了typora, org-mode现在也不怎么使用了,转到typora的markdown)
最开始我使用的是gvim,后来学习了emacs的verilog-mode之后,就不怎么使用gvim了。 由于gvim启动速度比emacs快,当前gvim主要用来查看文件。
用文字描述,生成图形,包括流程图,状态机,架构图,类图等。其中时序图,甘特图的正在测试阶段。
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;