使用D触发器设计8进制计数器数字电路

该文详细介绍了如何使用D触发器设计一个8进制计数器,包括设计目的、实验要求,以及具体步骤如状态转移图、卡诺图、电路图设计、仿真和烧录过程。文中还展示了正确的仿真结果。

一.实验目的

1.掌握使用逻辑方法设计时序逻辑数字电路。

2. 掌握使用原理图完成时序逻辑电路的设计。

3. 掌握时序逻辑电路的编译、调试、仿真、烧录方法。

4. 理解时序逻辑数字电路的设计思想。

二.实验要求

使用D触发器设计8进制计数器数字电路,并完成电路的仿真和烧录过程。

建立原生状态图:

 状态转移表:

 时钟方程:

CP0=CP1=CP2=CP

输出函数的卡诺图和输出方程:

次态卡诺图:

 

 次态卡诺图得:

设计电路图

主要有3个jk触发器、一个显示译码器(共阳级)、一个能产生CP周期为1秒钟的时钟信号的模块器件和一些简单的逻辑器件

正确仿真结果如下:

 

烧录结果

省略

 以上就是使用D触发器设计8进制计数器数字电路过程,若对各位有帮助,请点点个赞或关注!!

<think>我们正在设计一个基于D触发器8进制计数器8进制计数器需要3个D触发器(因为2^3=8),每个触发器代表一个二进制位(Q0,Q1,Q2),计数范围从000到111(0到7)。计数器在时钟上升沿时状态更新。我们需要设计每个D触发器的输入(D0,D1,D2)作为当前状态的函数,使得状态按二进制加法计数递增。步骤:1.状态转移真值表(当前状态Q2,Q1,Q0->下一个状态D2,D1,D0):当前状态|下一个状态Q2Q1Q0|D2D1D0---------|---------000|001001|010010|011011|100100|101101|110110|111111|0002.通过真值表,我们可以写出每个D的表达式(使用卡诺图化简):D0=Q0'(即每个时钟沿翻转一次,因为最低位每次都要翻转)但实际上,观察真值表,我们发现:D0=Q0'(这个结论不对,因为000->001时D0=1,而当前Q0=0,所以D0=Q0'=1;001->010时,当前Q0=1,D0=0,即Q0'=0,符合。所以D0=Q0'是正确的)但是,对于D1和D2,需要观察:D1:当Q0=1时,D1=Q1';当Q0=0时,D1=Q1。所以D1=Q1XORQ0D2:当Q1和Q0都为1时,D2=Q2';否则D2=Q2。所以D2=Q2XOR(Q1ANDQ0)验证:当前状态000:D0=1,D1=0,D2=0->001正确001:D0=0,D1=0XOR1=1,D2=0->010正确010:D0=1,D1=1XOR0=1,D2=0->011正确011:D0=0,D1=1XOR1=0,D2=0XOR(1and1)=1->100正确100:D0=1,D1=0XOR0=0,D2=1XOR(0and0)=1->101正确101:D0=0,D1=0XOR1=1,D2=1XOR(0and1)=1->110正确110:D0=1,D1=1XOR0=1,D2=1XOR(1and0)=1->111正确111:D0=0,D1=1XOR1=0,D2=1XOR(1and1)=0->000正确因此,逻辑表达式为:D0=NOTQ0D1=Q1XORQ0D2=Q2XOR(Q1ANDQ0)3.在QuartusII中,我们可以使用原理图设计:-放置3个D触发器(dff),每个D触发器有时钟CLK,数据输入D,输出Q。-我们需要一个全局时钟信号,以及一个全局复位信号(异步复位,低电平有效,连接到每个D触发器的CLRN)。-使用非门、与门、异或门来实现上述逻辑。4.时钟分频:如果直接使用开发板的高频时钟(如27MHz),计数太快,人眼无法观察。因此,需要先分频得到1Hz的时钟(每秒一个脉冲)。分频器的设计可以参考之前的方法(引用[3])。但注意,分频器在仿真中可能因为时间尺度问题看不到变化,但烧录后可以正常显示。5.仿真:在QuartusII中创建波形文件,设置时钟信号,观察Q0,Q1,Q2的变化。注意,由于分频后的时钟周期为1秒,仿真时如果只仿真几微秒,则看不到变化。我们可以先不用分频器,直接用高频时钟仿真(但仿真时间设置长一些,比如几个时钟周期),或者暂时不用分频器,验证计数逻辑。6.烧录:将设计烧录到FPGA开发板(如DE0或DE2),用LED显示计数器的输出(Q0,Q1,Q2),也可以用数码管显示(通过译码器,如7447,将二进制转换为7段数码管显示)。具体步骤:一、创建工程:1.打开QuartusII9.0,创建新工程,选择目标器件(如CycloneIIEP2C20F484C7,对应DE2开发板)。2.新建原理图文件(BlockDiagram/SchematicFile)。二、绘制原理图:1.放置3个D触发器:在元件库中搜索“dff”,然后放置三个。每个dff的引脚:D(数据输入),CLK(时钟),CLRN(异步清零,低电平有效),Q(输出)。2.添加输入输出引脚:时钟信号(clk),复位信号(reset_n,低电平有效),以及三个输出(q0,q1,q2)。3.添加门电路:非门(not)、两输入与门(and2)、两输入异或门(xor)。4.连接电路:-将全局时钟clk连接到三个D触发器的CLK引脚。-将复位信号reset_n连接到三个D触发器的CLRN引脚(注意,复位信号低电平有效,所以当reset_n=0时,触发器清零)。-第一个触发器(代表最低位Q0)的D输入连接到一个非门,非门的输入来自Q0的输出。即:D0=NOTQ0。-第二个触发器(Q1)的D输入:将Q1的输出和Q0的输出连接到一个异或门,异或门的输出连接到D1。即:D1=Q1XORQ0。-第三个触发器(Q2)的D输入:将Q1和Q0连接到一个与门,然后将与门的输出和Q2的输出连接到一个异或门,异或门的输出连接到D2。即:D2=Q2XOR(Q1ANDQ0)。5.将三个触发器的Q输出连接到输出引脚(q0,q1,q2)。三、分频器设计(可选,用于实际烧录时观察):1.由于直接使用高频时钟计数太快,我们需要一个分频器将高频时钟(如27MHz)分频为1Hz。2.分频器可以用计数器实现,例如27MHz分频到1Hz,需要计数27e6次。我们可以设计一个计数器,当计数到27e6/2-1时翻转输出信号(这样得到50%占空比)。3.在原理图中,我们可以先设计分频器块,然后将分频后的时钟信号连接到计数器的时钟输入端。四、仿真:1.创建波形文件(VectorWaveformFile)。2.添加输入信号:clk,reset_n。3.添加输出信号:q0,q1,q2。4.设置reset_n初始为高电平(即不复位),在开始时可以置低一段时间(复位计数器到000)。5.设置时钟周期(比如20ns,对应50MHz,这样仿真快一些)。6.运行仿真,观察输出是否按000,001,010,...,111,000循环。五、烧录:1.配置引脚:将clk分配到开发板的时钟引脚(如PIN_G21),reset_n分配到一个按键(如PIN_H2),q0,q1,q2分配到三个LED(如PIN_J1,PIN_J2,PIN_J3)。2.编译工程,生成sof文件。3.连接开发板,用Programmer烧录sof文件。六、扩展:用数码管显示1.将计数器的输出(q2,q1,q0)作为输入,连接到一个7段译码器(如7447),译码器输出连接到数码管的段选,数码管的位选根据开发板连接(如果只用一个数码管,则固定使能)。2.注意:7447是4线-7段译码器,而我们的计数器是3位二进制,所以需要将3位二进制转换为4位BCD码(0000到0111),可以直接将最高位补0,然后输入到7447。注意:由于引用[3]提到分频器在仿真中可能因为时间尺度问题看不到变化,所以仿真时我们可以暂时绕过分频器,直接用高频时钟仿真计数器逻辑。烧录时再加上分频器。下面我们将按照上述步骤进行设计。注意:以下内容为原理图设计指导,不包含分频器(分频器可单独设计并连接)。</think>### Quartus II 9.0 设计基于D触发器8进制计数器教程 #### 一、设计原理 1. **D触发器基础** - 器件名称:`dff` - 关键引脚: - `D`:数据输入 - `CLK`:时钟上升沿触发 - `CLRN`:异步复位(低电平有效) - `Q`:状态输出 2. **8进制计数器逻辑** - 需要3个D触发器($2^3=8$状态) - 状态转移关系: | 当前状态 (Q2 Q1 Q0) | 下一状态 (D2 D1 D0) | |--------------------|---------------------| | 0 0 0 | 0 0 1 | | 0 0 1 | 0 1 0 | | 0 1 0 | 0 1 1 | | 0 1 1 | 1 0 0 | | 1 0 0 | 1 0 1 | | 1 0 1 | 1 1 0 | | 1 1 0 | 1 1 1 | | 1 1 1 | 0 0 0 | 3. **逻辑表达式**(卡诺图化简): $$ \begin{align*} D_0 &= \overline{Q_0} \\ D_1 &= Q_1 \oplus Q_0 \\ D_2 &= Q_2 \oplus (Q_1 \cdot Q_0) \end{align*} $$ #### 二、Quartus II设计步骤 1. **创建工程** - 新建Block Diagram/Schematic File - 选择目标器件(如Cyclone II EP2C20F484C7) 2. **绘制电路图** ```mermaid graph LR CLK --> dff0[DFF0/CLK] CLK --> dff1[DFF1/CLK] CLK --> dff2[DFF2/CLK] reset_n --> dff0/CLRN reset_n --> dff1/CLRN reset_n --> dff2/CLRN dff0/Q --> NOT0[NOT] NOT0 --> dff0/D dff0/Q --> XOR1 dff1/Q --> XOR1[XOR] XOR1 --> dff1/D dff0/Q --> AND[AND] dff1/Q --> AND AND --> XOR2[XOR] dff2/Q --> XOR2 XOR2 --> dff2/D dff0/Q --> q0[OUTPUT:q0] dff1/Q --> q1[OUTPUT:q1] dff2/Q --> q2[OUTPUT:q2] ``` 3. **添加时钟分频器**(将27MHz→1Hz) - 参考计数器块(需计数27,000,000次) - 连接方式:`高频CLK → 分频器 → 计数器CLK` #### 三、仿真验证 1. **设置测试波形** - 复位信号:初始置0(复位),后置1 - 时钟周期:20ns(50MHz仿真时钟) ```plaintext reset_n: 0____1________________ CLK : _|‾|_|‾|_|‾|_|‾|_|‾|_... ``` 2. **预期输出**: - 状态顺序:000 → 001 → 010 → 011 → 100 → 101 → 110 → 111 → 000... - **注意**:直接使用1Hz时钟仿真需超长时长,建议: - 仿真阶段用高频时钟验证逻辑 - 烧录时切换为分频时钟[^3] #### 四、烧录配置 1. **引脚分配**(DE2开发板示例): | 信号 | 引脚 | 硬件 | |---------|---------|--------| | CLK | PIN_G21 | 27MHz时钟 | | reset_n | PIN_H2 | 按键 | | q0 | PIN_J1 | LEDG0 | | q1 | PIN_J2 | LEDG1 | | q2 | PIN_J3 | LEDG2 | 2. **烧录步骤**: 1. 编译工程 → 生成`.sof`文件 2. 连接USB-Blaster 3. Programmer中选`JTAG`式 4. 添加`.sof`文件 → 勾选`Program/Configure` 5. 点击`Start` #### 五、扩展显示(可选) 1. **连接7段数码管**: - 添加7447译码器:输入`q2 q1 q0` → 输出数码管段选 - 引脚分配至`HEX0`[^2] ```mermaid graph LR q2 --> 7447/A1 q1 --> 7447/A2 q0 --> 7447/A3 7447/OUT --> HEX0 ``` #### 六、常见问题解决 1. **仿真无变化**: - 检查分频器输出是否连接正确 - 延长仿真时间(1Hz周期需1e9 ns) 2. **烧录后LED不亮**: - 确认`reset_n`引脚是否被意外拉低 - 检查时钟分频计数器是否溢出 > 设计要点:异步复位确保初始状态为000,组合逻辑实现状态转移方程[^1]。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值