前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >数字电路实验(四)——寄存器、计数器及RAM

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

作者头像
全栈程序员站长
发布2022-09-14 10:15:15
7020
发布2022-09-14 10:15:15
举报
文章被收录于专栏:全栈程序员必看

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

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.cn/158060.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年7月1,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档