EDA组合电路的Verilog设计

模块语句 :
module 模块名(端口名表);
功能描述
endmodule
端口语句、端口信号名和端口模式:
input、output、inout
逻辑操作符:
连续赋值语句:
assign [延时] 目标变量名=驱动表达式
当右侧的任一信号变量发生变化时,此表达式就被计算一遍,获得的数据立即赋值给等号左边的变量
并行执行语句
关键字:
不允许把系统内的关键字当做普通标识符来使用
标识符:
自定义的,区分大小写
注释符号:
//   /*......*/
reg:定义模块内相关信号的特性和数据类型,寄存器变量(register)
wire:网线型变量(Net),没有显式定义,默认定义为wire型
wire只能被assign连续赋值,连续赋值语句中,reg只能在always中赋值,过程赋值语句中;reg型保持最后一次赋值,wire型需要持续的驱动
always:引导顺序语句
always@(敏感信号及敏感信号列表或表达式)
通常要求将过程语句中所有的输入信号都放在敏感信号表中,每当其中任何一个或者多个信号发生变化时,都将启动过程语句,执行一遍结构中的所有程序语句。
(1)用关键词or连接所有敏感信号(2)用逗号区分所有敏感信号(3)省略形式 always@*
case_endcase:引导多条件分支的赋值语句
if_else语句和case_endcase语句属于常见的可综合顺序语句,必须放在过程语句always中使用

begin_end:引导顺序块语句
仅限于在always引导的过程语句结构中使用,顺序块语句
四种逻辑状态:0、1、z(高阻态)、x(不确定态)
"?"表示高阻态或者不关心
并位操作运算符{ }:可以将多个信号按二进制位拼接起来变成一个新的信号变量
过程赋值语句:
阻塞式赋值:“=”执行完当前的赋值语句之后才会执行其他语句
非阻塞式赋值:“<=”在块语句执行结束时才整体完成赋值操作
在同一过程中对同一变量的赋值不允许混合使用阻塞式赋值和非阻塞式赋值两种
数据类型表示方式:对于不匹配情况会自动使其匹配,转变进制、高位补零或者截去低位
Verilog例化语句:
<模块元件名><例化元件名>(.例化元件端口(例化元件外界端口名),...);
库元件及其调用:and,nand,or,xor,nor,xnor,not等
用户自定义原语(UDP):
以关键词primitive起始,以关键词endprimitive结尾。只能有一个输出端,放在端口表的最左侧。table_endtable引导出该UDP逻辑功能的真值表。
算数运算操作符:
加减乘运算符都可综合,除和求余的操作数必须是2为底数的幂才可综合。对数据类型没有严格要求。
参数定义关键词parameter和localparam:
parameter用来定义常量;localparam用来定义局部参数,无法通过外部程序改变它
整数型寄存器类型定义:
integer类型多数被用于表达循环变量,指示循环的次数,不必特指位数,默认为32位宽的二进制数寄存器类型。
for语句:
for(循环初始值设置表达式;循环控制条件表达式;循环控制变量增量表达式)
begin 循环体语句结构 end
移位操作符:
">>"为右移移位操作符;"<<"为左移移位操作符;">>>"有符号数右移移位操作符;"<<<"有符号数左移移位操作符,右移时一律将符号位填补移出的位
repeat语句用法:
repeat(循环次数表达式)
begin 循环体语句结构 end
whil语句用法:
while(循环控制条件表达式)
begin  循环体语句结构 end
循环语句用阻塞式赋值“=”
parameter的参数传递功能:
通过例化语句来传递参数,通过上层设计中的相关参数的改变来改变底层电路的结构功能与逻辑规模。#(parameter s)参数传递表

猜你喜欢

转载自blog.csdn.net/weixin_40475469/article/details/78883614
今日推荐