FPGA的基本语法:
1:定义一个数据的,定义其位宽和和进制,省略位宽默认32位,省略进制默认十进制,数据之间可以添加下划线
2:X表示不确定的值,Z为高阻态
3:parameter参数类型,可以定义为不变的数据,也可以参数的传递
4:定义字符串时通用C语言的部分字符串,如\n,\t等
5:变量数据类型主要分为网络类型和寄存器类型。网络类型不能存储数据,寄存器类型可以存储数据。(网络类型:wire和tri主要用作连接单元的连线;Supply0对地建模,supply1对电源建模。Wor和trior实现线或功能;wand和triand实现线与功能;trireg可以存储数值和电容节点的建模;tri0和tri1用于线逻辑的建模)(寄存器类型:reg型为可定义的无符号整数变量;memory是reg型的一个数组;interger型是32位有符号整数变量)
6:wire型信号可以用于任何方程式的输入,也可作为assign语句或者实例元件的输出。
Reg型数据常用作表示always模块内的自定信号,常代表触发器。
7:逻辑运算符分为数值的与或非也分为按位运算符。
缩减运算符依次高位和地位实现逻辑运算。
关系运算符两个数据进行关系运算,输出真假和不确定X
等式运算符分为逻辑等和严格等。逻辑等输出01X,将X,Z视为不确定的数;关系等分为01,将X,Z视为两种符号。
位拼接运算符将两个数据的某几位拼接在一起
三目运算符相当于if和else,
8:赋值语句分为阻塞赋值和非阻塞赋值
阻塞赋值也就是说它阻塞了其他赋值语句的执行,只能进行一步一步的执行,a=b
非阻塞赋值允许其他verilog语句同时进行操作,a<=b
当使用always时,阻塞赋值来描述组合逻辑,而非阻塞赋值描述时序逻辑。在一个always块中不要同时使用阻塞逻辑和非阻塞逻辑
9:verilog中有01XZ四种逻辑值,逻辑值为1则按照真处理,若为0XZ则按假处理,跳过if中的语句。
在if嵌套中,else总是和它最上面的if来匹配。
Case语句中的case和endcase成对出现。case语句分为case语句,以常量为参考;casez则以高阻态为参考,当有一个Z是,其结果为真;ca***则以高阻态和不确定值为参考,当有一个为Z或X时,结果为真。
采用‘primitive’对于case的约束主要分为FULL_CASE和PARALLEL_CASE。FULL_CASE约束就是让编译器默认case语句为完全case。
10:verilog分为四种循环的方式,其中repeat,forever,while只能用于仿真,不能形成电路。
Repeat规定循环几次就循环几次,需借助begin和end进行开始和结束。
Forever循环常用于产生周期性波形。可以进行终止后执行forever之后的语句。
While是用作一定条件下的循环,满足条件是连续执行,当条件不满足时进入while之后的程序。
For循环部分可以进行仿真和综合,电路复杂。
11:块语句以及过程块
块语句有begin_end和fork_join。
Begin_end块内可以定义局部变量,其次块内使用的语句可以被其他语句调用。
Fork_join块内语句将同时开始并行执行,按照时间顺序,排在最后一个语句执行完之后跳出该程序块。
块内部赋值有assign的连续赋值语句,当右边的值发生变化时,计算右边的表达式的值,并将结果付给左边的变量。具有组合逻辑的特征。
Always块可以描述组合逻辑也可以描述时序逻辑。Always块主要由时序控制条件和执行语句构成。
12:抽象级别的描述主要分为系统级,算法级,RTL级,门级和开关级。
门级描述就是利用verilog内置的基本门级元件以及他们之间的连接来构筑逻辑电路的模型。
行为级描述关注的是逻辑电路的输入/输出的因果关系,即在任何输入条件下产生何级输出,描述的是一种行为特征。
13:组合逻辑通过assign实现。而时序的逻辑通过always实现。