Verilog学习--UDP用户自定义原语

介绍

Verilog有内置的原语,如门、传输门和开关。这些都是比较小的单元,如果我们需要更加复杂的原语,Verilog提供了UDP(用户自定义原语)

UDP可以定义组合逻辑时序逻辑

语法

  • primitive开头,以endprimitive结尾
  • 只能有一个输出端口
  • 可以有多个输入端(最多十个?)
  • UDP不能出现在module...endmodule
  • 输出端口必须在列表中的第一个
  • 组合逻辑:输出端不能是reg
  • 时序逻辑:输出端必须是reg
  • UDP中所有的端口都是标量

组合逻辑

primitive or_gate(dout, a, b);	//dout是输出端口,必须放在第一位
    output dout;	//输出端口
    input a, b;		//输入端口
    
    table  //这是一个 或门,UDP中逻辑关系出现在 table和endtable中
        //B	C :A
           ?  1  :   1;
           1  0  :   1;
           1  1  :   1;
           0  0  :   0;
    endtable
    
endprimitive

逻辑描述语句,要写在tableendtable之中,每一行代表一个case

在UDP中,不允许出现高阻态z,其中?和含义和x一样,都表示不定态

时序逻辑

在时序中,输出端必须定义为reg类型

在时序逻辑中,可以通过initial给输出端赋值一个初始值

primitive dff (q, clk, d);	//输出端口必须放在第一位
    output q;
    input clk, d;
    
    reg q;	//输出端必须是reg类型
    
    table
        //clk  d  :  q(cur_state)  :   q(next_state)
            0   1           ?           :            -  ;
            1   1           ?           :            1  ;
            1   0           ?           :            0  ;
    endtable
endprimitive

这是一个高电平触发的D触发器,-表示次态无信号变化

在这个例子中,出现了两次:

  • 左边的:,其左边代表输入端,右边代表输出端的现态
  • 右边的:,其右边代表输出端的次态

在组合逻辑的例子中,因为没有涉及到输出与当前状态的关系,只出现了一次:,左边是输入端,右边是输出端

再看一个上升沿触发的D触发器

primitive dff (q, clk, d);
    output q;
    input clk, d;
    
    reg q;
    
    table
        //clk   d  :  q(cur_state)  :   q(next_state)
            00   1           ?           :            -  ;
            10   1           ?           :            -  ;
            01   0           ?           :            0  ;
    endtable
    endtable
endprimitive

table中,不必列出所有的可能

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值