首页 > 其他分享 >对计数器电路编写testbench

对计数器电路编写testbench

时间:2023-03-22 20:56:06浏览次数:30  
标签:reset begin end 电路 cin 计数器 qout testbench CYCLE

对一个计数器电路编写测试平台进行功能验证。
电路功能:
(1)BCD码计数,从8’h00~8’h59范围的60进制循环计数。
(2)同步复位功能(reset是复位信号)。
(3)加载初始值功能(load是加载控制信号,data是加载数据)。
(4)计数动作允许功能(cin是计数使能信号)。
(5)动作优先级:复位>加载初始值>计数允许。

rtl代码如下:

查看代码
module count60(qout, cout, data, load, cin, reset, clk);
output  [7:0]   qout;
output          cout;
input   [7:0]   data;
input          load, cin, reset, clk;
reg     [7:0]   qout;
always @(posedge clk)
   begin
        if(reset)                        //同步复位
                                qout = 7'b0; 
        else   if(load)                //同步置数
                                qout = data;
               else if(cin)               //cin=1,开始加一计数,否则qout不改变
              begin  
                   if(qout[3:0] == 4'h9)   //低位为9
                               begin 
                                            qout[3:0] = 4'b0;   //是,则清零
                  if(qout[7:4] == 4'h5)
                                            qout[7:4] = 4'b0; 
                   else  
                                          qout[7:4] = qout[7:4] + 1'b1;         //高位加1
                                end
        else
                       qout[3:0] = qout[3:0] + 1'b1;
           end
   end
assign cout = ((qout == 8'h59) & cin)? 1'b1 : 1'b0;  //进位输出
endmodule

testbench:

查看代码
 `timescale 1ns/1ns

module tb_count60();
reg clk;
reg reset;
reg load;
reg cin;
reg reset;

reg [7:0] data;
wire [7:0] qout; 
wire [7:0] cout;

parameter CYCLE=10;

count60 count60(
       .clk(clk),
       .reset(reset),
       .load(load),
       .cin(cin),
       .data(data),
       .qout(qout),
       .cout(cout)

       );

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

integer a;
integer b;

initial begin  //have use 1~3;not use 100~200;  reset!!!!!!!!!!!!

           reset = 0;
 
          a={{$random}%3+1};
          b={{$random}%101+100};

forever begin
        
           reset = 1;
         #(a*CYCLE);
           reset=0;
        #(b*CYCLE);
        
      end
         end

integer c;
integer d;

initial begin  //have use 1~3;not use 40~80;  load!!!!!!!!!!!!

           load = 0;
 
          c={{$random}%3+1};
          d={{$random}%41+40};

forever begin
       
           load = 1;
        #(c*CYCLE);
           load=0;
       #(d*CYCLE);
        
        end
         end

integer e;
integer f;

initial begin  //have use 30~90;not use 1~10;  cin!!!!!!!!!!!!

           cin = 0;
 
          e={{$random}%31+60};
          f={{$random}%10+1};

forever begin
        
           cin = 1;
          #(e*CYCLE);
        
           cin=0;
          #(f*CYCLE);
        end
         end

initial begin  //have use 30~90;not use ;  data!!!!!!!!!!!!

         data=0;
 forever begin
          data[3:0]={$random}%10;
          data[7:0]={$random}%6;
              #(10*CYCLE);
       end

         end

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


endmodule

标签:reset,begin,end,电路,cin,计数器,qout,testbench,CYCLE
From: https://www.cnblogs.com/love-dog/p/17245387.html

相关文章

  • 排序电路的testbench和覆盖率应用
    被测电路功能:(1)输入3个数据,按照由小到大的顺序排列输出。            (2)低电平系统复位;输出与时钟同步。代码如下:查看代码modulesort3(clk,xr......
  • 嵌入式硬件电路设计的基本技巧
        不光是代码有可读性的说法,原理图也有。很多时候原理图不仅仅是给自己看的,也会给其它人看,如果可读性差,会带来一系列沟通问题。所以,要养成良好习惯,做个规范的原理图。......
  • 步骤计数器
    <!DOCTYPEhtml><html><head><metacharset="utf-8"><title></title><linkrel="stylesheet"href="new_file.css"></head><......
  • 数字电路1. 逻辑门电路及常见门电路实现
    一、逻辑门电路的概念逻辑门电路是一种电路设计,用于处理数字信号(仅包括0和1)。它们使用逻辑门来执行不同的逻辑操作,如与门、或门、非门、异或门等,这些门基于布尔代数。逻辑门......
  • 模拟电子技术之二极管及其基本电路
    从这一部分开始,内容的难度开始加大,下面一起来看一下二极管都有哪些知识点​​半导体基本知识​​​​PN结的形成及特性​​​​二极管及其简化模型​​​​二极管基本电路......
  • 第四章 三极管放大电路
    放大的概念:放大的目的是将微弱的变化信号放大成较大的信号。放大的实质:用小能量的信号通过三极管的电流控制作用,将放大电路中直流电源的能量转化成交流能量输出。对......
  • 【PSIM-1】搭建一个Buck电路
    来源:https://www.bilibili.com/video/BV1k24y167dC/?spm_id_from=333.880.my_history.page.click&vd_source=08be4a3fa623b037a59b24fd3f20aced  【1-1】新建图纸:File......
  • 如何看待谷歌 Jeff Dean 用 AI 6 小时就能设计一款芯片,强力碾压集成电路设计专家?
    知乎 《如何看待谷歌JeffDean用AI6小时就能设计一款芯片,强力碾压集成电路设计专家?》    https://www.zhihu.com/question/390314423/answer/2650752673  ......
  • N8 开发电路板 - 使用 和 笔记
    N8电路,N58的使用和笔记1.学习电路,官方提供的封闭电路。N58有192pin。《硬件设计指南》中有详细说明  02_N58模块电路N58引脚:3部分天线3根:ANT_MAIN、ANT_GNSS、AN......
  • 电路和电场
    金属导线和电气、电子部件组成的导电回路称为电路。在电路输入端加上电源使输入端产生电势差,电路连通时即可工作。电路可以实现电能的传输、分配和转换,还可以实现信号的传......