zoukankan      html  css  js  c++  java
  • zynq基础-->verilog简易规则

     命名规则

    verilog 中文件及内容模块的命名方式也是依据面向对象的思想命名。

    类型 命名方式 实例
    顶层文件 对象+功能+top video_oneline_top
    逻辑控制文件 对象+ctr ddr_ctr.v
    驱动程序 对象+功能+dri

    lcd_dri.v

    uart_rxd_dri.v

    参数文件 对象+para

    lcd_para.v

    模块接口

    文件名+u

    特征名+文件名+u

    lcd_dir

    lcd_dir_u(......)

    mcb_read

    c3_mcb_read_u

    端口注释

    对象+通道+方向

    input video_vs_i

    时钟信号

    对象+功能+特征

    phy_txclk_i

    sys_50mhz_i

    复位信号

    对象+功能+极性+特性

    phy_rst_n_i

    sys_rst_n_i

    延迟信号

    对象+功能+特性1+特性2

    fram_sync_i_r0

    特性功能计数

    对象(+功能)(+对象)+cnt

    line_cnt

    rd_cnt

    mem_wr_cnt

    video_line_cnt

    一般计数器

    cnt+序号

    cnt0

    时许同步信号

    对象+功能+特性

    line_sync_i

    使能信号

    (对象)+功能+en

    wr_en

    fifo_wr_en

    关键字

    input

    设置一个输入信号,如同单片机设置引脚为输入状态一样,只能读,不能写。

    output

    设置一个输出信号。

    inout

    设置双向信号,即可写也可读。

    wire

    线信号,用于连接单元。

    reg

    寄存器,以位为基本单位存储,可以设置多位。

    例如:

    reg [1:0] state;//state存储两位

    结构

    代码块

    begin

    ...

    end

    与C的大括号用法一样

    模块

    module [模块名称](输入输出参数)

    ........

    endmodule

    模块内部写代码

    敏感信号

    always@(...) 

    begin

    end

    当括号内的信号满足触发时,才执行语句块的内容。

    比如:always@(posedge clk)代表clk信号为上升沿时,则执行语句块内容。

    分配

    assign用于wire类连线,将表达式右边的电路连接到左边,左边随右边变化。

    比如:

    wire a,b,y;

    assign y = a & b;

    判断

    if(...)

    begin

    ...

    end

    if(....)

    begin

    ...

    end

    else if(...)

    begin

    end

    case(...)

    ....

    endcase

    符号

    verilog大部分符号与C是一样的用法,下面仅说明不同部分。

    非阻塞赋值

    A <= 1'b1;

    非阻塞赋值是同时的,而阻塞赋值时有先后顺序的。

    比如:

    A <= 1'b1;

    B <= 1'b1;

    代表同时给A和B赋值

    A = 1'b1;

    B <= 1'b1;

    代表先给A赋值再给B赋值

    冒号

    用于数组、条件运算、case结构中。

    例如:

    reg[3:0]led;

    代表名为led的reg类型数组,有4个元素。

    拼接符

    {a,b}代表将括号内的a和b按位并在一起。

    例如:{1001,1110}拼接结果为10011110

    参数

    常量

    parameter a = 0;

    定义一个名为a的常数,数值为0,占用长度为32位。

    对于不同位数使用如下格式:

    [wide]'[d/h/b][val];

    例如:

    parameter a = 8'd180;//8位十进制数,值为180

    parameter a = 8'haa;//8位十六进制数,值为aa

    parameter a = 8'b1010_1010;//8位二进制数,值为10101010,其中"_",仅仅为了便于观察,可有可无。

    预处理

    verilog预处理与C很类似,预处理符号使用"`"开头.

    注意:

    在引用已定义的宏名时,必须在宏名前加上"`"。

    例如:

    `include file.v  //包含文件file.v

    `define  X 1    //定义宏x 值为1

    `ifdef X

      z = 1;

    `else

      z = 0;

    `endif

  • 相关阅读:
    [zt]在XML序列化时去除默认命名空间xmlns:xsd和xmlns:xsi
    线程间操作无效: 从不是创建控件“...”的线程访问它。
    Unity IoC + WCF + wsHTTPBinding + Certificate Authorization
    [转]PowerDesigner使用教程 —— 概念数据模型
    C# Post数据和接收简单示例【摘】
    163相册验证码图片的识别手记之一 去除干扰
    实现WCF和Unity 的集成
    Html.ActionLink 几种重载方式说明及例子
    如何从程序员到项目经理【转帖51cto】
    OSG闪存
  • 原文地址:https://www.cnblogs.com/KcMeterCEC/p/5691679.html
Copyright © 2011-2022 走看看