(选做)方案3:4个8位通用寄存器组的设计思路
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
4个8位通用寄存器组的设计与VHDL实现
一、设计目标
设计一个通用寄存器组Reg4-8,里面包含4个寄存器,每个寄存器可以存储8位的数据。
每次读的时候,能同时读出两个数据;每次写的时候,可以写入一个数据。
读/写的寄存器单元由寄存器编号所确定。
二、设计要求
1.当reset信号为0时,初始化各寄存器的值;
2.当reset信号为1时,可以进行寄存器读或写,具体如下:
✧寄存器的写受到时钟上升沿的控制。
即当时钟上升沿来临且写使能信号en=1时,
将输入的8位数据d[7..0]写入到由寄存器选择编号dest_reg[1..0](如dest_reg[1..0]=
“01”)所确定的寄存器(如寄存器R1)中。
其中,[1..0]代表下标从1到0,其它
类推;
✧寄存器的读不受时钟信号的控制。
即只要给出源寄存器选择编号source_reg[1..0]
和目的寄存器选择编号dest_reg[1..0],便同时将这两个对应寄存器单元的数值输
出到双数据总线sr[7..0]和dr[7..0]中,以便同时传2个数据给运算器;
3. 在CPU中,source_reg[1..0]和dest_reg[1..0]实际上都来自于指令,在运算过程中用户是难于操控的;相应地,寄存器的输出结果sr[7..0]和dr[7..0],也都是传送到运算器那里,是不能直接输出的。
但是,在设计的过程中,我们又必须要检测某个寄存器的内容是什么,以测试指令的执行是否正确。
解决此问题的思路是引入一些附加输入输出信号,如可以设置所需测试的寄存器的编号值,然后将结果输出到相应的指示灯上。
本设计中,我们用reg_sel[1..0]作为待测试的寄存器编号,并用reg_out[7..0]作为该寄存器中读出的数据。
三、设计思路
在设计时,首先根据设计目标和要求确定逻辑框图,然后再确定其内部结构。
前者,主要确定输入和输出信号,后者主要确定输出如何利用输入而产生。
1.首先根据上述的设计目标与要求,分析输入输出引脚。
根据设计要求,可知:
(1)进行初始赋值,需要1个1位的初始化信号reset;
(2)进行数据的写,需要1个1位的时钟信号clk、1个8位的输入数据d[7..0]、1个1位的写使能信号en以及1个2位的寄存器选择编号dest_reg[1..0];
(3)进行数据的读,需要源和目的寄存器选择编号各1个,即分别为source_reg[1..0]和dest_reg[1..0],各为2位;读出的8位数据信号各1个,即分别为sr[7..0]和dr[7..0];(4)用于测试用的寄存器选择编号reg_sel[1..0]及其对应的输出reg_out[7..0]。
综上可知,通用寄存器组Reg4-8的输入输出信号可总结为:
输入信号:reset、clk、en,dest_reg[1..0],source_reg[1..0]、d[7..0]、reg_sel[1..0]
输出信号:sr[7..0]、dr[7..0]、reg_out[7..0]
因此,Reg4-8的逻辑框图可以表示如下。
图1 Reg4-8逻辑框图
2.在设计出Reg4-8的逻辑框图后,进一步设计Reg4-8的内部结构。
在设计内部结构时,我们采用结构设计(即调用其它元件来连线实现)的方法。
为此,首先需要确定需要哪些模块,然后再考虑不同模块之间如何连接。
Reg4-8的设计思路,可以采用4个寄存器的通用寄存器组Reg4-16的设计方法,也可以采用16个寄存器的通用寄存器组Reg16-16的设计方法。
各人独自选择,并完成相应的逻辑框图及内部结构设计。
四、VHDL编程实现与TEC-CA平台仿真测试
在完成逻辑框图及内部结构的设计后,参考Reg4-16或Reg16-16的VHDL代码,各人自己编程完成。
完成编程且分配管脚后,在TEC-CA平台上进行仿真测试。
测试方法,亦参考Reg4-16或Reg16-16的测试方法。