systemverilog之组合逻辑新的写法

一、组合逻辑新写法

组合逻辑新写法

// Use like this.这种写法电路简洁,而且没有bug,如果配合one-hot使用,效果更好
assign dat  = {$bits(a){(x==2'd1 && y==2'd1)}} & a  ||
              {$bits(b){(x==2'd2 && y==2'd2)}} & b    ||
              {$bits(c){(x==2'd3 && y==2'd3)}} & c    ||
              {$bits(d){(x==2'd4 && y==2'd4)}} & d;

// Dont use like this!!
assign dat  = (x==2'd1 && y==2'd1)? a :
              (x==2'd2 && y==2'd2)? b :
              (x==2'd3 && y==2'd3)? c : d;

         

SystemVerilog是一种用于电子系统级设计和验证的语言,它扩展了Verilog的功能,其中包括了断言(assertions)的概念。组合逻辑断言(Combinational Logic Assertions,简称CLA)主要用于检查在特定时间点组合逻辑电路的状态是否符合预期。在SystemVerilog中,断言可以带参数,以便在不同的场景下重用断言逻辑组合逻辑断言通常用`assert`、`assume`或`cover`等关键字来声明。带参数的断言可以通过传递参数来定义一系列条件,这些条件可以是任意的逻辑表达式。参数化断言的好处在于可以避免重复编写相同的断言代码,提高代码的可维护性和可重用性。 下面是一个简单的示例: ```systemverilog module combinational_assertions_example(); // 参数化断言的定义 property p_example(input bit a, input bit b); @(posedge clk) a |-> b; // 例如,当a为真时,期望b也为真 endproperty // 将参数化断言实例化 assert property (p_example(a, b)) else $display("断言失败: 当a为真时,b应为真"); initial begin bit clk; bit a, b; clk = 0; forever #5 clk = ~clk; // 生成时钟信号 // 测试断言的场景 a = 0; b = 0; #10; a = 1; b = 0; #10; a = 1; b = 1; #10; // 更多测试场景... end endmodule ``` 在这个例子中,`p_example`是一个参数化的断言属性,它接收两个输入参数`a`和`b`。在实例化断言时,将具体的信号传递给`p_example`。如果在时钟上升沿时`a`为真但`b`不为真,则断言失败,并打印出相应的错误消息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值