verilog基础语法

学习记录

模块例化

模块实例化(也称模块调用)基本格式为:
<模块名> <例化名>(<端口列表 >);
根据被调用的低层模块与上层模块的连接端口的描述方式不同,有两种实例化方法 :

  1. 按端口顺序连接: 低层模块定义时声明的端口顺序与上层模块相应的连接端口顺序保持一致
    格式:模块名 例化名 (PORT_1,…,PORT_N);
  2. 按端口名称连接,被调用的低层模块和上层模块是通过端口名称进行连接的。
    格式:模块名 例化名 (.port_1(PORT_1),…,port_n(PORT_N));

建议使用第二种方法
第二种例化格式的优点:
(1)被调用模块有较多引脚时,根据端口名字进行信号连接,可避免因记错端口顺序而出错。
(2)在被调用模块的端口顺序发生变化时,只要端口名字含义不变,模块调用就可以不更改调整。

HDL

支持从开关级,门级,RTL,行为级等不同抽象层次对电路进行描述。
行为级:case语句的4选1多路选择器
寄存器传输级:assign语句的二选一多路选择器
门级:使用逻辑门组合逻辑功能,and (sign, a, b)
开关级:FPGA一般不采用

信号类型

输出端口的信号、模块内部信号需要数据类型说明。常用两类数据类型:线网类型(关键词:wire)和寄存器类型(关键词:reg )。

线网类型(net type):表示结构化元件间的物理连线。它的值由驱动元件的值决定。如果没有驱动元件连接到线网,线网的缺省值为高阻值z

寄存器类型(register type):表示一个抽象的数据存储单元,它只能在always语句和initial语句中被赋值。寄存器类型变量的缺省值为不确定值x

reg型保持最后一次赋值,wire型需要持续的驱动。

reg可正可负,作为表达式的操作数时,被当做无符号值

  • memory
    reg [n-1:0]存储器名[m-1:0];
    m个大小为n的存储器
reg [n-1] rega; 	//n位寄存器
reg memb [m-1:0];	//m个1位寄存器构成的存储器组

rega = 0;
memb = 0;	//错误写法
memb[0] = 1;

reg [3:0] rom [4:1];
rom[1] = 4'h0;
  • integer
    大小取决于计算机的字长(通常32位),有符号二进制补码格式,一般不用于综合

逻辑功能

用结构说明语句“task”和“function”进行行为级描述:

task  writeburst;//定义一个任务writebrust
    input [7:0] wdata;
        …
endtask
…
writeburst(123);//调用任务 
function max(a,b)//定义一个函数max,求出a,b两数的最大值
              …
endfunction
//函数的调用,将data_1,data_2的最大值赋给c
assign c = max(data_1,data_2);

注释

单行注释以“//”开始,只能写在一行中。
多行注释以“/”开始,以“/”结束,可以跨越多行。

数据类型

例3-11:

16'b1001_1010_1010_1001=16'h9AA9	//下划线分割二进制数
8’b11001100 	//位宽为8的二进制数,’b表示二进制
’hff23           	//十六进制数,采用机器的默认位宽
123           	//十进制数123,采用机器的默认位宽,一般是32'd123
2’b1101      	//表示的是2’b01.当数值大于指定的大小时,截去高位
4’b110x       	//四位二进制数,最低位为不定值x
6’o1x          	//位宽为6的八进制数,其值的二进制表示为:6’b001xxx 
16’h1z0x    	/*位宽为16的十六进制数,其值的二进制表示为:
                        16’b0001zzzz0000xxxx */

字符串是双引号内的字符序列。不能分成多行书写。
例:$display (“the sum is %d,j= %d”,data_out,j);

always敏感信号

分为电平敏感和边沿敏感,两者不可混用

不同的数据截断

assign sum1= (a+b)>>1;		//8位+8位,舍去溢出位后右移
assign sum2= (0+a+b)>>1;	//两个8位扩展为32位,右移后截断,最高位为溢出位

//另一种实现方式
wire [8:0] sum_ext;
assign sum_ext = {1'b0,a} + {1'b0,b};
assign sum2 = sum_ext[8:1];

移位

算数右移(>>>)时移动的是最高位,其它补0。

逻辑移位(<<, >>)左移时位宽增加,右移时位宽不变
左移时乘2n, 右移时除2n

计数器归零

一个4位2进制变量,技术到15的时候,下一个时钟会自动归零

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值