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产生时钟。

 

posted on 2018-04-12 13:15  huanm  阅读(2402)  评论(0编辑  收藏  举报