数字电路实验(四)——寄存器、计数器及RAM

数字电路实验(四)——寄存器、计数器及RAM1、实验步骤:A、指令计数器PC:1个vhd文件,用来定义顶层实体1个vwf文件,用来进行波形仿真,将验证的波形输入1、新建,编写源代码。(1).选择保存项和芯片类型:【File】-【newprojectwizard】-【next】(设置文件路径+设置projectname为【C:\Users\lenovo\Desktop\笔记\大二上\数字电路\实验课\实验四\PC】)-【nex…

大家好,又见面了,我是你们的朋友全栈君。

1、实验步骤:
A、指令计数器PC:

1个vhd文件,用来定义顶层实体
1个vwf文件,用来进行波形仿真,将验证的波形输入
1、新建,编写源代码。
(1).选择保存项和芯片类型:【File】-【new project wizard】-【next】(设置文件路径+设置project name为【C:\Users\lenovo\Desktop\笔记\大二上\数字电路\实验课\实验四\PC】)-【next】(设置文件名【junmo】)-【next】(设置芯片类型为【cyclone-EP1CT144C8】)-【finish】
(2).新建:【file】-【new】(【design file-VHDL file】)-【OK】
2、写好源代码,保存文件(junmo.vhd)。
3、编译与调试。确定源代码文件为当前工程文件,点击【processing】-【start compilation】进行文件编译。编译结果有一个警告,文件编译成功。
4、波形仿真及验证。新建一个vector waveform file。按照程序所述插入clock、ld_pc,in_pc,input,output五个节点(clock,ld_pc,in_pc,input为输入节点,output为输出节点)。(操作为:右击 -【insert】-【insert node or bus】-【node finder】(pins=all;【list】)-【>>】-【ok】-【ok】)。任意设置clock,ld_pc,in_pc,input的输入波形…点击保存按钮保存。(操作为:点击name(如:clock))-右击-【value】-【count】(如设置binary;start value=0;end value=1;count every=10ns),同理设置name ld_pc,in_pc,input(如0,1,5),保存)。然后【start simulation】,出name output的输出图。
5、功能仿真,即没有延迟的仿真,仅用来检测思路是否正确。

B、寄存器:

1个vhd文件,用来定义顶层实体
1个vwf文件,用来进行波形仿真,将验证的波形输入
1、新建,编写源代码。
(1).选择保存项和芯片类型:【File】-【new project wizard】-【next】(设置文件路径+设置project name为【C:\Users\lenovo\Desktop\笔记\大二上\数字电路\实验课\实验四\寄存器】)-【next】(设置文件名【junmo】)-【next】(设置芯片类型为【cyclone-EP1CT144C8】)-【finish】
(2).新建:【file】-【new】(【design file-VHDL file】)-【OK】
2、写好源代码,保存文件(junmo.vhd)。
3、编译与调试。确定源代码文件为当前工程文件,点击【processing】-【start compilation】进行文件编译。编译结果有一个警告,文件编译成功。
4、波形仿真及验证。新建一个vector waveform file。按照程序所述插入clock,ld,input,output四个节点(clock,ld,input为输入节点,output为输出节点)。(操作为:右击 -【insert】-【insert node or bus】-【node finder】(pins=all;【list】)-【>>】-【ok】-【ok】)。任意设置clock,ld,input的输入波形…点击保存按钮保存。(操作为:点击name(如:clock))-右击-【value】-【count】(如设置binary;start value=0;end value=1;count every=10ns),同理设置name ld,input(如0,1,5),保存)。然后【start simulation】,出name output的输出图。
5、功能仿真,即没有延迟的仿真,仅用来检测思路是否正确。

C、RAM:

1个bdf文件,用来定义顶层实体(LPM_RAM_IO芯片)
1个vhd文件,用来定义底层实体(8位寄存器)
1个mif文件,用来存储数据
1个vwf文件,用来进行波形仿真,将验证的波形输入
1、新建,编写源代码。
(1).选择保存项和芯片类型:【File】-【new project wizard】-【next】(设置文件路径+设置project name为【C:\Users\lenovo\Desktop\笔记\大二上\数字电路\实验课\实验四\RAM】)-【next】(设置文件名【gg】)-【next】(设置芯片类型为【cyclone-EP1CT144C8】)-【finish】
(2).新建:【file】-【new】(【design file-VHDL file】)-【OK】
(3)生成bsf文件
2、写好源代码,保存文件(gg.vhd)。
3、新建,编写mif。新建:【file】-【new】(【design file-mif file】)-【OK】
4、编写mif中的存储数据。
5、新建,编写bdf。新建:【file】-【new】(【design file-bdf file】)-【OK】
6、写好源代码,设置ram。点击ram芯片右上角处生成的表格,双击后会产生提示框,按照实验指导书中的样例依次修改ram芯片的各个属性,并将之前写的mif引入到ram芯片中。将先前生成的bsf文件引入到bdf中,按照实验指导书中的进行连接,保存文件(gg.bdf)。
7、编译与调试。确定源代码文件为当前工程文件,点击【processing】-【start compilation】进行文件编译。编译结果有一个警告,文件编译成功。
8、波形仿真及验证。新建一个vector waveform file。按照程序所述插入inclock,ld,cs,dl,xl,address,address2,dio八个节点(inclock,ld,cs,dl,xl,address,address2为输入节点,dio为输出节点)。(操作为:右击 -【insert】-【insert node or bus】-【node finder】(pins=all;【list】)-【>>】-【ok】-【ok】)。任意设置inclock,ld,cs,dl,xl,address,address2的输入波形…点击保存按钮保存。(操作为:点击name(如:inclock))-右击-【value】-【count】(如设置binary;start value=0;end value=1;count every=10ns),同理设置name ld,cs,dl,xl,address,address2(如0,1,5),保存)。然后【start simulation】,出name dio的输出图。
9、功能仿真,即没有延迟的仿真,仅用来检测思路是否正确。

D、寄存器组:

1个vhd文件,用来定义顶层实体
1个vwf文件,用来进行波形仿真,将验证的波形输入
1、 新建,编写源代码。
(1).选择保存项和芯片类型:【File】-【new project wizard】-【next】(设置文件路径+设置project name为【C:\Users\lenovo\Desktop\笔记\大二上\数字电路\实验课\实验四\寄存器组】)-【next】(设置文件名【gg】)-【next】(设置芯片类型为【cyclone-EP1CT144C8】)-【finish】
(2).新建:【file】-【new】(【design file-VHDL file】)-【OK】
2、写好源代码,保存文件(gg.vhd)。
3、编译与调试。确定源代码文件为当前工程文件,点击【processing】-【start compilation】进行文件编译。编译结果有一个警告,文件编译成功。
4、波形仿真及验证。新建一个vector waveform file。按照程序所述插入clock,we,input,raa,rwba,output_a,output_b七个节点(clock,we,input,raa,rwba为输入节点,output_a,output_b为输出节点)。(操作为:右击 -【insert】-【insert node or bus】-【node finder】(pins=all;【list】)-【>>】-【ok】-【ok】)。任意设置clock,we,input,raa,rwba的输入波形…点击保存按钮保存。(操作为:点击name(如:clock))-右击-【value】-【count】(如设置binary;start value=0;end value=1;count every=10ns),同理设置name we,input,raa,rwba(如0,1,5),保存)。然后【start simulation】,出name output_a,output_b的输出图。
5、功能仿真,即没有延迟的仿真,仅用来检测思路是否正确。

2、实验过程
A.指令计数器PC
a.源代码

在这里插入图片描述
代码解释:
通过中间变量s用来计数,在指令信号满足条件的时候执行累加操作或者赋值操作。
b.逻辑图
在这里插入图片描述
c.波形仿真
在这里插入图片描述
波形设计解释:
在这里插入图片描述
结果分析及结论
在第一个时钟周期进行读取操作,读取到的是pc的初始值“00000000”,体现在5ns处的下降沿。第二个周期进行写入操作,将外部输入的值“10010110”写入到pc中,体现在15ns处的下降沿,后续就寄存进行累加操作。
符合输出结果,正确

B.寄存器
a.源代码

在这里插入图片描述
代码解释:
通过定义一个中间变量a达到存储的目的,当且仅当ld控制信号为1且为时钟上升沿的时候,外部输入信号可以改变中间变量的值,以达到存储的目的
b.逻辑图
在这里插入图片描述
c.波形仿真
在这里插入图片描述
波形设计解释:
在这里插入图片描述
结果分析及结论:
第一个时钟周期进行写入操作,体现在5ns处的时钟上升沿,将输入数据10110011写入到寄存器中,第二个时钟周期不进行写入,输出不变。
C.RAM
a.源代码

寄存器的vhdl文件
在这里插入图片描述
Ram的bdf文件(顶层实体)
在这里插入图片描述
代码解释:
底层文件为一个8位寄存器,用来存储ram输出的值;顶层实体是调用LPM_RAM_IO芯片构成的bdf文件,通过ram来实现对存储文件mif文件的引用,来达到引用数据的目的。
b.逻辑图
在这里插入图片描述
c.波形仿真
在这里插入图片描述
波形设计解释:
在这里插入图片描述
结果分析及结论:
第一个周期不读不写,输出XXXXXXXX,
第二个周期进行读取操作,读取的地址是第00000000个元素,查表得00000001
第三个周期进行写入操作,将10110010写入第00000000个元素
第四个周期由于cs=0,无法进行读取操作,输出XXXXXXXX
第五个周期不读不写,输出XXXXXXXX
第六个周期进行写入操作,将10110010写入第00000001个元素
第七个周期进行读取操作,读取的地址是第00000000个元素,由于之前将10110010写入,现在为10110010

D.寄存器组
a.源代码

在这里插入图片描述
在这里插入图片描述
代码解释:
通过定义三个八位的中间变量和一个两位的中间变量,实现建立一个包含三个八位二进制寄存器和一个两位二进制地址寄存器的寄存器组
b.逻辑图
c.波形仿真
在这里插入图片描述
波形设计解释:
在这里插入图片描述
结果分析及结论:
第一个周期将输入值存入到a寄存器
第二个周期将输入值存入到b寄存器
第三个周期将输入值存入到c寄存器
第四个周期将输入值的最后两位作为地址存入到d寄存器
第五个周期,按照raa,rwba的指示,output_a输出a寄存器的值,output_b输出a寄存器的值
第六个周期,按照raa,rwba的指示,output_a输出a寄存器的值,output_b输出b寄存器的值
以此类推,结果正确。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/158060.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • JVM: GC过程总结(minor GC 和 Full GC)「建议收藏」

    一minorGC和FullGC区别新生代GC(MinorGC):指发生新生代的的垃圾收集动作,MinorGC非常频繁,回收速度一般也比较快。老年代GC(MajorGC/FullGC):指发生在老年代的GC,出现了MajorGC经常会伴随至少一次的MinorGC(并非绝对),MajorGC的速度一般会比MinorGC的慢10倍以上。二minorGC过程详解1在初始阶段,新创建的对象被分配到Eden区,survivor的两块空间都为空。

    2022年4月12日
    39
  • 英语单词记忆法拆分2000个_什么是hash算法

    英语单词记忆法拆分2000个_什么是hash算法给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,在字符串中增加空格来构建一个句子,使得句子中所有的单词都在词典中。返回所有这些可能的句子。说明:分隔时可以重复使用字典中的单词。你可以假设字典中没有重复的单词。示例 1:输入:s = “catsanddog”wordDict = [“cat”, “cats”, “and”, “sand”, “dog”]输出:[ “cats and dog”, “cat sand dog”]示例 2:输入:s = “

    2022年8月9日
    7
  • python txt读取_python读取本地文件

    python txt读取_python读取本地文件以下代码为1:新建onefile.txt文件2:向onefile.txt文件中写入数据3:尝试读取新建文件的所有数据4:尝试读取该文件指定数据5:拷贝onefile.txt至新建twofile.txt文件,并且统计行数与字节长度下面该代码为第1,2,3,4项把代码复制,并创建test.py文件,然后在当前文件夹中的终端执行python3test.py即可#打开文件,并且写入6.2文件的基本处理defmain():#第一步打开文件#打开文件open()

    2022年9月29日
    3
  • C语言中 sqrt(); 函数的最全用法总结,最全!!!

    C语言中 sqrt(); 函数的最全用法总结,最全!!!C语言在中<math.h>中sqrt()函数的使用:功能:计算一个非负实数的平方根函数原型:在VC6.0中的math.h头文件的函数原型为doublesqrt(double);说明:sqrt系SquareRootCalculations(平方根计算),通过这种运算可以考验CPU的浮点能力。头文件:math特别注意!!!sqrt使用时大多需要要强制类型转化,因为s…

    2022年6月10日
    88
  • java 分苹果_数据结构Java版

    java 分苹果_数据结构Java版有600个苹果,10个盒子,要求把600个苹果分装到10个盒子里。如果有人来买苹果随便说出一个数,直接拿这些盒子组装一下就可以给他不用拆分盒子。请问这10个盒子应该分别装多少苹果?代码如下importjava.util.Scanner;publicclassTest{ publicstaticvoidmain(String[]args){  intbox[]=

    2022年10月12日
    2
  • Java自定义类加载器「建议收藏」

    Java自定义类加载器「建议收藏」一.Java类加载器的分类引导类加载器(bootstrapclassloader):用于加载Java的核心库,JDK自带,C++代码实现的 扩展类加载器(extensionsclassloader):用于加载Java扩展库,JDK自带 系统类加载器(systemclassloader):用于加载classpath路径下的类,也就是我们编写的应用程序 自定义类加载器(customclassloader):用于加载自定义的类,这个是重点二.Java自定义类加载器的使用场景依赖冲..

    2025年9月19日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号