数据通路实验
- 格式:doc
- 大小:228.50 KB
- 文档页数:9
数据通路实验
预习报告
1数据通路中运算器与存储器协调工作原理是什么?
各个数据经过总线连接传输到运算器及存储器,并将运算结果通过数据通路传递到存储器,期间通过每个存储器及运算器的bus输出控制进行协调工作,使得数据不会在总线上冲突。
2、数据及地址在数据通路上传输方法。
通过不同数据控制信号进行传送。
地址信号及数据信号存储地方不同而且控制信号要求不同,通过这样的方法使得总线上数据不会冲突从而达到地址和数据在数据通路上的传输。
3、数据通路中需要注意各种控制信号的作用和设定值,否则不能仿真出正确的波形。
思考题:
1、电路的初始状态怎么设置?有几个器件能够发送数据到总线,
它们的控制信号是什么?
(1)、令bus_sel全部为1,即令输出到总线的所有控制信号无效。
同时运算模块m|cn|s3|s2|s1|s0为000000,lddr信号都为无
效,k输入数据为0。
(2)、能够发送数据到总线的器件为PC,R4,R5,,74244,ALU运算单元,RAM存储器单元。
其控制信号分别为PC_BUS,LDDR4,
LDDR5,ALU_BUS,RD,WE。
2、画数据通路电路图时,如何连结单一总线?
只需将标号标志为相同引脚即可实验数据在总线上的传送。
得到单一总线连接的数据通路电路图
3、如何统一两个模块的总线数据输入端k[7..0]及inputd[7..0]?Inputd[7..0]可以不使用,直接将运算模块数据连入到存储器模块的双向输入输出部分,即可将数据送入到存储模块。
实验日志
10月5日
问题:RAM模块sw_bus为什么没有连接输入端?
解决:发现RAM模块的sw_bus是控制inptud输出的信号线,不进行连接一样可以进行总线数据上的传送,其信号线不影响实验结果。
10月9日
问题:为何资料上的波形图中ar地址显示与pc地址显示相差一个时间差?
解决:通过分析数据通路的电路,发现pc的数据在更新时其之前的地址值已经传送到ar中,因此ar所得到的地址并非pc当时得到的。
所以在我自己进行仿真的时候,将pc的新地址送入ar后,才将写信号改为有效,从而可以解决困惑。
10月12日
问题:
出现了d[7..0]与后面的数据输入不能运用总线的方法进行输入。
解决:
解决方法不太好,因为其中不太明白为何出现这样的问题,可能是因为该八个端口是双向输入输出,所以不能直接用于输入。
最后只能将输出与输入直接相连,编译成功。
10月13日
问题:
数据通路实验的输入端过多,需要进行化简,想到了运用译码的方法进行简化,从而将输入端减少至实验箱够用的个数。
但经过译码后发现输出没问题的情况下PC保持状态时并没有进行保持,而是进行了清零。
解决:
经观察输出波形及输入数据发现,可能是因为输入端的en信号影响的反应,最后决定将pc状态的数据不进行译码,而直接进行输入,最后下载到试验箱时没有该问题出现。
10月14日
问题:
下载到试验箱时发现en为0,pc为111时数码管显示为计数情况。
解决:
经观察电路发现,pc为111,pc_bus为0时该状态一直保持着,即使en为0信号,所以在时钟信号有效地时候就会计数,最后想到运用一个与门将clk信号计数屏蔽掉,如图:
10月18日
问题:ram单元数据不能送入到dr1等寄存器。
解决:发现问题出在d[7..0]的数据不能送到总线上,只需将代码进行改变。
改动如下:
说明:由于d的数据只需在we_rd为01的时候送到dr等寄存器中,所以在x输入信号有效时将d的数据付给总线即可。
X端口连接rd
信号如图:,we_rd[0]为rd信号。
实验报告
一、附加电路设计思想:
(1)、输入部分:运用译码方法,用sw_bus为例,其有六种状态分别为11111,11110,11101,11011,10111,01111,(同一状态下只有一个bus线为有效),所以只需用000至101,来进行译码,译码部
分语言为
其他输入部分一样运用此方法。
另一种方法可以用计数器,但是操作起来感觉有点麻烦,所以没有使用。
(2)、显示部分
显示部分需要进行0到16的显示,用十六进制就是0到F的数码管显示,所以7449器件不能使用。
当然可以自己用电路进行连接,三态门进行实现。
设计起来比较麻烦。
此处运用vhdl语言。
译码部分为:
二、数据通路部分波形仿真结果及说明:
波形仿真说明:
1、设定初始状态使bus_sel全部为1,alu_sel为0,ld_reg为
0.,从而将输出控制信号设定为无效状态。
同时pc控制为
100即保持不变状态。
Ram控制读写为00即没进行任何操作。
数据输入端k[7..0]为0,得到总线输出为zz高阻态。
2、将pc设定为计数状态,bus_sel为11110,从而pc_bus为有
效将计数得到的数据输出到总线上,alu控制单元一样处于
无效状态。
Ld_reg中为00001,we_rd为00即AR存储器为有
效但不进行读写操作,然后pc_sel为100成为保持状态,
ld_ar为0选中ar,使得ar处于地址为01H处。
3、将数据写入R1和R2。
控制信号bus_sel为01111使得数据输
入为有效此时k[7..0]输入为09H和02H,ld信号分别选中
为10000和01000使得R1和R2能够存储输入的数据。
4、将alu_sel设定为011001进行dr1与dr2加计算,得到的数
据0BH存入r4寄存器中,同时将we_rd设定为10进行写入
RAM操作,其写入地址为01H单元。
(从ar显示数据可以看
出)
5、将计数器控制端pc_sel置为111,进行计数,得到02H地址,
并将其打入ar中,确定下次写入时地址无误。
6、将alu_sel设定为000110进行dr1与dr2加计算,得到的数
据07H存入r5寄存器中,同时将we_rd设定为10进行写入
RAM操作,其写入地址为02H单元。
(从ar显示数据可以看
出)
7、将pc进行清零操作,令pc_sel为000,即可进行清零,同时
令pc_bus为0,使得pc的数据传到总线上。
然后进行加计
数,pc_sel为111,并使ldar有效使地址处于01H状态。
8、进行读操作,读出01H中存在的数据,令bus_sel为11111,
we_rd为01,pc_sel为100处于保持状态,ld信号为0无效。
读出数据位0BH,此为刚09H加02H的结果,可见存入RAM
中成功。
9、再令计数器加计数到02H,同时ldar有效处于02H地址中。
然后读操作,令bus_sel为11111,we_rd为01,pc_sel为
100处于保持状态,ld信号为0无效,读出数据位07H,此
即为刚刚算出的09H减02H的结果,同样存入RAM成功。
10、再进行加计数pc_sel为111,将地址变为03H,便于下次操
作。
11、进行R4和R5的数据计算。
将R4和R5的bus控制端分别设
定为0,使其数据分别进入R1和R2,方便进行算术运算。
此
状态需要we_rd为00,R1和R2的ld信号有效使数据能够进
入。
12、Alu_sel设定为011001,进行DR4加DR5的计算,同时alu_bus
为0使计算的输出可以到总线。
再令we_rd为10,将加计算
的结果12H存入RAM中地址为03H的单元,然后令we_rd为
01读出此处数据位03H,说明没有错误,正确存入了数据。
13、再进行加计数,使pc计数到04H单元,并令ldar为1使AR
为处于该地址。
再令pc_sel为100保持当前地址,alu_sel
为000110进行dr1减dr2,同时we_rd为10将得到的结果
04H写入AR。
最后再读操作,令we_rd为01,得到仍为04H。
下面是对01H 和02H 单元数据的操作运算,只进行了01H 和02H 单元的加运算,减运算省略不做。