Verilog ⼊门教程与实例分享
本⽂⽬录
前⾔
本⽂记录了Verilog语⾔的⼊门基础知识,并通过⼀些代码实例帮助⼤家上⼿,主要基于Xilinx Vivado完成,以下个⼈学习经验仅供参考。⼀、Verilog ⼊门教程
1.基础语法
(1)关键字必须⼩写,如reg、input
(2)标识符区分⼤⼩写,开头必须是字母或下划线,如CLK、clk(两者不同)
(3)每⾏必须以;结束
(4)单⾏注释⽤//xxx,跨⾏注释⽤/* xxx */
2.数值表⽰
(1)基本数值种类:0(0 或 假)、1(1 或 真)、x/X(未知)、z/Z(⾼阻)
(2)整数基数格式:⼆进制('b 或 'B),⼋进制('o 或 'O),⼗进制('d 或 'D),⼗六进制('h 或 'H)
(3)整数表⽰⽅法:4’b1001(指明位宽,4位⼆进制“1001”)或100(不指明位宽,默认⼗进制“100”)
(4)负数表⽰⽅法:-4’b1001(指明位宽时)或-100(不指明位宽时)
(5)实数表⽰⽅法:⼗进制(0.001)或科学记数法(1.2e4)
(6)字符串表⽰⽅法:需要定义相应⼤⼩的存储单元,⽐如字符串"www.csdn"需要12*8bit的存储单元,代码如下:3.数据类型
(1)线⽹:wire,表⽰硬件单元之间的物理连线,由其连接的器件输出端连续驱动
(2)寄存器:reg,表⽰存储单元,它会保持数据原有的值直到被改写
(3)向量:当位宽⼤于 1 时线⽹或寄存器即可表⽰向量,举例如下:
(4)整数:⽤integer声明,注意变量为有符号数
(5)实数:⽤ real 声明,⼗进制或科学计数法表⽰
(6)时间:⽤time声明, 通过调⽤系统函数 $time 获取当前时间
(7)数组:数组中的每个元素都可视为⼀个标量或者向量,形如<;数组名字>[<;位数>],举例如下:reg [12*8-1:0] str;assign str = "www.csdn";安卓开发实例入门
1
2wire [8-1:0] addr;reg [8-1:0] addr_temp;addr_temp[7:6] = addr[1:0] + 1'b1 ;
1
2
3
(8)参数:⽤parameter或localparam声明,表⽰常量
4.表达式
(1)表达式:由操作符和操作数构成,⽬的是根据操作符的意义得到⼀个计算结果
(2)操作数:可以是任意数据类型,如常数、整数、实数、线⽹、寄存器、时间、函数等
(3)操作符:包括算术、关系、等价、逻辑、按位、归约、移位、拼接、条件操作符等,圆括号内表达式优先执⾏,同类型操作符之间除条件操作符从右往左关联,其余操作符都是⾃左向右关联
(4)算术操作符:包括单⽬操作符(“+”、“-”,表⽰操作数正负,优先级最⾼)和双⽬操作符(加“+”、减“-”、乘“*”、除“/”、求幂(两个星号)、取模“%”)
(5)关系操作符:⼤于“>”、⼩于“<”、⼤于等于“> =”、⼩于等于“< =”,结果为真“1”或假“0”
(6)等价操作符:逻辑相等“= =”、逻辑不等“! =”、全等”= = =“、⾮全等“! = =”,结果为真“1”或假“0”
(7)逻辑操作符:逻辑与“& &”、逻辑或“| |”、逻辑⾮“!”
(8)按位操作符:取反“~ ”、与“&”、或“|”、异或“^”、同或“~ ^”integer flag [7:0] ; //8个整数组成的数组flag reg [3:0] counter [3:0] ; //4个4位reg 型变量组成的数组counter wire [7:0] addr [3:0] ; //4个8位wire 型变量组成的数组addr flag [1] = 32'd0 ; //将flag 中第2个元素赋值为32位的0值counter [3] = 4'hF ;  //将counter 中第4个元素赋值为4位的⼗六进制数F assign addr [0] = 8'b0 ; //将addr 中第1个元素赋值为0
1
2
3
4
5
6

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。