百度网盘:实验3
提取码:0928
实验三 模型机组合部件的实现(二)
班级 姓名 学号
一、实验目的
- 了解简易模型机的内部结构和工作原理。
- 分析模型机的功能,设计 8 重 3-1 多路复用器。
- 分析模型机的功能,设计移位逻辑。
- 分析模型机的工作原理,设计模型机控制信号产生逻辑。
二、实验内容
- 用 VERILOG 语言设计模型机的 8 重 3-1 多路复用器;
- 用 VERILOG 语言设计模型机的移位模块;
- 用 VERILOG 语言设计模型机的控制信号产生逻辑
三、实验过程
1、8重3-1多路复用器
A)创建工程
(选择的芯片为family=Cyclone II;name=EP2C5T144C8)
B) 编写源代码
C) 编译与调试
(包含编译调试过程中的错误、警告信息以及资源消耗)
D) RTL视图
视图分析:
- 当输入为00时,第三个复用器DATAB打开,允许a信号输入,最终输出a数据。
- 当输入为01时,第二个复用器DATAB打开,允许b信号输入,最终输出b数据。
- 当输入为10时,第一个复用器DATAA打开,允许c信号输入,最终输出c数据。
E) 功能仿真波形
结果分析及结论:
- A . 0 -10ns,madd=00, 输出y=a,仿真无误。
- 10-20ns,madd=01,输出y=b,,仿真无误。
- 20-30ns,madd=10,输出y=c,,仿真无误。
- 其余时间无输入,对应也就没有输出。
F) 时序仿真波形
结果分析及结论:
时序仿真中,输出y与预计结果基本一致,但因为延迟的缘故,有些输出出现错误。
G) 时序分析
操作方法是:编译后,在compilation report中选择【timing analysis】-【summary】和【tpd】
结果分析及结论:
耗时最长为13.772ns,从b[7]到y[7];
耗时最短为7.051ns,从c[0]到y[0]
可结果由耗时最长的那个决定,故整体耗时为13.772ns。
2、移位逻辑
A)创建工程
(选择的芯片为family=FLEX10K;name=EPF10K20TI144-4)
B) 编写源代码
C) 编译与调试
(包含编译调试过程中的错误、警告信息以及资源消耗)
D) RTL视图
结果分析:
这个视图较为复杂,通过视图来判断逻辑是否正确难度较大,所以逻辑的正确性,将通过后续的波形图来验证。
E) 功能仿真波形
结果分析及结论:
- 0ns-10ns时,fbus=1。不进行移位操作,输出w=a=00000100;
- 10ns-20ns时,flbus=1。进行左移位操作,输出w=0000010;
- 20ns-30ns时,frbus=1。进行右移位操作,输出w=00000001。
综上,该程序功能仿真成功。
F) 时序仿真波形
结果分析及结论:
时序仿真中,输出y与预计结果基本一致,但因为延迟的缘故,有些输出出现错误。
G) 时序分析
结果分析及结论:
耗时最长为20.800ns,从a[1]到w[2];
耗时最短为13.300ns,从a[0]到w[0]
可结果由耗时最长的那个决定,故整体耗时为20.800ns。
3、控制信号产生逻辑
A)创建工程
(选择的芯片为family=FLEX10K;name=EPF10K20TI144-4)
B) 编写源代码
解法一(较繁琐):
解法二(课上教的方法):
C) 编译与调试
(包含编译调试过程中的错误、警告信息以及资源消耗)
D) RTL视图
结果分析:
该4位全加器分层构建而成,每一层的RTL视图和原理图相符。
E) 功能仿真波形
结果分析及结论:
对于输入每次使一个指令有效,即为高电平1,观察相应的控制信号。均符合预想的控制信号结果。
故该程序功能仿真成功。
F) 时序仿真波形
结果分析及结论:
可以看出,输出和功能仿真相比,集体都有一定的延时,除此之外,在一些本该低电平的地方突然出现了高电平,本该高电平的地方突然出现了低电平,这是时序仿真的过程中出现了冒险现象。
G) 时序分析
结果分析及结论:
耗时最长为25.300 ns,从rsl到alu_s[3];
耗时最短为12.500 ns,从movb到madd[1];
可结果由耗时最长的那个决定,故整体耗时为25.300ns。
四、思考题
1.移位逻辑不工作时,输出应该为何值?为什么?
应该输出高阻。移位逻辑不工作时,为了预防移位逻辑输出数据到总线中和其他位置输出到总线中的数据起冲突,应该阻止移位逻辑向总线输出数据,故此时移位逻辑输出应该为高阻。
2.移位逻辑的输出Cf应该如何处理?
移位逻辑的控制信号FBUS为1,将输入的数据直接传至输出,cf不变;
FL BUS为1时,输入的数据循环左移一位传至输出,且D7送至CF;
FR BUS为1时,输入的数据循环右移一位传至输出且D0送至CF。
3.如何产生正确的控制信号以及具体的编程实现?
首先需要对16种命令分别是如何控制信号的一一分析,得出不同命令下信号的输出是什么,然后根据分析的结果将控制信号的命令用或运算组合起来。其次再根据之前所列的每个控制信号的或运算式子,采用if语句/when else语句进行编程实现。
五、实验总结、必得体会及建议
1、从需要掌握的理论、遇到的困难、解决的办法以及经验教训等方面进行总结。
Mux3-1和shift工程代码量比较少,思路也比较简单。相较于理论上多路复用器的学习,用代码实现更为简单。但是写代码的时候,还是不能一次写对,还是练习不足。
con_sinal工程代码量比较大,有200多行,但是上手以后,还是挺快的。但是后来用了课上老师讲的方法,列了个指令信号逻辑的表格后,大大缩短了代码量。
2、对本实验内容、过程和方法的改进建议(可选项)。
题目可以给出几个样例与正确结果,用于学生自己验证,功能仿真时的正确性。同时也可作为作业要求提交输入该样例得到的正确结果。