首页 > 其他分享 >排序电路的testbench和覆盖率应用

排序电路的testbench和覆盖率应用

时间:2023-03-22 20:45:26浏览次数:35  
标签:begin xrst clk list else 电路 && testbench 排序

被测电路功能:(1)输入3个数据,按照由小到大的顺序排列输出。
                        (2)低电平系统复位;输出与时钟同步。

代码如下:

查看代码
module sort3(clk, xrst, a, b, c, ra, rb, rc);

input   clk,xrst;
input[3:0]   a,b,c;
output[3:0]   ra,rb,rc;
reg[3:0]   ra,rb,rc;
reg[3:0]   va,vb,vc;  //temporary variables

always@(a or b or c)
begin
     {va, vb, vc} = {a, b, c};//任务调用
     sort2(va, vb);
     sort2(va, vc);
     sort2(vb, vc);
end
always@(posedge clk or negedge xrst)
begin
    if(!xrst)
     begin
          {ra, rb, rc} <= 0;
      end
    else begin
           {ra, rb, rc} <= {va, vb, vc};
         end
     end
task sort2;

inout[3:0]   x, y;
reg[3:0]   tmp;
if(x>y)
     begin
       tmp = x;
        x = y;
        y = tmp;
      end
endtask
endmodule

 testbench的编写

查看代码
`timescale 1ns/1ns

module tb_sort3();

reg clk;
reg xrst;
reg [3:0] a;
reg [3:0] b;
reg [3:0] c;
wire [3:0] ra,rb,rc;

parameter CYCLE=10;

sort3 sort3(.clk(clk),
       .xrst(xrst),
       .a(a),
       .b(b),
       .c(c),
       .ra(ra),
       .rb(rb),
       .rc(rc));

initial begin
 clk = 0;
 forever begin
  #(CYCLE/2);
  clk = 1;
  #(CYCLE/2);
  clk = 0;
 end
end

initial begin
 xrst = 0;
 #(5*CYCLE);
  xrst = 1;
end

integer i;
initial begin 
   a=0;b=0;c=0;
   #(3*CYCLE);
   for(i=0;i<1000;i=i+1) begin
   a={$random}%16; b={$random}%16; c={$random}%16;
   #(2*CYCLE);
   end
   $finish;
end

reg [21:0] list;
integer sum;
integer i,j;
initial begin
   list=0; sum=0; a=0; b=0; c=0; i=0; j=0;
   #(3*CYCLE);
   for(i=0;i<1000;i=i+1) begin
   a={$random}%16; b={$random}%16; c={$random}%16;
   #(2*CYCLE);
   end

    for(j=0;j<22;j=j+1) begin
    sum =sum+list[j];
    end
    $display("function cov is %d/22",sum);
  end

always@(a or b or c) begin
  if(a<5 || a==5)                list[0]=1;
  else if(a>5 && a<10)           list[1]=1;
  else if(a>10 || a==10)         list[2]=1;

  if(b<5 || b==5)                list[3]=1;
  else if(b>5 && b<10)           list[4]=1;
  else if(b>10 || b==10)         list[5]=1;

  if(c<5 || c==5)                list[6]=1;
  else if(c>5 && c<10)           list[7]=1;
  else if(c>10 || c==10)         list[8]=1;


  if(a>b && b>c)                 list[9]=1;
  else if(a==b && b>c)           list[10]=1;
  else if(a<b && a>c)            list[11]=1;
  else if(a>b && b==c)           list[12]=1;
  else if(a<b && a==c)           list[13]=1;

  if(b>c && c>a)                 list[14]=1;
  else if(b==c && c>a)           list[15]=1;
  else if(b<c && b>a)            list[16]=1;
  else if(b<c && b==a)           list[17]=1;

  if(c>a && a>b)                 list[18]=1;
  else if(c<a && c>b)            list[19]=1;
  else if(c==a && c>b)           list[20]=1;
  else if(a==b && b==c)          list[21]=1;
end

initial begin
      #(6000*CYCLE);
	$display($time,"sim end!!!");
	$finish;
end


endmodule

波形

覆盖率:

标签:begin,xrst,clk,list,else,电路,&&,testbench,排序
From: https://www.cnblogs.com/love-dog/p/17245364.html

相关文章

  • 大数据量实时统计排序分页查询(并发数较小时)
    大数据量实时统计排序分页查询的瓶颈不是函数(count,sum等)执行,不是having,也不是orderby,甚至不是表join,导致慢的原因就在于“数据量太大本身” 化整为零就是将表划分为M......
  • 一种高效的适宜于海量数据排序的算法
    常用的排序算法:  冒泡序,快速排序,直接选择排序,堆排序,希尔排序,归并排序等;无指针分组排序算法  冒泡排序不适宜于逆序  快速排序算法能减少逆序时所消耗的扫描和数......
  • 基于go/pprof用于常用排序场景下的性能分析
    我们常用的排序常见的有:冒泡选择插入希尔快排归并堆排计数基数桶排序关于排序算法的时间复杂度、空间复杂度这里不加赘述,今天主要分享通过go性能分析工具p......
  • 快速排序
    给定一个数组[3,5,2,1,6,2,5,8]快速排序就是利用不停分割的思想将数组分块排序首先选定一个基准,即key,这里一般选择最左边的,我们从两边开始移动指针分别找到小于......
  • 排序-冒泡
    冒泡排序简介冒泡排序属于一种交换排序,基本思想:所谓交换,就是根据序列中两个记录键值的比较结果来对换这两个记录在序列中的位置。交换排序的特点是:将键值较大的记录向......
  • 快速排序
    快速排序算法思想找一个主元x从左边找>=x的数,从右边找<=x的数然后交换位置递归地处理左右两部分时间复杂度O(nlogn)代码voidquick_sort(intq[],intl......
  • java实现多字段排序(普通对象List和MapList)
    publicclassSortTest{publicstaticvoidmain(String[]args){//普通对象listsortVOList();//mapListsortMapList();......
  • Treemap按key和value降序排序
    Treemap是一种根据键排序的数据结构,可以通过重载它的比较器来按照值排序。要按键排序,可以使用默认的比较器,而要按值排序,可以创建一个自定义的比较器并将其传递给treemap的......
  • 【数据结构与算法】堆与堆排序
    堆与堆排序1堆的概念堆用于维护一个数集。堆是一个完全二叉树小根堆:每个结点都小于等于它的左右子结点(递归定义)推论:每个结点都是以其为根节点的子树的最小值......
  • 26.删除排序数组中的重复项——学习笔记
    题目:给你一个升序排列的数组nums,请你原地删除重复出现的元素,使每个元素只出现一次,返回删除后数组的新长度。元素的相对顺序应该保持一致。由于在某些语言中不能改变数组......