Verilog UDP(User Defined Primitives)

本文详细介绍了Verilog中的用户定义原语(UDP),包括其语法、端口限制、功能体描述,以及组合UDP和时序UDP的特性。通过示例解释了UDP在电平敏感和边沿敏感情况下的工作原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

User Defined Primitives

这是一篇很浅显易懂的介绍Verilog UDP的文章,翻译过来留存,原文可参考这里

 

介绍

Verilog有内建原语如门,传输管,开关等,这些都是相当小的原语,如果我们需要更为复杂的原语,verilog提供了UDP,也就是用户定义原语(User Defined Primitives). 使用UDP可以建模组合电路和时序电路。

语法

UDP以保留字primitive开始,以endprimitive结束,并紧接着原语的Ports/terminals。这与module的定义类似。UDP应该定义在module和endmoudle外面。

View Code
 1  //This code shows how input/output ports
2 // and primitve is declared
3 primitive udp_syntax (
4 a, // Port a
5 b, // Port b
6 c, // Port c
7 d // Port d
8 );
9 output a;
10 input b,c,d;
11
12 // UDP function code here
13 endprimitive

在上面的语法中,udp_syntax是原语的名字,包含端口a,b,c,d。

端口

  • 一个UDP只可以包含一个输出和最多10个输入。
  • 输出端口应该是第一个端口,然后才是一个或多个输入端口。
  • 所有的UDP都是标量,也就是,向量端口不允许。
  • UDP不能是双向端口。
  • 时序UDP的输出端需要额外声明为reg类型。
  • 组合UDP的输出端声明为reg类型是非法的。

功能体

原语的功能(包括组合和时序)在一个table表里描述,以保留字endtable结束。如以下代码所示。对于时序UDP,我们可以使用initial 给输出赋一个初始值。

View Code
 1 // This code shows how UDP body looks like
2 primitive udp_body (
3 a, // Port a
4 b, // Port b
5 c // Port c
6 );
7 output a;
8 input b,c;
9 // UDP function code here
10 // A = B | C;
11 table
12 // B C : A
13 ? 1 : 1;
14 1 ? : 1;
15 0 0 : 0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值