zoukankan      html  css  js  c++  java
  • verilog学习(1)基本语法

    从今天开始终于要学习verilog语法啦~~学完我就得去整毕业设计了,,虽然verilog一直也学了点,但总觉得没什么系统性。打算用4月份把verilog学完,做点小实践,把毕业设计verilog部分大致过一遍。

    一:数据类型,变量和基本运算符号

    1:命名规则

      大小写敏感,X代表未知状态,Z代表高阻态

    2:数字的表达

      <size>'<radix><value>,默认十进制

    3:模块的新写法

      module Andor(

      output X,Y;

      input A,B,C

      )

      .......

      endmodule

    4:数据类型

    (1)register变量,存储数据,reg不是真正的flipflop,而是变量。

    (2)vector变量,例如:wire[3:0] busA。

    (3)integer/real,整型实型变量。

    (4)time,my_time=$time ;//存放当前仿真时间

    (5)数组array

      reg var[-15:16];//32bit的regs,与reg [-15:16] var不同

      reg [7:0] mem[0:1023] ;//1024 8-bit regs,看上去是二维的,但真正不是二维数组

      mem[10] = 8'b10101010

      不可一次取多个元素,如var[2:9]是不可以的,但reg [-15:16] var可以取var[2:9]。原因是数组的索引相当于地址,硬件无法一次读取多个地址。而vector索引相当于取位宽。不支持多维数组,如reg var[1:10] [1:100]是错误的。数组不能是real类型,如real r[1:10]是错误的。

    (6) string

      reg [8*13:1] string_val; //可存放13个字符,每个字符8位

      string_val = "hello,verilog";//假如超过13个字符,则前面字符会被截断,采取低位先存。

    5:操作符

    (1)逻辑操作符  x&&0 = 0

    (2)位操作符 ^(异或) ~^(同或)

    (3)一目操作符

      a = 4'b1001; 

      c = |a = 1|0|0|1 = 1

    (4)移位操作符

    (5)拼接操作符{}

      但必须指定size,b = 3'b010; catz = {b,1};这是错误的,1必须指定size

    (6)等号操作符

      ==/!==/===/!==

      ===/!==包括对xz的判断,若用==/!=对含有xz的进行判断,则返回x。

    6:算术运算符

      负数:reg [15:0] regA; regA = -4'd12;//存储的是2的16次方-12。

         integer intA; intA = -12/3; //存储的是-4

    二:赋值语句

    (1)连续赋值语句

      assign #del <id> = <expr>;//assign与wire配对

      放在module里面,不能在过程块里(always,initial);多个assign语句是并发的,执行顺序不相关;

    (2)门级建模

      

      这些例化在module里,不能在procedure里面。

    (3)行为级模块-过程块

      过程块里的code是顺序执行的,begin..end;

      

      包括initial与always块,initial只在仿真为0时执行一遍,不可综合,不可构建电路;always块在仿真为0时执行,执行多次,可综合,可构建电路。

    (4)块语句block

      sequential:begin...end  顺序执行

      parallel:  fork...join 并行执行,不可综合,不可构建电路。

      

      begin...end与fork...join可相互嵌套。

      

      

     (5)always块

      assign不可放在always语句里,always左侧变量必须是reg型。

      always @(敏感信号) ,敏感信号可以是电平信号也可以是触发沿信号。

    (6)wait(expr)

      

      wait不可综合,用于仿真。

     三:条件语句循环语句

    (1)if语句,else语句要充分考虑多个情况,不然会形成latch。可综合

    (2)case,可综合

      

    (3)for循环,是否可综合取决于变量的循环是不是固定的

    (4)while() begin ...end  不可综合

    (5)repeat(times) stmt;不可综合

      

    (6)forever 不可综合

      forever #10 clk = ~clk; //对时钟建模,生成clock,always也可产生时钟,但不专业。我们推荐用forever产生时钟。

  • 相关阅读:
    解决mysqldump: Got error: 1044: Access denied for user
    Ubuntu技巧之 is not in the sudoers file解决方法
    mysql日志详细解析
    linux利用grep查看打印匹配的下几行或前后几行的命令
    Linux无法使用userdel删除用户和组的解决办法
    ubuntu快速清理磁盘垃圾
    smarty中math函数的用法
    metinfo首页内容简介
    linux命令别名的使用
    mysql 导出表结构和表数据 mysqldump用法
  • 原文地址:https://www.cnblogs.com/xh13dream/p/8807188.html
Copyright © 2011-2022 走看看