EDA技术与应用上机任务书
- 上机目的
- 熟悉掌握Quartus II或Quartus Prime开发工具的使用。
- 掌握利用硬件描述语言(Verilog)设计简单程序的步骤及方法。
- 掌握若干组合逻辑电路及简单时序逻辑电路的Verilog程序设计方法,以及仿真测试方法。
- 上机内容
- 独立设计一个如图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
#20 d
end
end
always #720 clr = $random;//每隔720ps,clr信 变化
always #360 pset = $random;//每隔360ps,pest信 变化
always #20 clk
图3 D触发器波形图
- 半减器的波形图如图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 半减器波形图
- 全减器的波形图如图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学习的兴趣,有助于我以后的学习。
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!