SWJTU 数电实验报告——1 位十进制可逆计数器设计

题目描述:

一、 实验目的

1、 学习 Verilog HDL 基本时序电路设计。 2、 学习并掌握时序电路的状态观测方法。 3、 学习并掌握时序电路的时序波形观测方法。

二、 实验内容

设计一个 1 位十进制可逆计数、译码、显示电路。 1. 基本功能及指标要求 (1) 控制信号 upd==1 时计数器 0 -> 9 循环计数,upd==0 时,9 -> 0 循环计数; (2) 具有异步清零(clr)、同步置数(load)、同步使能(en)功能; (3) 进位(加计数时)、借位(减计数时)功能,加计数时 CO=1@Q==9,减计数 时 CO=1@Q==0; 2. 引脚锁定 (1) 计数器的 load 锁定到 SW3,upd 锁定到实验箱的 SW2,en 锁定到 SW1,clr 锁 定到 SW0; (2) 计数器的输出 Q 和 CO 作为待观测的信号锁定到指示灯 LED3..LED0,LED4; (3) clkin 锁定到 CLK0(PIN_88); 3. 实验测试 (1) 将时钟 CLK0 的频率设置为 1~2Hz 或 PULSE,观察、验证“计数、清零、使 能、加减、置数”等功能,并记录实验现象(状态图,非正常计数的状态现象可以 用文字单独记)。 (2) 将时钟 CLK0 的频率设置为 1024~4096Hz,用实验箱上的逻辑分析仪

(CH0~CH7)观察计数器的时钟输入 clkin 和计数器输出 CO、Q[3:0]的波形。完整记 录 1 个电路周期的波形,画虚线标示清楚各信号之间的相位关系(边沿对齐),记 录时钟频率、触发字及采样率。 4. 提高性实验内容(选做) (1) 实现两位/多位十进制计数功能; (2) 其它。

三、 预习要求

1. 参考实验 2、参考实验教材《数字电子技术实验教程》Page87~89 的内容,完成实 验电路代码的编写。 2. 对实验电路进行功能仿真,并将仿真结果截图打印(参照后面的报告要求)。 3. 列出引脚锁定分配表(信号名->主板器件名->引脚号)。

四、 逻辑分析仪的使用

逻辑分析仪(8 踪波形显示)采用实时采样回放模式,可以对其中 1 踪信号(CH0)测 量频率和占空比,采样率可在 2kSps~100MSps 调节,采用电平触发。所有参数设置均通过 键盘设置,按确认键进入/退出设置状态,再按确认键确认相关设置,方向键滚动光标和改 变参数。建议将采样率设为最高被测信号频率的 10~20 倍(系统默认为 100ksps)。频率计 最高测试值为 100MHz.

实时采样回放时为使看到的波形是稳定的,必须在输入信号满足特定状态时触发一次采 样并回放,当这一个触发状态是周期性出现时,显示的波形就是稳定的。

本系统采用了字触发方式,可以设置一级触发字,触发字为 8 位,一般可以设置为逻辑 分析仪捕捉到的任意一个状态值。系统启动时默认的触发字是 0000_0000b。若输入信号中 没有与触发字相同的状态,则采样不能触发,也即不能显示稳定波形或者之前显示的波形不

西南交通大学 电子技术实验室 数字电子技术实验

能刷新,屏幕右上角显示“Failure”;触发成功时显示“Triggering”。

有时会遇到逻辑分析仪的个别通道损坏的情况,比如某个通道无论接入什么信号总是显 示高电平或者总是低电平,或者信号接入 CH1 而 CH2 也显示同样的波形,此时应避开有故 障的通道,使用正常工作的通道。

五、 实验报告要求

1、 列出通电测试结果。 2、 列出实验过程出现的问题及解决措施。 3、 截图要求 (1) 代码截图必须包含 Quartus 的标题栏(图 3 红线处); (2) 仿真波形截图必须包含软件窗口的标题栏(图 4 红线处); (3) 图上文字大小合适,信号名清晰可见; (4) 波形清晰可读; (5) 波形顺序应当是上面为输入信号,下面为输出信号; (6) 截图显示 1~2 个周期。

 思路:

本次实验有置数操作,置数可能是超过10的数,因此在判断是否到达加法器上限的时候,需要判断是否越界,而不是判断是否等于9。同时需要搞清楚置数和使能端的关系,只有在使能端为高电平时才有可能进行置数,对于进位标志 CO 也要注意和使能端的关系,其他就是类似C语言的代码。

代码:

module emm(clkin,upd,clr,load,en,data,Q,CO);
	input clkin,upd,en,clr,load;
	input [3:0] data;
	output reg [3:0] Q;
	output wire CO;

	always @(posedge clkin, negedge clr)
	begin
		if (!clr)		// 如果清零信号为低电平(异步清零)
			begin
				Q <= 4'd0;				// 寄存器 Q 被异步清零
			end 
		else if (!load)                  // 如果加载信号为低电平
			Q <= data;                   // 寄存器 Q 被加载输入数据
		else if (en)                     // 如果使能信号为高电平
			begin
			if (upd == 1'd1)                    // 如果更新信号为高电平为加法器
				begin
				if (Q == 4'd9 | Q > 4'd9)           // 如果 Q 的当前值大于等于9
					Q <= 4'd0;           // 将 Q 重置为0
				else
					Q <= Q + 4'd1;        // 否则,将 Q 加一
				end
			else                        // 如果更新信号为低电平 减法器
				begin
				if (Q == 4'd0 | Q < 4'd0 | Q > 4'd9)           // 如果 Q 的当前值为0或大于9
					Q <= 4'd9;           // 将 Q 设置为9,借位
				else
					Q <= Q - 4'd1;        // 否则,将 Q 减一
				end
		end
	end  
	
	assign CO = (clr)&((upd & (Q == 4'd9)) | (~upd & (Q == 4'd0)));
	// CO 输出计算:如果更新信号为高电平且 Q 为 4 位的 9,或者更新信号为低电平且 Q 为 4 位的 0,则 CO 为高电平,否则为低电平
endmodule 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值