INTEL FPGA学习笔记
第12节:语法篇_Verilog基础语法
(1)Verilog 语言四种逻辑:
逻辑 0:表示低电平,也就对应我们电路 GND;
逻辑 1:表示高电平,也就是对应我们电路的 VCC;
逻辑 X:表示未知,有可能是高电平,也有可能是低电平;
逻辑 Z:表示高阻态,外部没有激励信号,是一个悬空状态。
(2)数字表示:不给位宽默认32位,不给进制默认d:如1020=32’d1020
(3)标识符:
标识符区分大小写,第一个字符必须是字母或者下划线;
标识符推荐写法:
不建议大小写混合使用;
普通内部信号建议全部小写;
信号命名最好体现信号的含义,简洁、清晰、易懂;
以下是一些推荐的写法:
1、用有意义的有效的名字如 sum 、cpu_addr等。
2、用下划线区分词,如cpu_addr。
3、采用一些前缀或后缀,比如时钟采用clk前缀:clk_50,clk_cpu;
(4)在 Verilog 语言中,主要有三大类数据类型:
从名称中,我们可以看出,真正在数字电路中起作用的数据类型应该是:寄存器数据类型和线网数据类型。
一.寄存器数据类型reg:
(1)表示一个抽象的数据存储单元,通过赋值语句可以改变寄存器储存的值
(2)初值不确定,默认X。
(3)reg类型的数据只能在 always 语句和 initial 语句中被赋值。
(4)reg的位宽:[高位,低位]
如果不给位宽,默认为1
(5)reg的物理意义:触发器/硬件连线
二.线网数据类型wire/tri(tri很少用但用法一致):
(1)线网数据类型表示结构实体(例如门)之间的物理连线,不能储存值,它的值是由驱动它的元件所决定的。
(2)驱动的元件有门、连续赋值语句、assign等,如果没有驱动元件连接到线网类型的变量上,则该变量就是高阻的,即其值为z
三.参数数据类型parameter:
(1)参数其实就是一个常量
(2)在模块调用时,可通过参数传递来改变被调用模块中已定义的参数。
(5)移位运算符:
两种移位运算都用0来填补移出的空位。
左移时,位宽增加;右移时,位宽不变。
4’b1001 << 2 = 6’b100100;
4’b1001 >> 1 = 4’b0100;
(6)拼接运算符:
{a,b} 将 a 和 b 拼接起来,作为一个新信号
比如:c = { a, b[3:0] };
第13节:语法篇_Verilog程序框架
(1)常用关键字:
(2)Verilog 的基本设计单元是“模块”(block)。
一个模块是由两部分组成的,一部分描述接口,另一部分描述逻辑功能。
(3)注意:输入端可以是wire类型的,也可以是reg类型的
但输出端只能是wire类型
(4)参数传递:注意看其中的MAX_NUM ,尽管在模块中已经有值了,但仍然可以在外面重赋值。
(未完待续,原则上每日更新)