总线数据传输实验
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验报告
实验日期:
学号:姓名:
实验名称:总线数据传输实验总分:
一、实验设计方案
➢实验框图
➢实验原理
1、SW_BUS低电平有效,此时将K[7..0]的数据送到总线,通过L[7..0]双向数据端口
输出显示总线的数据,使用的芯片是74244八位单向三态缓冲器;
2、R3_BUS、R2_BUS、R1_BUS低电平有效,其功能是将数据要传入的寄存器打开,
若相应的lddr为1(高电平有效),将数据传入相应的寄存器;
3、总线数据传输时,控制信号中只能有一个有效,寄存器的端口送至数据总线,所以
每个BUS接口对应每个R寄存器的显示;
4、通过读写的双重作用,实现R1和R2的数据交换。
➢表达式
Reg3←Reg1;Reg1←Reg2;Reg2←Reg3
➢方法一:vhdl代码
library ieee;
use ieee.std_logic_1164.all;
entity exp_bus is
port(clk:in std_logic;
sw_bus,r1_bus,r2_bus,r3_bus:in std_logic;
k:in std_logic_vector(7 downto 0);
lddr:in std_logic_vector(3 downto 1);
l:inout std_logic_vector(7 downto 0));
end exp_bus;
architecture rtl of exp_bus is
signal r1,r2,r3,bus_Reg:std_logic_vector(7 downto 0);
begin
ldreg:process(clk,lddr,bus_reg)
begin
if clk'event and clk='1' then
if lddr(1)='1'then r1<=bus_reg;
elsif lddr(2)='1'then r2<=bus_reg;
elsif lddr(3)='1'then r3<=bus_reg;
end if;
end if;
end process;
bus_reg<=k when (sw_bus='0'and r1_bus='1'and r2_bus='1'and r3_bus='1')else r1 when (sw_bus='1'and r1_bus='0'and r2_bus='1'and r3_bus='1')else
r2 when (sw_bus='1'and r1_bus='1'and r2_bus='0'and r3_bus='1')else
r3 when (sw_bus='1'and r1_bus='1'and r2_bus='1'and r3_bus='0')else
(others=>'0');
l<=bus_reg when (sw_bus='0' or r1_bus='0' or r2_bus='0' or r3_bus='0')else (others=>'Z');
end rtl;
➢方法二:bdf实验原理图
二、功能验证
➢波形图(图):
1 2 3 4 5 6 7 8 9 10
➢操作步骤(对应波形图列表说明每步状态、有效控制信号)
①设置初值,swr3r2r1_bus=1111,lddr=000,数据初始置k为00,总线输出为高阻
态;
②设置数据k=E1,swr3r2r1_bus=0111,lddr=001,将数据E1传至总线,通过L[7..0]
显示总线数据,数据E1存入r1并显示出来;
③swr3r2r1_bus=1110,lddr3=100,将R1的数据E1写入总线并存入R3,总线显示
从R1传至总线的数据E1;
④swr3r2r1_bus=1011,lddr=000,将R3的数据E1写入总线中;
⑤设置数据k[7..0]=D2,swr3r2r1_bus=0111,lddr2=010,将数据D2传至总线并存
入R2,通过L[7..0]显示总线数据D2;
⑥swr3r2r1_bus=1101,lddr=100,将R2的数据D2写入总线并存入R3,总线显示
从R2传至总线的数据D2;
⑦swr3r2r1_bus=1011,lddr=000,将R3的数据D2写入总线中;
⑧swr3r2r1_bus=1110,lddr=100,将R1的数据E1传至总线并存入R3中,实现R1
数据传输到R3中,并显示数据E1;
⑨swr3r2r1_bus=1101,lddr=001,将R2的数据D2传至总线并存入R1中,实现
R2数据传输到R1中,并显示数据D2;
⑩swr3r2r1_bus=1011,lddr=010,将R3的数据E1传至总线并存入R2中,实现
R3数据传输到R2中,并显示数据E1,交换完毕。
R1 R2 R3 初态E1H D2H
R1→R3 D2H E1H
R2→R1 D2H E1H
R3→R2 D2H E1H
➢仿真结论
波形仿真逻辑功能验证正确,通过总线数据传输的原理,用一个八位单向三态缓冲
器74244和三个带三态输出的八位寄存器74374实现了数据的显示和交换。
三、实验日志
➢实验问题
Q1. 在使用bdf实验原理图方法中的仿真未出现L~result
A1. 在对L[7..0]的定义中将bidir双向数据端口定义为output单向数据端口
➢思考题
Q1. 总线数据传输的基本特性是什么?
A1. 总线是一组进行互联和传输信息(指令、数据和地址)的信号线,总线的基本特性是不允许挂在总线上的部件同时有一个以上的部件向总线发出信息,但允许挂在总
线上的多个部件同时从总线上接收信息。
Q2. 从74374和74244内部电路结构图上说明它们的逻辑功能?
A2. 74244是八位单项三态缓冲器,使用了两个反相器(端口是1G和2G)和8个三态缓冲器构成,所以低电平有效,在有效时,输入传至输出,当1G、2G为高电平即
无效时,输出端口为高阻态;
74374是带三态输出的八位寄存器,低电平有效,由一个反相器,8个D锁存器和
8个三态反相器所构成。OEN是控制端口,为高电平时,输出为高阻态,低电平
时有效,时钟的上升沿触发,将输入传至输出端口,时钟处于低电平时,输出保持
不变。
Q3. 实验电路中BIDIR端口的用途是什么?
A3. BIDIR是双向数据端口,实际应用中,数据总线是双向的,所以要有双向的数据端口,不仅做信号的输入也做信号的输出。
Q4. 举例说明画电路图中连线bus line(粗线)和node line(细线)区别。总线与支线命名方式是什么?
A4. 在电路图中,lddr[3..1]是粗线,通过它的命名方式可以知道lddr有三条与之对应的支线,分别是lddr[3]、lddr[2]、lddr[1],这三条分线要与总线对应命名。
Q5. 实验需要互换R1和R2数据,但是电路图中R3的连线有问题,错在哪里?为什么?
A5. 电路图中R3的连线错误在于R3的输出支线命名全是LE,只是用来显示R3上的数据,而无法让R3上的数据传至总线,所以更改方法是将R3的输出与R1,R2
一样,全部改为L,那么便可向总线传输数据。
Q6. exp_bus.vhd代码中如何实现双向总线的端口定义与缓冲?
A6. 双向总线线的端口定义是通过inout来实现的。
Q7. 写出exp_bus.vhd代码中(others=>”Z”)的其他描述方式?
A7. 高阻态。
Q8. 编写VHDL的组合逻辑是如何实现多路选择器?
A8. 用when …else…的语句来实现的。