Verilog基础语法

逻辑值

0:逻辑低电平,条件为假

1:逻辑高电平,条件为真

z: 高阻态,无驱动

x:未知逻辑电平

关键字

关键字也叫保留字,一般是小写

2.1 module

module			//模块开始
    example		//后面的模块名与文件名是一致的
endmodule		//模块的结束

2.2 输入输出信号

//输入输出信号
input			//输入信号
output			//输出信号
inout			//输入输出信号

2.3 变量

//变量
//线网型变量
wire			//直接的连接,映射成一条真实存在的物理连线
//寄存器型变量
reg				//对某一时间点进行状态保持的作用,映射成一条真实存在的物理寄存器

2.4 参数

//参数
parameter		//在顶层文件进行实例化,对模块中的参数进行修改哦
localparam 		//只能在模块内部使用,不能进行实例化

2.5 变量

//常量
//基数表示法
//格式:【换算为二进制后位宽的总长度】【'】【数值进制符号】【与数值进制符号对应的数值】
/*【数值进制符号】:
	【h】表示十六进制
	【o】 表示八进制
	【b】	表示二进制
*/
//当总位宽大于实际位宽,则自动在左边补0,总位宽小于实际位宽,则自动截断左边超出的位数
//若直接写参数,则表示对应的十进制数

2.6 赋值

//赋值方式
//阻塞赋值,顺序执行
	=
//非阻塞赋值,并序执行
	<=

2.7 always语句

//always语句
/*
always(posedge sys_clk or negedge sys_rst n)
	if(sys_rst_n==1'b0)
		cnt <= 8'd0;
	else if(cnt == cnt MAX)
		cnt <= cnt +8'd1;
	else
		cnt	<=cnt + 8'dl;
*/

2.8 assign语句

//assign语句
assign po_flag = (cnt == cnt_MaX) ?1'b1:1'b0;

2.9 运算符

2.9.1 算数运算符
//算术运算符
+		//:加法,如assign c = a +b 
-		//
*		//
/		//
%		//一般用在测试文件种
2.9.2 规约运算符、按位运算符
//规约运算符、按位运算符
//&做一元运算符的时候,表示归约与,&m是将m的每个比特与n的相应比特相与
//&做二元运算符的时候,表示按位与,m&n是将m的每个比特相与,在运算的过程中要保证m和n的比特数相等,最后的结果和m(n)的比特数相同
2.9.3 逻辑运算符
&& 		//表示逻辑与
||		//表示逻辑或
2.9.4 关系运算符
<		//小于
>		//大于
>=		//大于等于	
<=		//小于等于

关系运算符一般在条件判断时使用

2.9.5 移位运算符

移位运算是二元运算符,左移符号为"<<“,右移符号为”>>",以为将运算符左边的操作数左移或者右移指定的位数,用0补充空位

2.9.6 位拼接运算符

位拼接运算符与由一对花括号加逗号组成: {,},拼接的不同数据之间用","隔开

2.9.7 条件运算符

? :

2.9.8 优先级

总的优先级关系是:规约运算符>算数运算符>移位运算符>关系运算符>”==“

2.10 if-else 条件分支语句

if(条件表达式)
    语句或者语句块

2.11 case 分支控制语句

case(控制表达式)
    <分支语句1> :语句块1;
    <分支语句1> :语句块1;
    <分支语句1> :语句块1;
    <分支语句1> :语句块1;
    ...
    default		:语句块;
endcase        

系统函数

3.1 timescale

timescale 1ns/1ns		//时间尺度预编译指令 时间单位/时间精度
  • 时间单位和时间精度由1、10和100及单位s、ms、us、ns、ps 、fs组成

  • 时间单位:定义仿真过程所有与时间有关的单位

  • 仿真中使用 "#数字"表示演示相应时间单位的时间

  • 时间精度:决定时间相关量的精度及仿真显示的最小刻度

    timescale 1ns/10ps 精度0.01,#10.11表示延时10110ps

    注意:时间单位不能比时间精度小

3.2常用的函数

函数作用
$display打印信息,自动换行
$write打印信息
$strobe打印信息,自动换行,最后执行
$monitor监测变量
$stop暂停仿真
$finish结束仿真
$time时间函数
$random随机函数
$readmemb读文件函数
3.2.1 display

display用于输出、打印信息

格式为:

$display ("%b+%b-%d",a,b,c);
//格式 "%b+%b-%d"格式控制,未指定默认十进制
%h | %H		//以十六进制输出
%d | %D		//以十进制输出
%o | %O		//以八进制输出
%b | %B		//以二进制输出
3.2.2 write

write用于输出、打印信息


write必须使用 "\n"换行符进行换行

格式为:

$write ("%b+%b-%d",a,b,c);
//格式 "%b+%b-%d"格式控制,未指定默认十进制
%h | %H		//以十六进制输出
%d | %D		//以十进制输出
%o | %O		//以八进制输出
%b | %B		//以二进制输出
3.2.3 strobe

strobe用于输出、打印信息,write必须使用 "\n"换行符进行换行

格式为:

$strobe ("%b+%b-%d",a,b,c);
//格式 "%b+%b-%d"格式控制,未指定默认十进制
%h | %H		//以十六进制输出
%d | %D		//以十进制输出
%o | %O		//以八进制输出
%b | %B		//以二进制输出
3.2.3 monitor

monitor用于持续监测变量

格式为:

$monitor ("%b+%b-%d",a,b,c);
//格式 "%b+%b-%d"格式控制,未指定默认十进制
//monitor监测的变量中任意一个发生了变化,monitor执行一次
%h | %H		//以十六进制输出
%d | %D		//以十进制输出
%o | %O		//以八进制输出
%b | %B		//以二进制输出
3.2.3 readmemb

readmemb用于读二进制文件函数,readmemh用于读取十六进制文件函数

格式为:

$readmemb("<数据文件名>",<存储器名>);
$readmemh("<数据文件名>",<存储器名>);
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值