HNU-2023电路与电子学-实验3

news2024/11/13 15:01:28

写在前面:

本次实验是完成cpu设计的剩余部分,整体难度比上一次要小,细心完成就能顺利通过全部测评

一、实验目的

1.了解简易模型机的内部结构和工作原理。

2.分析模型机的功能,设计 8 重 3-1 多路复用器。

3.分析模型机的功能,设计 8 重 2-1 多路复用器。

4.分析模型机的工作原理,设计模型机控制信号产生逻辑。

二、实验内容

1.用 VERILOG 语言设计模型机的 8 重 3-1 多路复用器;

2.用 VERILOG 语言设计模型机的 8 重 2-1 多路复用器;

3.用 VERILOG 语言设计模型机的控制信号产生逻辑。

三、实验过程

1、8 重 3-1 多路复用器

A)创建工程(选择的芯片为 family=Cyclone II;name=EP2C5T144C8)

在这里插入图片描述

B) 编写源代码

module mux3_1(a,b,c,s,y);
input [7:0]a,b,c;
input [1:0]s;
output reg[7:0]y;
always @(*)
begin
if(s==2'b01) y<=b;
else if(s==2'b10) y<=c;
else y<=a;
end
endmodule

C) 编译与调试(包含编译调试过程中的错误、警告信息以及资源消耗)

调试过程无错误

在这里插入图片描述

图示为警告信息

在这里插入图片描述

图示为资源消耗

D) RTL 视图

在这里插入图片描述

视图分析及结论:

视图分析:

通过观察 RTL 视图可知:左侧为输入,右侧为输入,电路中有很多的元器件进行连接,如:比较器(输入相等输出 1,输入不相等输入 0)等,以及含有多路复用器 mux2_1,输入信号包括控制信号 s 以及 8 位数字信号 a、b、c,输出信号为 s 对 a、b、c 信号的选择,各个输出端口以及输入端口由导线相连接。

结论:

一个功能的实现需要多重门的处理,Verilog 中简单的代码对应的实际元件内部的结构原理十分复杂。

E) 功能仿真波形

在这里插入图片描述

结果分析及结论:

结果分析:

功能仿真是指不考虑器件延时和布线延时的理想情况下对源代码进行逻辑功能的验证。由仿真波形可得,对于输入状态的变化,输出结果实时变化,没有延迟,其结果与电路设计的真值表的结果相对应。

当 s=00 或者 11 时,输出 t=a;

当 s=01 时,输出 y=b;当 s=10 时,输出 y=c;

结论:

功能仿真操作简单,能体现和验证实验的功能,但忽略延迟的影响会使结果与实际结果有一定误

差。

F) 时序仿真波形

在这里插入图片描述

结果分析及结论:

结果分析:

时序仿真是指在布线后进行,是最接近真实器件运行的仿真,它与特定的器件有关,又包含了器件和布线的延时信息。由波形可得,当输入状态发生改变时,输出结果并未同时改变,而是有一定延迟,同时由于输入状态的改变,导致电路出现“冒险”,导致输出结果并未与预期结果相同。

结论:

1、时序仿真可以用来验证程序在目标器件中的时序关系。同时考虑了器件的延迟后,其输出结果跟接近实际情况,但是考虑的情况过多,不容易操作,容易产生错误。

2、时序仿真不 仅反应出输出和输入的逻辑关系,同时还计算了时间的延时信息,是与实际系统更接近的一种仿真结果。不过,要注意的是,这个时间延时是仿真软件“估算”出来的。

G) 时序分析

操作方法是:编译后,在 compilation report 中选择【timing analysis】-【summary】和【tpd】

在这里插入图片描述

在这里插入图片描述

结果分析及结论:

结果分析:

1、由图可得,Timing Analyzer Summmary 总结所有经典定时分析的结果,并报告每个定时特性的最坏情况定时。比如从 c[7]到 y[7] 的最坏定时情况的 tpd 为 13.711ns。下面的 tpd 报告表则给出了源节点和目标节点之间的 tpd 延迟时间,比如第五行中 a[2]到 y[2]的 tpd 为 13.132ns。

结论:

实际连接图中个元器件连接之间是存在时间延迟的,而且不同的元器件之间的时间延迟也不相同。

2、8 重 2-1 多路复用器

A)创建工程(选择的芯片为 family=Cyclone II;name=EP2C5T144C8)

在这里插入图片描述

B) 编写源代码

module mux2_1(a,b,s,y);
input [7:0]a,b;
input s;
output reg[7:0] y;
always @(*)
begin
if(s==1'b0)y<=a;
else if(s==1'b1)y<=b;
end
endmodule

C) 编译与调试(包含编译调试过程中的错误、警告信息以及资源消耗)

调试过程无错误

在这里插入图片描述

图示为警告信息

在这里插入图片描述

图示为资源消耗

D) RTL 视图

在这里插入图片描述

结果分析及结论:

视图分析:

通过观察 RTL 视图可知:左侧为输入,右侧为输入,电路中有很多的元器件进行连接,如:含有多路复用器,输入信号包括控制信号 s 以及 8 位数字信号 a、b,输出信号为 s 对 a、b 信号的选择,各个输出端口以及输入端口由导线相连接。

结论:

一个功能的实现需要多重门的处理,Verilog 中简单的代码对应的实际元件内部的结构原理十分复杂。

E) 功能仿真波形

在这里插入图片描述

结果分析及结论:

结果分析:

功能仿真是指不考虑器件延时和布线延时的理想情况下对源代码进行逻辑功能的验证。由仿真波形可得,对于输入状态的变化,输出结果实时变化,没有延迟,其结果与电路设计的真值表的结果相对应。

当 s=0 时,输出 t=a;

当 s=1 时,输出 y=b;

结论:

功能仿真操作简单,能体现和验证实验的功能,但忽略延迟的影响会使结果与实际结果有一定误差。

F) 时序仿真波形

在这里插入图片描述

结果分析及结论:

结果分析:

时序仿真是指在布线后进行,是最接近真实器件运行的仿真,它与特定的器件有关,又包含了器

件和布线的延时信息。由波形可得,当输入状态发生改变时,输出结果并未同时改变,而是有一定延迟,同时由于输入状态的改变,导致电路出现“冒险”,导致输出结果并未与预期结果相同。

结论:

1、时序仿真可以用来验证程序在目标器件中的时序关系。同时考虑了器件的延迟后,其输出结果跟接近实际情况,但是考虑的情况过多,不容易操作,容易产生错误。

2、时序仿真不 仅反应出输出和输入的逻辑关系,同时还计算了时间的延时信息,是与实际系统更接近的一种仿真结果。不过,要注意的是,这个时间延时是仿真软件“估算”出来的。

G) 时序分析

在这里插入图片描述

在这里插入图片描述

结果分析及结论:

结果分析:

由图可得,Timing Analyzer Summmary 总结所有经典定时分析的结果,并报告每个定时特性的最坏情况定时。比如从 s 到 y[6] 的最坏定时情况的 tpd 为 15.022ns。下面的 tpd 报告表则给出了源节点和目标节点之间的 tpd 延迟时间,比如第五行中 b[6]到 y[6]的 tpd 为 13.864ns。

结论:

实际连接图中个元器件连接之间是存在时间延迟的,而且不同的元器件之间的时间延迟也不相同。

3、控制信号产生逻辑

A)创建工程(选择的芯片为 family=Cyclone II;name=EP2C5T144C8)

在这里插入图片描述

B) 编写源代码

module con_signal(mova,movb,movd,movc,add,sub,jmp,jg,g,in1,out1,movi,halt,ir,sm,sm_en,ir_ld,ram_re,ram_wr,pc_ld,pc_in,reg_sr,reg_dr,reg_we,s,au_en,au_ac,gf_en,in_en,out_en,mux_s);
input mova,movb,movc,movd,add,sub,jmp,sm,jg,g,in1,out1,movi,halt;
input [7:0]ir;
output reg sm_en,ram_re,ir_ld,pc_in,ram_wr,pc_ld,reg_we,gf_en,in_en,out_en,mux_s,au_en;
output reg [1:0]reg_sr,reg_dr,s;
output reg [3:0]au_ac;
always @(*)
	begin
	au_en=mova | movb | add | out1 | sub;
	sm_en=~halt;
	ir_ld=~sm;
	ram_re=(~sm) | movc | movi;
	ram_wr=movb;
	gf_en=sub;
	pc_ld=jmp | (jg & g);
	pc_in=movi | (~sm);
	reg_we=movi | mova | movc | movd | sub | add | in1;
	in_en=in1;
	reg_dr=ir[3:2];
	out_en=out1;
	reg_sr=ir[1:0];
	if(movb) s=2'b10;
	else if(movc) s=2'b01;
	au_ac=ir[7:4];
	mux_s=mova | movb |movi | add | sub | in1;
	end
endmodule
	

C) 编译与调试(包含编译调试过程中的错误、警告信息以及资源消耗)

调试过程无错误

在这里插入图片描述

图示为警告信息

在这里插入图片描述

图示为资源消耗

D) RTL 视图

在这里插入图片描述

结果分析及结论:

视图分析:

通过观察 RTL 视图可知:左侧为输入,右侧为输入,电路中有很多的元器件进行连接,如:与或门等,输入信号包括 mova,movb,movc,movd,add,sub,jmp,sm,jg,g,in1,out1,movi,halt 以及指令码 ir,输出信号为 sm_en、ram_re、ir_ld 等图示模型机执行的十六个相应的信号。

结论:

一个功能的实现需要多重门的处理,Verilog 中简单的代码对应的实际元件内部的结构原理十分复杂。

E) 功能仿真波形

在这里插入图片描述

结果分析及结论:(以下输出均为高电平有效)

  1. 指令码 ir 为 10100111 时,au_ac=1010,reg_dr=01,reg_sr=11;

  2. mova 指令执行时,sm_en 输出为 1,au_en 输出为 1,mux_s 输出为 1,reg_we 输出为 1;

  3. movb 指令执行时,sm_en 输出为 1,ram_wr 输出为 1,au_en 输出为 1,mux_s 输出为 1;

  4. movc 指令执行时,sm_en 输出为 1,ram_re 输出为 1,reg_we 输出为 1;

  5. movd 指令执行时,sm_en 输出为 1,reg_we 输出为 1;

  6. add 指令执行时,sm_en 输出为 1,au_en 输出为 1,mux_s 输出为 1,reg_we 输出为 1;

  7. sub 指令执行时,sm_en 输出为 1,au_en 输出为 1,gf_en 输出为 1,mux_s 输出为 1,reg_we输出为 1;

  8. jmp 指令执行时,sm_en 输出为 1,pc_ld 输出为 1;

  9. sm 指令为 1 时,表示为指令执行阶段,指令可以正常执行;sm 指令为 0 时表示取指阶段,此时 in_pc、ram_re、id_ir、sm_en 输出为 1;

  10. jg 指令执行时,sm_en 输出为 1,au_en 输出为 1;

  11. 当 g 与 jg 指令共同执行时,pc_ld 输出为 1;

  12. 当 in1 指令执行时,sm_en 输出为 1,in_en 输出为 1,mux_s 输出为 1,reg_we 输出为 1;

  13. 当 out1 指令执行时,sm_en 输出为 1,au_en、out_en 输出为 1,mux_s 输出为 1,reg_we输出为 1;

  14. 当 movi 指令执行时,sm_en 输出为 1,pc_in 输出为 1,ram_re 输出为 1,mux_s 输出为1,reg_we 输出为 1;

  15. 当 halt 指令执行时,sm_en 输出为 0,sm 不反转,无法进行下一轮取指操作,指令机停机。

F) 时序仿真波形

结果分析及结论:

结果分析:

时序仿真是指在布线后进行,是最接近真实器件运行的仿真,它与特定的器件有关,又包含了器件和布线的延时信息。由波形可得,当输入状态发生改变时,输出结果并未同时改变,而是有一定延迟,同时由于输入状态的改变,导致电路出现“冒险”,导致输出结果并未与预期结果相同。结论:

1、时序仿真可以用来验证程序在目标器件中的时序关系。同时考虑了器件的延迟后,其输出结果跟接近实际情况,但是考虑的情况过多,不容易操作,容易产生错误。

2、时序仿真不 仅反应出输出和输入的逻辑关系,同时还计算了时间的延时信息,是与实际系统更接近的一种仿真结果。不过,要注意的是,这个时间延时是仿真软件“估算”出来的。

G) 时序分析

在这里插入图片描述

在这里插入图片描述

结果分析及结论:

结果分析:

由图可得,Timing Analyzer Summmary 总结所有经典定时分析的结果,并报告每个定时特性的最坏情况定时。比如从 add 到 mux_s 的最坏定时情况的 tpd 为 13.245ns。下面的 tpd 报告表则给出了源节点和目标节点之间的 tpd 延迟时间,比如第六行中 mova 到 au_en 的 tpd 为12.731ns。

结论:

实际连接图中个元器件连接之间是存在时间延迟的,而且不同的元器件之间的时间延迟也不相同。

四、思考题

1、任选一条指令,介绍指令的过程、信息流动的情况以及执行时控制信号的值。

答:选择 mova 指令,根据控制信号 SR1、SR0(即指令码 ir 的最后两位)将源寄存器 Rs的数据从通用寄存器 S 口输出,在 AC3~AC0 和 AU_EN 的控制下,经 AU 送入总线BUS,BUS 上的数据传送至通用寄存器的输入端;在 WE 和DR1、DR0 的控制下,时钟下降沿将输入端的数据写入目的寄存器 Rd。执行时sm_en、au_en、mux_s、reg_we 为 1,其他信号为 0。

2、如何产生正确的控制信号以及具体的编程实现?

答:应该去分析每一个控制信号在不同指令输入下的状态,使用逻辑函数进行分析得出最后的表达式,从而在 Quartus 中使用 Verilog 语言实现。

五、实验总结、必得体会及建议

1、从需要掌握的理论、遇到的困难、解决的办法以及经验教训等方面进行总结。

答:本实验需要掌握不同指令输入下各控制信号的状态以及信号在模型机中的流动情况,同时还需要了解模型机各部件的工作原理,在这次实验中我遇上的最大的问题就是不太会使用时序仿真对代码进行模拟,经过老师的耐心解答最终我顺利解决了这个问题并顺利完成了各板块的模拟,在经验教训方面,应该多使用功能仿真去对我们的代码功能进行检验,同时使用时序仿真则可以让我们直观地看见电路实际的输出情况,便于我们深层次的理解。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2115712.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Oracle再度发起开发人员调查,细节满满

作者&#xff1a;IT邦德 中国DBA联盟(ACDU)成员&#xff0c;10余年DBA工作经验&#xff0c; Oracle、PostgreSQL ACE CSDN博客专家及B站知名UP主&#xff0c;全网粉丝10万 擅长主流Oracle、MySQL、PG、高斯及Greenplum备份恢复&#xff0c; 安装迁移&#xff0c;性能优化、故障…

GO学习笔记(4) strconv/time

目录 strconv包1、string与bool之间的转换2、string与int之间的转换 time包1、常用常量定义2、Now&#xff08;&#xff09;获取当前年月日时分秒3、Format&#xff08;&#xff09;时间格式化4、Parse&#xff08;&#xff09;/ ParseInLocation&#xff08;&#xff09;解析时…

anaconda启动jupyter notebook

1.在Windows搜索框搜索anaconda prompt点击打开 2.然后输入命令jupyter notebook 3.在这个页面编写你的程序

基于Java的宿舍报修管理系统的设计与实现(论文+源码)_kaic

基于Java的宿舍报修管理系统的设计与实现(论文源码)_kaic 摘  要 随着教育改革‎‏的不断‎‏深入&#xff0c;‎‏学校宿‎‏舍的管‎‏理体系‎‏也在不‎‏断地完‎‏善&#xff0c;校园后勤服务是学校管理的重要工作&#xff0c;学校提供优秀的后勤服务&#xff0c;能提…

【Jupyter Notebook】安装与使用

打开Anaconda Navigator点击"Install"(Launch安装前是Install)点击"Launch"点击"File"-"New"-"Notebook"​ 5.点击"Select"选择Python版本 6.输入测试代码并按"Enter+Shift"运行代码: 代码如下: …

C++万字解析类和对象(上)

1.类的定义 class为定义类的关键字&#xff0c;Stack为类的名字&#xff0c;{}中为类的主体&#xff0c;注意类定义结束时后面分号不能省略。类体中内容称为类的成员&#xff1a;类中的变量称为类的属性或成员变量; 类中的函数称为类的方法或者成员函数。 为了区分成员变量&…

Linux(RedHat或CentOS)下如何开启telnet服务

一、Telnet服务介绍 Telnet协议是TCP/IP协议族中的一员&#xff0c;是Internet远程登录服务的标准协议和主要方式。它为用户提供了在本地计算机上完成远程主机工作的能力。在终端使用者的电脑上使用telnet程序&#xff0c;用它连接到服务器。终端使用者可以在telnet程序中输入…

【STM32】串口

1.串口-printf 使用printf函数向串口发送东西 使用微库&#xff0c;用到了printf, 但是我们发现是不能发送的 因为底层printf是fputc,我们需要自己实现 后面FILE*P不用管&#xff0c;在fputc中调用 第一个参数为uart1的句柄 第二个为要输出的字符 第三个为一次要发送几…

【c++进阶[五]】list相关接口介绍及list和vector的对比

&#x1f493;博主CSDN主页::Am心若依旧&#x1f493; ⏩专栏分类c从入门到精通⏪ &#x1f69a;代码仓库:青酒余成&#x1f69a; &#x1f339;关注我&#x1faf5;带你学习更多c   &#x1f51d;&#x1f51d; 1.前言 本章重点 本章重点讲解list的接口函数的熟悉&#xf…

W11系统电脑便捷设置

1【win11】取消右键菜单“更多选项”&#xff0c;直接展示完整右键菜单 取消右键菜单“更多选项”&#xff0c;直接展示完整右键菜单 (本质上是修改注册表&#xff0c;通过命令行的方式更加直接快捷) 只需要使用 winR 输入cmd 打开命令行&#xff0c;然后输入以下指令&#xf…

使用ChatGPT润色论文的10大分步技巧,效果立竿见影

大家好,感谢关注。我是七哥,一个在高校里不务正业,折腾学术科研AI实操的学术人。关于使用ChatGPT等AI学术科研的相关问题可以和作者七哥(yida985)交流,多多交流,相互成就,共同进步,为大家带来最酷最有效的智能AI学术科研写作攻略。 撰写学术论文确实是一项非常具有挑…

HTML 转 PDF API 接口

HTML 转 PDF API 接口 网络工具 / 文件处理 支持网页转 PDF 高效生成 PDF / 提供永久链接。 1. 产品功能 超高性能转换效率&#xff1b;支持将传递的 HTML 转换为 PDF&#xff0c;支持转换 HTML 中的 CSS 格式&#xff1b;支持传递网站 URL&#xff0c;直接转换页面成对应的 …

C++笔记20•数据结构:哈希(Hash)•

哈希 1.无序的关联式容器&#xff08;unordered_map&unordered_set&#xff09; unordered_map与unordered_set几乎与map与set是一样的&#xff0c;只是性能unordered_map与unordered_set比map与set更优一些。还有就是unordered_map与unordered_set是无序的&#xff0c;…

梳理2024年,螺丝钉们爱用的3款剪辑软件

这年头&#xff0c;视频到处都是&#xff0c;就跟天上的星星一样数不清。不管你是公司里的新面孔&#xff0c;还是职场上的老狐狸&#xff0c;学会怎么剪视频&#xff0c;就好比找到了赢的秘诀。不管是给上司汇报工作&#xff0c;展示你的产品&#xff0c;还是自己搞点小视频记…

C#顺序万年历自写的求余函数与周位移算法

static int 返回月的天数(int 年, int 月){return (月 2 ?(((年 % 4 0 && 年 % 100 > 0) || 年 % 400 0) ? 29 : 28) :(((月 < 7 && 月 % 2 > 0) || (月 > 7 && 月 % 2 0)) ? 31 : 30));}static int 返回年总天数(int 年, int 标 …

Mac设置文件夹的显示方式:独立窗口显示或者标签页显示

目录 00 Mac文件夹的两种显示方式  0.1 独立窗口显示   0.2 标签页显示 01 独立窗口显示  02 标签页显示 00 Mac文件夹的两种显示方式 0.1 独立窗口显示 0.2 标签页显示 01 独立窗口显示 系统偏好设置System Setting -> 程序坞Desktop & Dock -> 窗口W…

【一文读懂】北斗卫星导航系统介绍

前言 本文来自鲜枣课堂。 本文是关于北斗卫星导航系统的详细介绍&#xff0c;主要阐述了北斗系统的组成、功能、发展历程以及在全球范围内的应用和影响。以下是文件的核心内容提炼&#xff1a; 系统概述&#xff1a; 二级要点关键短语&#xff1a;全球卫星导航系统 北斗卫星…

Learn ComputeShader 11 Star Glow Effect

这次要使用到顶点和片段着色器。同样是制作屏幕后处理效果。 下面是一开始的效果&#xff0c;只是一个循环播放的粒子系统。 我们首先要对源图像的亮部区域进行提亮&#xff0c;然后进行模糊添加光芒。然后进行混合&#xff0c;最后进行一次合成 我们需要创建一些临时纹理来存…

基于Java+SpringBoot+Vue+MySQL的智能菜谱推荐管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 基于SpringBootVue的智能菜谱推荐管理系统【附源码文档】、…

ML18_EM(Expectation-Maximization)算法详解

1. 梯度上升法和坐标上升法的比较 “梯度上升法”&#xff08;Gradient Ascent Method&#xff09;和“坐标上升法”&#xff08;Coordinate Ascent Method&#xff09;都是优化算法的一部分&#xff0c;用于求解优化问题中的最大值。它们分别基于不同的思路来更新参数以达到目…