verilog中#是什么意思?#有什么作用?

在使用verilog语言进行硬件描述时,你是否也经常用到#这个符号,那么你是否关心过这个符号到底是什么意思呢?它的作用是什么呢?

1.可用作参数的传递

`我们在进行verilog编程时经常会遇到如下一样的代码块

module	study_test #(
	parameter c = 12'd169
	)
	(
	input	wire	[11:0]	a,
	output 	wire	[11:0]	b
	)
	assign b = a + c;
endmodule
	

上述的代码块在最开始定义模块时#的作用就是为了将169这个常数在一开始的时候传递给c,是一个参数传递的作用。值得注意的是在例化的时候代码如下

study_test 			study_test #(
	.c (12'd288)
	)
	(
	.a	(a),
	.b	(b)
	)

例化以后的模块用#将200的值传递给c,那么之前定义的169将不会被使用。

2.用于时序仿真中的延时

而在仿真中我们经常又可以看到这样的语句

always #20	clk = ~clk;

在这里的意思是每通过延时20个事件单位后执行clk信号的翻转,因此#还可以表示延时的意思。

以上就是#在verilog中的作用,如果你觉得这篇回答对你有帮助,请帮我点赞收藏加关注,如果有哪些不妥的地方也请评论指正。

  • 8
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
Verilog ,赋值运算符 "<=" 和关系运算符 "<=" 是不同的,虽然它们的符号相同,但是它们的含义和用法不同。其 "<=" 用于非阻塞赋值,而 "<=" 用于比较操作符,如小于等于。在 Verilog ,"<=" 用于 always 块,表示并行执行的赋值操作,而 "=" 表示顺序执行的赋值操作。这两种赋值操作符的区别在于执行赋值时的顺序不同。 例如,在 always 块使用非阻塞赋值 "<=",则会在 always 块赋值语句执行完后,同时执行赋值操作。而使用阻塞赋值 "=" 则表示顺序执行的赋值操作,即先执行一个赋值操作,再执行下一个赋值操作。因此,阻塞赋值会按照代码的顺序进行赋值,而非阻塞赋值则是并行执行的,不会受到代码顺序的影响。 举个例子:假设有以下代码: ```verilog always@(posedge clk) begin a <= b; b <= c; end ``` 在这个代码,当时钟上升沿到来时,a 会被赋值为 b 的值,而 b 则被赋值为 c 的值。如果使用阻塞赋值 "=",则会先执行 a 的赋值操作,再执行 b 的赋值操作。而如果使用非阻塞赋值 "<=",则 a 和 b 的赋值操作会同时进行,完全并行。 因此,在使用赋值操作符时需要根据实际需要选择合适的赋值方式,以确保设计的正确性。需要注意的是,非阻塞赋值 "<=" 在时序逻辑电路使用较多,而阻塞赋值 "=" 在组合逻辑使用较多。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

文华也曾献与你

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值