数字电路实验(四)——寄存器、计数器及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寄存器的值
以此类推,结果正确。

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • [生成模型新方向]: score-based generative models

    [生成模型新方向]: score-based generative models0.前言最近(2021.6)发现了生成模型的一种新的trending范式:score-basedgenerativemodel,用一句话来介绍这种结构,就是:通过在噪声扰动后的大规模数据集(noise-perturbeddatadistributions)上学习一种scorefunctions(gradientsoflogprobabilitydensityfunctions)(得分函数,一种对梯度的对数似然估计),用朗之万进行采样得到符合训练集的样本.这种新的生成模型,

  • Altium Designer挖空开槽填坑之board cutout[通俗易懂]

    Altium Designer挖空开槽填坑之board cutout[通俗易懂]这种方法开不了槽!!!!博客原文链接:https://blog.csdn.net/hnjztyx/article/details/83021813为了防止PCB板上高压零件与附近的低压零件打火放点,需要在这两者之间开槽。在使用AltiumDesigner设计PCB时,想在板子上开一个槽或者挖一个孔该如何操作,是使用Keep-Out层还是Mechanical层,其实这两种在实际操作中都有人用,但是两种都不规范,存在隐患。正确的做法是使用“板子切割”(boardcutout)方法。具体方法就是在任意

  • osx安装失败_OSX

    osx安装失败_OSX目录1.MacPorts是什么2.MacPorts安装方法2.1使用安装器安装2.2源码安装2.3同步repositorytree和获取最新package3.更新失败的解决方法4.ports使用…

  • 字典序排序_排列字典序问题算法

    字典序排序_排列字典序问题算法前言字典序排序是基于字母顺序排列的单词按字母顺序排列的方法JavaList<String>list=newArrayList<>();list.add(“a”);list.add(“d”);list.add(“c”);list.add(“b”);Collections.sort(list);System.out.println(list);JSletdic=newArray(“a”,”c”,”d”,”b”);console.log(

    2022年10月27日
  • Python中jieba库_python怎么写入文件

    Python中jieba库_python怎么写入文件Pythonjieba库用法及实例解析1、jieba库基本介绍(1)、jieba库概述jieba是优秀的中文分词第三方库-中文文本需要通过分词获得单个的词语-jieba是优秀的中文分词第三方库,需要额外安装-jieba库提供三种分词模式,最简单只需掌握一个函数(2)、jieba分词的原理Jieba分词依靠中文词库-利用一个中文词库,确定汉字之间的关联概率-汉字间概率大的组成词组,形成分…

  • makefile 编译参数_gcc使用说明

    makefile 编译参数_gcc使用说明gcc编译源文件共有4个过程,预处理、编译、汇编、链接。预处理:命令:gcc-Etest.c-otest.i(-o后面指定生成文件的命名)过程:展开宏定义(#define),处理编译条件指令(#if#ifndef等),插入引用的头文件(#include),删除注释,添加行号和文件标识。结果:生成.i文件,一般的文本编辑器都能打开编译:命令:gcc-Ste…

    2022年10月13日

发表回复

您的电子邮箱地址不会被公开。

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