Verilog 语法task和function不可以使用initial和always

记录一下

如题,Verilog 语法task和function不可以使用initial和always

详细可参考:链接

do文件内是可以调用别的do文件的,如下图
在这里插入图片描述

----过程赋值连续赋值
assign无assign(过程性连续赋值除外)有assign
符号使用 “=” 或 “<=”只使用“=”
位置在always语句或initial语句中均可出现不可出现于always语句和initial语句
执行条件与周围其他语句有关等号右端操作数的值发生变化时
用途驱动寄存器驱动线网

连续赋值:
1)语法上,有关键词“assign”来标识;
2)左侧被赋值的数据类型必须是线网型数据(wire);
3)连续赋值语句不能出现在过程快中(initial/always);
4)连续赋值语句主要用来对组合逻辑进行建模以及线网数据间进行描述;
5)连续赋值语句产生作用后,赋值表达式中信号的任何变化都将立即被反映到赋值线网型数据的取值上;
过程赋值:
1)语法上,没有关键词“assign”;
2)左侧被赋值的数据类型必须是寄存器类型的变量(reg);
3)过程性连续赋值语句只能出现在过程块中;
4)过程性连续赋值语句主要用来对时序逻辑电路进行行为描述;
5)在过程赋值语句的情况下,只有在过程赋值语句被执行时才执行赋值操作,语句执行完后被赋值变量的取值不再受到赋值表达式的影响;
过程性连续赋值语句:
在verilog HDL中,有两组过程性连续赋值语句可以实现连续赋值:assign-deassign,只能用于对寄存器型变量的连续赋值操作,而不能用来对线网型数据进行连续赋值操作;force-release,它不仅能对寄存器型变量产生作用,也对线网型数据产生作用。force语句的优先级高于assign 。
deassign 撤销对某一个寄存器型变量的连续赋值后,该寄存器变量仍然保持deassign操作之前的取值。
过程性连续赋值语句比普通的过程赋值语句有更高的优先级。
举例:异步清零的D触发器;

module dff_asyn_clear(
	input 		clk	,
	input		clr	,
	input		d	,
	output reg	q
);
always@(clr)begin 		//用于实现异步清零的always块,强制清零,过程性连续赋值语句的优先级高于过程赋值语句
	if(!clr)
		assign q =0 ;
	else
		deassign q;
end

always@(posedge clk)begin //用于实现D触发器正常工作的always块
	q = d;
end

endmodule
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值