EDA技术与应用上机任务 电子信息类 Quartus II或Quartus Prime D触发器、半减器、全减器、可加减控制的50进制加减计数器。

本文档详述了一次EDA技术的上机任务,包括使用QuartusII或QuartusPrime设计带同步置位/复位的D触发器、一位半减器、一位全减器及50进制加减计数器。通过Verilog语言编程,实现了各逻辑电路的仿真,并提供了相应的波形图。上机过程中,作者深入理解了Verilog语法,熟悉了EDA工具的使用,锻炼了数字逻辑设计和问题解决能力。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

EDA技术与应用上机任务书

  1. 上机目的
  1. 熟悉掌握Quartus II或Quartus Prime开发工具的使用。
  2. 掌握利用硬件描述语言(Verilog)设计简单程序的步骤及方法。
  3. 掌握若干组合逻辑电路及简单时序逻辑电路的Verilog程序设计方法,以及仿真测试方法。
  1. 上机内容
  1. 独立设计一个如图1所示,带同步置位/复位的D触发器,两个反相的输出端为q,qb。其中置位端为pset,复位/清零端为clr,时钟端为clk,数据输入端为d,注意:置位信号的优先级要比复位信号优先级高。

图1 带同步置位/复位的D触发器示意图

(2)用Verilog语言设计一位半减器,然后在该半减器的基础上利用元件调用的方法设计一位全减器。

   1)半减器真值表如表1。

输入减数(x)

输入被减数(y)

减法差值输出(diff)

减法借位标志输出(s_out)

0

0

0

0

1

1

0

0

1

0

1

0

0

1

1

1

表1 半减器真值表

2)全减器对应原理图如图2。

 

图2 全减器对应原理图

(3)设计带有异步复位的可加减控制的50进制加减计数器。

. 程序实现

具体代码和上机报告参考:

EDA技术与应用上机报告D触发器半减器全减器50进制加减计数器.zip-专业指导文档类资源-CSDN文库

例如:D触发器:

 

.仿真附图

(1)D触发器的波形图如图3所示,该图中的clk,pest,clr,d信号在激励文件中已经行进设置,因为题目中要求置位信号的优先级要比复位信号优先级高,所以在该波形中,在置位信号和清零信号同时有效时,q端为高电平。

激励代码主要部分:

Initial begin

    clk = 0;

       clr = 0;

       pset = 0;//首先初始化各个变量,置零

forever begin

              #60 d <= 1;

              #20 d <= 0;//在80ps中,每隔20ps,d信号置零,每隔60ps,d信号置1

       end

end

    always #720 clr = $random;//每隔720ps,clr信号变化

       always #360 pset = $random;//每隔360ps,pest信号变化

       always #20  clk <= ~clk;//每隔20ps,clk信号取反

  图3  D触发器波形图

  1. 半减器的波形图如图4所示,该图中的clk,x,y信号在激励文件中已经行进设置,输出信号为差值diff和借位标志s_out。如图可知在clk信号有效时,该波形如图4所示,符合半减器真值表内容。

激励代码主要部分:

`define clock_period 20//宏定义clock_period为20ps

initial clk = 0;//clk初始化为0

  always #(`clock_period/2) clk = ~clk;//每隔10ps,clk信号取反

  initial begin

     x = 0;//x初始化为0

     repeat(20)

           #(`clock_period) x = $random;//每隔20ps,x信号变化,重复20次

  end

  initial begin

     y = 0;//y初始化为0

     repeat(20)

           #(`clock_period) y = $random;//每隔20ps,y信号变化,重复20次

end

  initial begin

     #(`clock_period*20)

         $stop;//每隔20*20ps,停止

  end

图4 半减器波形图

  1. 全减器的波形图如图5所示,该图中的clk, x,y,sub_in信号在激励文件中已经行进设置,全减器在调用了两个半减器的基础上增加了或门,使结果满足全减器真值表。

激励代码主要部分:

`define clock_period 20//宏定义clock_period为20ps

 initial clk = 0;//clk初始化为0

  always #(`clock_period/2) clk = ~clk;//每隔10ps,clk信号取反

  initial begin

     x = 0;//x初始化为0

     repeat(20)

           #(`clock_period) x = $random;//每隔20ps,x信号变化,重复20次

  end

  initial begin

     y = 0;//y初始化为0

     repeat(20)

           #(`clock_period) y = $random;//每隔20ps,y信号变化,重复20次

  end

   initial begin

     sub_in = 0;//sub_in初始化为0

     repeat(20)

           #(`clock_period) sub_in = $random;;//每隔20ps,sub_in信号变化,重复20次

  end

  initial begin

     #(`clock_period*20)

         $stop;//每隔20*20ps,停止

  end

 图5 全减器波形图

(4)50进制加减计数器的波形图如图6所示,clk作为系统时钟,rst为复位信号低电平触发,当rst=0时输出即为0。adds控制加减,当adds=0时计数器做减法计数,当adds=1时计数器做加法计数。此外当计数器计到49时cout=1即产生进位标志。经过仿真测试,仿真出的波形符合预期计算。

激励代码主要部分:

initial begin

clk=1;rst=0;//clk,rst初始化为0

#100;clk=0;rst=0;//100ps后,clk,rst置为0

#100;clk=0;rst=0;//100ps后,clk,rst置为0

#100;adds=1;//100ps后,adds置为1

 repeat(50)

  begin

  clk=0;rst=1;//clk,rst分别初始化为0,1

  #100;clk=1;rst=1;//100ps后,clk,rst置为1

  #100;

  end

clk=0;rst=1;;//clk,rst分别初始化为0,1

#100;clk=1;rst=1;//100ps后,clk,rst都置为1

#100;clk=1;rst=0;//100ps后,clk,rst分别置为1,0

#100;clk=0;rst=0;//100ps后,clk,rst都置为0

#100;clk=1;rst=1;//100ps后,clk,rst都置为1

#100;$stop;//100ps后,停止

end

 图6  50进制加减计数器的波形图

.上机总结

通过本次上机任务,我不仅复习了以前学过的数字电路逻辑设计相关知识,也对EDA知识以及对Verilog 语言的运用有了更深一步的理解。通过本次上机任务,我也比较熟悉实验的操作流程,相关的功能菜单选项和Quartus软件的使用,并进一步学习了一些对基本时序电路器件进行描述和仿真。在开始上机时,我对quartus软件的使用不够了解,编译运行上出现了很多问题,也不知道如何调试出波形图。后来,通过对教材第三章的研究,询问同学,以及在网上找资料,知道了module名称要保持与顶层实体一致,建立测试脚本(Test Bench)文件,Test Bench可以自动生成,但是核心语句需要自己添加。同时可以通过修改激励文件调整波形图。这次上机课在软件学习方面花费时间长,锻炼了我的自学能力,提高了我的自学能力。

在设计D触发器时,在复习数字电路逻辑设计相关知识的同时,也对Verilog语言有了更深的理解,并了解了D触发器的工作原理以及如何设计D触发器。在设计一位半减器和全减器的时候,刚开始构建好半减器后,不知道全减器如何调用半减器,后来通过网上查资料解决了问题。对于异步复位可加减50进制加减计数器运用了综合知识,刚开始写的代码在软件中运行有错误,后来通过参考课本解决了该问题。通过这次上机的四个内容,激发了我对eda学习的兴趣,有助于我以后的学习。

### 关于异步复位置位 JK 触发器 在设计带有异步复位和置位功能的 JK 触发器时,通常会引入额外的逻辑来处理这些特殊操作。对于异步复位而言,在接收到有效的复位信号时立即执行复位动作而不必等待下一个时钟边沿;而对于置位,则是在特定条件下立即将触发器设置到预定义的状态。 #### 异步复位置位 JK 触发器的工作原理 该型的触发器除了常规的 J 和 K 输入外还具有两个独立控制端——清零(CLR, 即复位)和置数(PRE)。当 CLR PRE 被激活时,无论当前处于哪个阶段都将立刻影响 Q 输出: - 当 CLR=0 (低电平有效),则不论 J,K 的值如何都会使输出变为 0; - 如果 PRE=0 (假设也是低电平有效), 则会使输出强制为 1。 这种特性允许外部条件迅速改变内部存储的数据而无需依赖时序脉冲。 #### Verilog 实现示例 下面是一个简单的 Verilog 描述用于实现上述行为: ```verilog module jk_ff_async_reset_set( input wire clk, input wire rst_n, // Active low asynchronous reset input wire set_n, // Active low asynchronous preset input wire j, input wire k, output reg q ); always @(posedge clk or negedge rst_n or negedge set_n) begin : proc_q if (!rst_n) q <= 1'b0; else if (!set_n) q <= 1'b1; else case ({j,k}) 2'b00: ; 2'b01: q <= ~q; // Toggle on falling edge of clock with respect to previous state. 2'b10: q <= 1'b1; default: q <= 1'b0; // For both inputs high, force the flip-flop into a known state. endcase end endmodule ``` 此模块展示了如何通过 `always` 块中的敏感列表同时监听正跳变沿上的时钟事件以及负跳变处发生的异步复位(set_n/rst_n)[^3]。 #### 电路图示意 虽然无法直接提供图形化表示,但可以描述其基本组成结构如下: - **J 和 K 输入**连接至组合逻辑单元,负责根据输入决定下一状态。 - **CLK 输入**作为同步时钟源驱动整个触发过程。 - **RST_N 和 SET_N 输入**(均为活动低)分别直连到触发器的核心部分之前,确保能够在任何时候优先响应这两个命令并即时调整输出Q的状态[^5]。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小王yue

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值