标签:os 使用 sp for log bs 代码 ef amp
1.中间变量和输出变量都要用reg类型暂存一下,输出必须用reg寄存
2.对一个n‘b(n>=2)的寄存器赋值时可以直接在声明时:
reg [n-1:0] register=0;
在中间部分赋值时
register[7:0]=0
是不对的,
可以用
register[7:0]=8‘hff 来赋值。
3.在宏定义中的数如果在代码中用到它的运算,那么 宏定义的数值 必须是整数
4.always 的敏感信号列表中 不能有 两个 posedge
如果有两个延触发就
always @(posedge clk or negedge RST)
if(!RST)
复位
else
算法
5.总是忘记:时序电路用非阻塞赋值!
assign 只能用阻塞
6.去抖
always@(posedge clk or posedge
rst)
if(!rst)
cnt<=‘b0;
else if (valid_en)
cnt <=‘b0;
else if(key_jitter)
cnt
<= cnt+1;
else cnt <= 0;
assign valid_en =cnt==n;//n的值由clk的周期决定.
7.在编写时钟树时,会用到buffer,buffer 的写法可以直接用 always@ (a)
b<=a,但是若要禁止时,用1‘bz置成高阻。
8.慎用for语句!
always @ (posedge clk) begin
if(!rst_n) begin
num = 0;
end
else begin
for(i=0;i<13;i=i+1) begin //用for循环进行计算
if(data[i]) num = num+1;end
end
在此使用阻塞赋值,在一个周期内即可完成for.
如果使用非阻塞赋值,则一个周期只计算一次。
9. 同一个reg变量不能被多个always块驱动
&& 同一个变量的赋值不能受多个时钟控制,也不能受两种不同的时钟条件(或者不同的时钟沿)控制。
10. 锁存器
综合系统推导出锁存器的规则是:
(1)变量在条件语句(if或case语句)中被赋值。
(2)变量未在条件语句的所有分支中都被赋值。
(3)在always语句的多次调用之间需要保存变量值。
必须同时满足以上3个条件,才会将变量推导成锁存器。在设计时应明确是否需要将某一个变量推导成锁存器,如果需要,就必 须按照上面3条规则来编写代码。否则就会
导致综合前后功能的不一致。
?11.分频的时候可以以某一位为1做条件,这样就可以同时分出多个时钟。
12.if()....
if()....
和
if ()
else if()
的区别:当两个条件全为真时 前者两个都执行,后者只执行if中的语句。
标签:os 使用 sp for log bs 代码 ef amp
原文地址:http://www.cnblogs.com/blogernice/p/4167470.html