verilog的语法注意点

if....else语句和case语句的区别:

   理论上,if..else语句是串行的逻辑结构,case语句是并行的逻辑结构。但经过编译器优化后 if...else结构也可能被优化为并行结构。

  if语句可以不加else部分,但是,在综合后,则会多产生寄存器用于保存if中的逻辑式的值。

  同样,若case语句中不加default部分,也会多产生寄存器用于保存if中的逻辑式的值。

 

verilog中一般不用for语句,因为for语句占用的硬件资源比较多,在for语句使用的时候,注意阻塞赋值'='和非阻塞赋值'<=',在always语句中使用非阻塞赋值时,是在always结束后才把值赋给左边的寄存器

 

当inout端口作为输入口使用时,一定要把它设置为高阻态。

inout  io_data;

reg    out_data;     //需要输出的数据

reg    io_link;       //inout口方向控制

assign  io_data=io_link?out_data:1'bz; 

 

给代码注释时,应该假定读者是一个有经验的工程师,他熟悉verilog语言本身,但对于该工程并不熟悉。注释的最高境界是:抛开源代码,单从注释就能明白设计者索要实现的功能。

 

所谓异步复位,是指复位信号和系统时钟信号的触发可以在任何时刻,二者相互独立。如 always@(posedge clk or negedge rst_n)

同步复位

  always@(posedge clk) begin

    if(!rst_n) b<=1'b0;

    else b<=a;

end

异步复位存在亚稳态隐患,同步复位该隐患稍弱,但消耗资源稍多。

 

一般情况下,不在顶层模块做任何逻辑设计,哪怕只是一个逻辑与操作,比较好的设计会明确地区分每一个模块单元。

posted on 2013-11-16 18:03  怎能平庸  阅读(515)  评论(0编辑  收藏  举报

导航