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

2024-09-08 15:12
文章标签 2023 实验 电路 hnu 电子学

本文主要是介绍HNU-2023电路与电子学-实验3,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

写在前面:

一、实验目的

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

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

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

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

二、实验内容

  1. 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 @(*)beginau_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、从需要掌握的理论、遇到的困难、解决的办法以及经验教训等方面进行总结。

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

这篇关于HNU-2023电路与电子学-实验3的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1148459

相关文章

CSP 2023 提高级第一轮 CSP-S 2023初试题 完善程序第二题解析 未完

一、题目阅读 (最大值之和)给定整数序列 a0,⋯,an−1,求该序列所有非空连续子序列的最大值之和。上述参数满足 1≤n≤105 和 1≤ai≤108。 一个序列的非空连续子序列可以用两个下标 ll 和 rr(其中0≤l≤r<n0≤l≤r<n)表示,对应的序列为 al,al+1,⋯,ar​。两个非空连续子序列不同,当且仅当下标不同。 例如,当原序列为 [1,2,1,2] 时,要计算子序列 [

STM32(十一):ADC数模转换器实验

AD单通道: 1.RCC开启GPIO和ADC时钟。配置ADCCLK分频器。 2.配置GPIO,把GPIO配置成模拟输入的模式。 3.配置多路开关,把左面通道接入到右面规则组列表里。 4.配置ADC转换器, 包括AD转换器和AD数据寄存器。单次转换,连续转换;扫描、非扫描;有几个通道,触发源是什么,数据对齐是左对齐还是右对齐。 5.ADC_CMD 开启ADC。 void RCC_AD

61.以太网数据回环实验(4)以太网数据收发器发送模块

(1)状态转移图: (2)IP数据包格式: (3)UDP数据包格式: (4)以太网发送模块代码: module udp_tx(input wire gmii_txc ,input wire reset_n ,input wire tx_start_en , //以太网开始发送信

LTspice模拟CCM和DCM模式的BUCK电路实验及参数计算

关于BUCK电路的原理可以参考硬件工程师炼成之路写的《 手撕Buck!Buck公式推导过程》.实验内容是将12V~5V的Buck电路仿真,要求纹波电压小于15mv. CCM和DCM的区别: CCM:在一个开关周期内,电感电流从不会到0. DCM:在开关周期内,电感电流总会到0. CCM模式Buck电路仿真: 在用LTspice模拟CCM电路时,MOS管驱动信号频率为100Khz,负载为10R(可自

HCIA--实验十:路由的递归特性

递归路由的理解 一、实验内容 1.需求/要求: 使用4台路由器,在AR1和AR4上分别配置一个LOOPBACK接口,根据路由的递归特性,写一系列的静态路由实现让1.1.1.1和4.4.4.4的双向通信。 二、实验过程 1.拓扑图: 2.步骤: (下列命令行可以直接复制在ensp) 1.如拓扑图所示,配置各路由器的基本信息: 各接口的ip地址及子网掩码,给AR1和AR4分别配置

2023 CCPC(秦皇岛)现场(第二届环球杯.第 2 阶段:秦皇岛)部分题解

所有题目链接:Dashboard - The 2023 CCPC (Qinhuangdao) Onsite (The 2nd Universal Cup. Stage 9: Qinhuangdao) - Codeforces 中文题面: contest-37054-zh.pdf (codeforces.com) G. Path 链接: Problem - G - Codeforces

OpenGL/GLUT实践:流体模拟——数值解法求解Navier-Stokes方程模拟二维流体(电子科技大学信软图形与动画Ⅱ实验)

源码见GitHub:A-UESTCer-s-Code 文章目录 1 实现效果2 实现过程2.1 流体模拟实现2.1.1 网格结构2.1.2 数据结构2.1.3 程序结构1) 更新速度场2) 更新密度值 2.1.4 实现效果 2.2 颜色设置2.2.1 颜色绘制2.2.2 颜色交互2.2.3 实现效果 2.3 障碍设置2.3.1 障碍定义2.3.2 障碍边界条件判定2.3.3 障碍实现2.3.

Circuit Design RC 震荡电路

为了测试一个信号放大器,手边又没有合适的信号发生器,所以就需要自己手动来一个信号发生器。。。。。由于所需的频率大概也不会太高,手边也没有电感,所以选择用RC震荡电路来实现这个功能。 借鉴的网页: http://www.eepw.com.cn/article/283745.htm RC振荡电路,采用RC选频网络构成,适用于低频振荡,一般用于产生1Hz~1MHz(fo=1/2πRC)的低频信号。

Circuit Design 三极管驱动蜂鸣器电路 及 蜂鸣器两端电压正确但是不响的解决方案

利用三极管进行电流放大的蜂鸣器驱动电路图: (百度图片找的) 我用有源蜂鸣器实现的这个电路,但是蜂鸣器不响。 details: 1. VCC =5V 蜂鸣器两端的直接电压约为4.5V, 但是蜂鸣器不响。 2. 将蜂鸣器直接接在4.5V的电源两端,蜂鸣器响。(说明蜂鸣器是好的) 3. 测了三极管各个管脚的电压, 和理论上的是一致的。 情况很奇怪,换了好几个三极管结果都是一样的,

pta-2024年秋面向对象程序设计实验一-java

文章申明:作者也为初学者,解答仅供参考,不一定是最优解; 一:7-1 sdut-sel-2 汽车超速罚款(选择结构) 答案: import java.util.Scanner;         public class Main { public static void main(String[] arg){         Scanner sc=new Scanner(System