|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
Verilog小提示2 W) q7 q7 g# s( r/ f+ W
编程中的问题: O% T+ e! D# q2 G; d/ [- n5 l
1)Always模块中,左边的变量都是reg型的9 ~; I3 @3 ~" z2 K# p5 ~' e
2)不可以在always模块中调用,组合逻辑6 }, a# i; L8 ?8 B& k2 F: r) e
3)相应的||,|和or的用法要注意,第一个是逻辑判断,判断相应的事件,而第二个则是位运算,单个bit分别进行运算,而第三个是在@的条件中加入的,表示两个都有的,相应的在写程序的时候要注意;" {, W2 \( }' |" B+ z
4)Testbed.v中一般除了clk,其他全部都是wire型的,而clk是reg型的。& {4 E6 h4 X0 S+ g: k% x
5)每一个always procedural block中只能在左侧存在一个变量,即a <=b;在一个always block中a不能变,但b可以变;
) R5 L4 o% ~- K1 U5 C# ?4 Q; _# q6)由于最后会在所有的<=后面加上#`RD,所以最终不会出现计时器与相应的clk,出现重叠的情况。( ~ Y7 `+ g0 ?; w: k: r8 h
7)always @( posedge clk ) begin7 u; f5 _* {" A+ `; ?
if ( data2in )
$ Y- N& U6 [9 M- ?ina1 <= di;' y! X X3 [/ U5 E( I
end
. p9 b" [3 D4 s& u8 h8 ` 和相应的count出现联系的时候可以这样来做。
2 Q# _8 t7 k( _) ]8)初始化的思想要有,在一些比较器的初始状况的时候可以先赋给初始值,初始值赋给的时候一般是最小或者最大之类的,根据情况来确定,另外时序电路是与时钟密切相关的,要理解相应的位置的时序产生的什么样子的变化,确定好之后然后就可以定义相应的触发条件,来进行触发;然后就是要注意组合逻辑和时序逻辑要分开处理,要明白他们之间的区别。% |5 P6 d9 u0 w0 h
组合逻辑是每个周期不变化的部分,而时序电路或是有相应的触发条件,或是随时钟变化而变化。" b7 m( Y9 n( I1 t: Y
相对来说,组合逻辑是赋值的思想;一直赋值然后就可以变化;而时序电路则是要先将组合时序等分开,然后再说其他的,目前阶段的时序电路代码不会有很大的代码量。9 S5 _! ]# }2 I+ p8 r3 h
9) 具体架构还是要问清楚模块划分,组合时序逻辑划分,看了具体的架构不一定能确定理解,看了代码才能清楚。分组的思想,产生同样的结果的条件柔和在一起构成组合逻辑。
( T2 G- B8 ?& A7 V% J10) 常用的信号比如说en,clear,set等信号由很多逻辑组合而成,要分清楚;另外,电路逻辑先架构然后再代码的顺序可以减少debug的时间,虽然要花费画架构图的时间,但实际上会减少整体的时间
/ `8 e. k9 X# R w/ _' q/ b" U |
|