注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

火车的家

Put first thing first

 
 
 

日志

 
 

2012.05.28 初学 verilog 一些杂感  

2012-05-29 19:39:02|  分类: 技术博客 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
1. verilog 面向电路编程,描述的是电路的互联关系,所以不易学。而 C 语言面向的是人类的思考方式,用来描述人类的逻辑算法,所以更容易被理解。

2. 不明白为什么 verilog 要用 begin/end 标识一个语句块,这样弄得代码有点乱,像 C 语言一样用 {} 多简洁。

3. verilog 对"位"的访问很方便,可以用数组下标的方式直接访问每个位,这点要比 C 语言方便很多,我想这也和硬件编程的特点有关,硬件经常要以"位"为单位操作。

4. 每个 verilog 语句块里面声明的变量,可以被语句块外部的模块访问到,这点和 C 语言大不一样,这是因为 verilog 是面向电路的语言,它的每个变量描述的是一个电路模块,所以即使退出了语句块这个电路模块也还是存在的。

下面是一些 verilog 的小技巧:
1. 每个变量只能在一个 always 语句里写,否则编译会报错。

2. 多个寄存器可以组合成一个 wire,这样访问起来很方便。
    reg [31:0] data0 = 0;
    reg [31:0] data1 = 0;
    reg [31:0] data2 = 0;
    reg [31:0] data3 = 0;
    reg [31:0] data4 = 0;
    reg [31:0] data5 = 0;
    reg [31:0] data6 = 0;
    reg [31:0] data7 = 0;
    reg [31:0] fifopos = 0;
     wire [255:0] fifodata =
    {
        data7[31:0] ,
        data6[31:0] ,
        data5[31:0] ,
        data4[31:0] ,
        data3[31:0] ,
        data2[31:0] ,
        data1[31:0] ,
        data0[31:0]
    };
这样就可以通过 fifodata 依次访问这组寄存器的每个位。

3. 分频。如下代码对 clk 做 4 分频:
    always @( posedge clk )
    begin
        clk_counter = clk_counter + 1;
    end

    wire  aud_xclk_pin = clk_counter[2];

4. avalon 寄存器接口的写法,可以参考:link
  评论这张
 
阅读(403)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018