码迷,mamicode.com
首页 > 其他好文 > 详细

自己的verilog经验

时间:2014-12-16 18:28:52      阅读:224      评论:0      收藏:0      [点我收藏+]

标签: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中的语句。

自己的verilog经验

标签:os   使用   sp   for   log   bs   代码   ef   amp   

原文地址:http://www.cnblogs.com/blogernice/p/4167470.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!