HNU 大数据 电子电路 实验四

仅供参考

一、实验目的

1.了解模型机中 SM 的作用;

2.熟悉指令寄存器、状态寄存器、指令计数器、寄存器的工作原理

3.学会使用 VERILOG语言设计时序电路。

二、实验内容

1.用 VERILOG 语言设计 SM;

2.用 VERILOG 语言设计一个 8 位的指令寄存器 IR;

3.用 VERILOG 语言设计一个 2 位的状态寄存器 PSW;

4.用 VERILOG 语言设计一个 8 位的指令计数器 PC;

5.用 VERILOG 语言设计 3 个 8 位寄存器组成的寄存器组,实现读写操作;

6.用 LPM_RAM_IO 定制一个256*8 的 RAM,实现对 RAM 的读写操作。;

三、实验过程

1、SM

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

B) 编写源代码

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

D) RTL视图

E) 功能仿真波形

F) 时序仿真波形

G)结果分析及结论

分析:

对于功能仿真,可以看到:

当 sm_en 信号为 1 有效时,输出 sm 在时钟的下降沿发生翻转;

当 sm_en 信号为 0 时,输出信号 sm 保持不变;

对于时序仿真,其输出结果和功能仿真类似,但存在8纳秒左右的延迟

结论:

元件设计符合设计要求,元件内部存在8纳秒左右的延迟

2、指令寄存器IR

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

B) 编写源代码

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

D) RTL视图

E) 功能仿真波形

F) 时序仿真波形

G)结果分析及结论

分析:

对于功能仿真:

在 0-30ns以及50-70ns,ir_ld 为 1,在时钟下降沿将输入写入输出;

当30-50ns以及70ns-1us,ir_ld 为0 时,输出保持不变;

对于时序仿真:

可以看到输出存在 9纳秒 左右的延迟,同时部分时刻输入的变化导致冒险出现,使得输出错误,输出的变化情况大致与功能仿真相同

结论:

元件设计符合设计要求,元件内部存在 9纳秒 左右的延迟

3、状态寄存器PSW

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

B) 编写源代码

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

D) RTL视图

E) 功能仿真波形

F) 时序仿真波形

G)结果分析及结论

分析:

对于功能仿真:

0-20ns,cf_en 和 zf_en 为 1,在时钟下降沿,将 cf 和 zf 的值写入,输出 c,z 中;20-40ns,cf_en 和 zf_en 为 0,输出 c 和 z 保持不变;

对于时序仿真:

其中输出 c 有 7ns 左右延迟,z 有 8ns 左右延迟,其输出变化与功能仿真大致相同。

结论:

元件设计符合要求,输出 c 有 7ns 延迟,输出 z 有 8ns 延迟。

4、指令计数器PC

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

B) 编写源代码

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

D) RTL视图

E) 功能仿真波形

F) 时序仿真波形

G)结果分析及结论

分析:

对于功能仿真:

0-20ns以及50-60ns,pc_inc 为 1,pc_ld 为 0,执行地址加 1 操作;

20ns-40ns以及60-80ns,pc_inc为 0,pc_ld 为 1,执行写入操作,将输入写入到输出中;

40-50ns以及80ns-1us,pc_inc 为 0,pc_ld 为0,数据保持不变;

对于时序仿真:

存在 9ns 左右的延迟,输出结果大致与功能仿真相同

结论:

元件设计符合要求,元件存在 9ns 左右的延迟

5、通用寄存器组

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

B) 编写源代码

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

D) RTL视图

E) 功能仿真波形

F) 时序仿真波形

G)时序分析

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

H)结果分析及结论

分析:

对于功能仿真:

在 30ns-60ns,we 为 0,进行写入操作,在每个下降沿,当 rwba=00,01,10时,将输入 i 分别写入寄存器 A,B,C 中;

而在 0-30ns以及60ns-1us,we 为 1,进行读取操作,在每个下降沿,根据 raa 和 rwba 的值 s,d 输出对应寄存器的值,当 raa=00,s 输出 A 的值,raa=01,s 输出 B 的值,raa=10,s 输出 C 的值;

对于时序仿真,输出 s 存在 9ns 左右的延迟,输出 d 存在 10ns 左右延迟,其余输出结果大致与功能仿真相同;

对于时序分析,可以得到时钟输出延迟 tco 为7.942ns,建立时间 tsu 为 5.326ns,保持时间 th 为 0.235ns,电路延迟时间 tpd 为 12.036ns

结论:

元件设计符合要求,输出 s 存在 9ns 左右的延迟,输出 d。

6、RAM的使用

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

B) 电路图

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

D) RTL视图

E) 功能仿真波形

F) 时序仿真波形

G)结果分析及结论:

分析:

对功能仿真:

15-20ns,xl 和 dl 都为 0,输出为高阻态;

0-15ns以及70ns-1us,xl 为 1,dl 为 0,进行写入操作,首先将104写入0和1地址,然后把102写入4地址,再把103写入 5和1地址;

30-70ns,xl 为 0,dl 为 1,进行读操作,对于每个上升沿,分别将64,1,2,3地址中的指令读出并输出,有的指令已提前存入对应的 mif 文件中,仿真正确;

对于时序仿真,输出存在 11ns 左右的延迟,同时由于输入的改变导致某些位置出现冒险。

结论:

元件设计符合要求,输出存在 11ns 左右延迟。

四、思考题

1.时钟周期的上升沿实现对RAM的读写操作,为何PC、SM、IR、PSW以及寄存器组的操作是下降沿完成?

答:

我们不但要保证取址操作在一个周期内完成,而且要保证 RAM 优先级较高,所以需要放在不同的跳变沿执行。假设放在同一时间,可能会便数据处理来不及,导致混乱,从而出错。

2.采用Verilog描述时序部件应该采用阻塞赋值语句还是非阻塞赋值语句?

答:

是非阻塞赋值。

3、通用寄存器组只有WE的控制信号,实现通用寄存器组读操作的电路是组合电路还是时序电路?请大致画出对寄存器组进行读操作的电路部分。

答:

组合电路

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

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

需要掌握的理论:

1. 如何用 Verilog 语言编写时序逻辑元件;

2. 每一种信号在clock的上升沿还是下降沿进行跳转;

3. 阻塞赋值和非阻塞赋值;

4. LMP_RAM里面的mif文件如何使用,如何判断存放成功;

5. 熟悉指令寄存器、状态寄存器、指令计数器、寄存器的工作原理。

遇到的困难:

1.LMP_RAM不清楚文件mif的用处何在,如何和仿真结合起来;

2.有两个控制变量,在功能和时序仿真时,两者能否同时为1或同时为0;

3.RAM读写如何验证是否成功;

4.输出变量是在always语句外面初始化还是里面;

5.找不到tpd。

解决的办法:

1.询问同学后,得知mif文件可预先存储一些非0的值,然后通过控制信号DL,XL来控制读写,把相应ADDR的值从mif文件中读取出来或者读取出去,或者呈高阻态,可以设定一些值,在功能仿真时,通过特定的输入,看是否输出附和我们在mif里存的值,则可知道仿真是否正确;

2.仔细研究老师在实验指导里面给出的信号变化以及用途的表格;

3.可以通过逻辑推理(简单的情况下),也可以直接两个都试一下,看仿真是否正确(复杂情况下);

4.老师告知,时序电路无tpd,属于正常现象。

经验教训:

多询问同学和老师,代码或者仿真不对时,多加尝试,bdf文件画图时连线一定要仔细,不得断线或者乱线,用Verilog语言实现之前,一定要熟悉元件的功能和信号变化原理。

2、对本实验内容、过程和方法的改进建议(可选项)。

答:ram不可以用代码实现吗?

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值