Skip to content

BCD 码加法计数器小项目

BCD Adder Counter Mini-Project

  • Verilog HDL_Machine Problem

模为60的BCD码加法计数器代码:

功能:从data赋值数字开始计数,逢60向count进1

image1

  • 只声明 cout和qout为reg型信号:

cout和qout之所以特别声明为reg,是因为它们在逻辑上需要保持或存储一些值,而其他信号仅仅是用于传递即时的状态或信号所以被默认定义为了wire型,无需存储。

  • 33行电路会一直检测 qout 和 cin 的值,并实时计算并更新 cout 的值

  • 第21行:计数过程中,个位是最先变化的部分。

当个位从1001(即BCD中的9)增加到1010时,就超出了BCD的有效范围,因为BCD的每一位只能表示从0到9的十进制数。这时个位需要被重置到0000

  • 15行:rstn是被设计成响应外部事件的信号,异步复位是复位有自己的信号沿,不在时钟沿复位

  • 通常在物理情况下电路上电后短时间内拉低rstn信号,系统的状态可以被明确设定为初始状态,之后rstn会被释放(设为高电平),系统开始正常工作。

  • Verilog中的always块是并发执行的(与其他always块相对),但块内部的if-else语句是基于条件选择的顺序执行逻辑。即每次always块被触发时,基于当前的输入和状态,只有一个分支会被选择执行。


TB:

image2

  • tb中哪些信号定义为wire型?

在Verilog测试平台(testbench)中,通常会将从被测试的模块(也就是被称为设备待测,Device Under Test,DUT)的输出端口连接的信号声明为wire类型。这是因为测试平台中不需要主动驱动这些信号,只需要从DUT接收值。

  • reg类型的信号在测试平台中用于生成刺激信号(或称作测试向量),用于驱动DUT的输入端口。
  • 即使在RTL设计文件中已经声明了qout的位宽,也需要在测试平台文件中再次声明它
  • 26~32行这部分代码的作用是在仿真开始时设置data信号的初始值,然后在仿真过程中改变这个值,并在一定时间后结束仿真。这是典型的测试平台行为,用来验证设计在不同的输入情况下的响应,以及确保在给定的条件下,设计的行为是正确的

波形图:

image3