|
![](static/image/common/ico_lz.png)
楼主 |
发表于 2012-2-16 09:45:56
|
显示全部楼层
一家之言,仅供参考:
关于语法:
1. 语法其实都是非常简单的,比始C ,它最常用到的语法就是 ,if else , switch ,while break ,数组, 指针等等,真正从语法上来讲这其实本身并不复杂。但为什么有人能写好,有人就写不好呢?其实就是一种架构和思想,与语法本身没有关系。我自己就写不好C,呵呵。
2. 同样对 FPGA 来说,比如 verilog 语法,需要记住的语法同样并不多,而且可以逻辑综合的语法就更少,大多数语法是用于验证的(verification),它的语法应用非常固定,always , if else , assign , case , {拼结移位}, == , != , &&, || 等等,在redcore的写法中更是非常固定。最终我们仍然强调的是一种架构和思想,与语法本身也没有关系。
规范:
1. 现在的规范很多,华为,周立功。。。但我们要如何学习呢? 规范的目的是为了代码共享和便于维护,所以没有必要强烈哪一种好或者不好。但有些是规范的共同点,避免出现低级错误,比如:latch 和产生就是低级错误,除非你确实需要这种;因此强调if else 必须是配套的,case default 也是要配套使用的。。。。
2. 多驱动源,这个我看到有些朋友还在想如何可以达到多个块来操作同一个信号,这种思想就是有问题的,就是规范有问题。redcore的规范是一个信号只能在一个块中操作,就避免了这个问题。试想一下你只能站立和坐下,如果两个人叫你同时作不同的动作怎么办,在现实中也是如此.
3. 同步和异步也是一个要注意的问题,敏感表中的信号不能随便改,时序逻辑用 always @ (negedge RST_B or posedge SYSCLK) ,组合逻辑用 always @(*),不用再去调整这个表。
4. 高速电路,要发挥FPGA 的速度,就要学会写高速电路,对电路的速度起决定因素的其实就是组合逻辑那一部分,在同步时钟到来时,组合逻辑电路必须是稳定的,这就要求组合逻辑的级联不能太深,每多一层级联,速度就急剧下降。而对于不能优化的组合电路,要分拆成多个CLK来完成。条件判断中存在反馈信号也会降低速度 。。。。。
不被误导,注重电路的基础结构,比如:case 的平行结构,if else 的优先级结构等。。。。。好的开端就成功了一半。 |
|