当前位置:首页 > > ZYNQ


Verilog HDL是一种硬件描述语言,以文本形式来描述数字系统硬件的结构和行为的语言,用它可以表示逻辑电路图、逻辑表达式,还可以表示数字逻辑系统所完成的逻辑功能,一起来学习吧。

1、逻辑

四值电平逻辑:0(假)、1(真)、x(不确定)、z(高阻/浮动)

x和z代表的位数:十六进制-4位、八进制-3位、二进制-1位

数的最高位是x、z、0时,自动赋值扩展剩余更高位;数的最高位是1时,用0扩展剩余更高位。

2、常量

使用带基数的形式表示常量:<+/-><位宽><基数符号><数值>

  • 指明位数的数字( '):

用十进制数表示位宽; 基数格式包括十进制(d)、十六进制(h)、二进制(b)、八进制(o); 0~1、a/A~f/F

  • 不指明位数的数字 :不指定基数格式时默认为十进制数;默认位宽与计算机有关(最小32位)。

3、定义标识符来表示常量

公式:parameter 参数名=常量表达式

例子:

parameter BIT=1,BYTE=8,PI=3.14; parameter DELAY=(BYTE+BIT)/2;

4、强度值:supply(驱动)、strong(驱动)、pull(驱动)、large(存储)、weak(驱动)、medium(存储)、small(存储)、highz(高阻) 按程度由强到弱排序

  • 各类线网中,只有trireg类型可以存储强度(large、medium、small三等级)

  • 强度值解决不同强度驱动源之间的赋值冲突。

  • 不同强度信号驱动同一个线网,结果服从高强度信号。同强度多个信号竞争,结果为不确定值。

5、线网类型 net type

线网net:硬件单元间的连接。由连接器件输出端连续驱动。

数据类型:wire,wand,wor,tri,triand,trior,trireg....

线网用wire声明,值由驱动源决定。默认值为z(trireg类型线网默认值为x),默认位宽为1。

定义格式:wire[n-1:0]变量名1,变量名2,...,变量名n;

wire a,b;                    //声明两个线网类型变量a,b wire [7:0] databus;          //声明一个8位宽的线网类型变量databus wire [32:1] busA,busB,busC;  //声明3个位宽为32的线网类型变量busA,busB,busC

6、寄存器类型 register type

寄存器:存储元件,被改写前保持原数值。

寄存器型变量只能在initial或always内部被赋值。

寄存器未被赋值前,默认为x。

寄存器类型 功能说明
reg 用于行为描述中对寄存器型变量的说明。无符号数
integer 32位带符号的整数型变量。默认位宽是宿主机的位数,域具体实现有关,最小32位。计算中认为是有符号的数,用二进制补码的形式储存。不可使用位矢量integer [3:0] num;×
real 64位带符号的实数型变量,实数不带范围,默认为0。用十进制或科学计数法(3e6=3000000)当实数值被赋给一个integer型变量时,只保留整数部分的值,小数点后面的值被截掉。
time 64位无符号的时间型变量 ,时间寄存器用time来声明,宽度与具体实现有关,最小为64位。用于存储仿真的时间,只存无符号数。每个time型变量存储一个至少64位的时间值。调用$time可得当前的仿真时间


如果没有明确地说明寄存器型变量reg是多位宽的矢量,则寄存器变量的位宽为1位。

定义格式:reg[n-1:0]变量名1,变量名2,...,变量名n;

reg clock;                      //声明一个寄存器变量clock reg [3:0] counter;               //声明一个4位宽的寄存器变量counter 

integer型变量例子:

integer counter;                //声明一个整型变量counter initial  counter=-1;               //将-1以补码的形式存储在counter中  //只有寄存器类型的变量才能在initial内部被赋值

real型变量例子:

real delta;             //声明一个实数型变量delta initial  begin  delta=4e10;      //给delta赋值  delta=2.13;  end integer i;               //声明一个整型变量i initial  i=delta;             //i得到的值是2(只将实数2.13的整数部分赋给i) 

time型变量例子:

time current_time;           //声明一个事件类型的变量 current_time initial  current_time=$time;    //保存当前的仿真时间到变量current_time中
本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
关闭