东南大学信息学院 poc实验报告
Computer Organization and Architecture
COURSE DESIGN
A Parallel Output Controller
------ (POC)
Southeast university
School of Information Science and Engineering
1.Design purpose
a.The purpose of this project is to design and simulate a parallel output controller (POC)
which acts an interface between system bus and printer. The ISE 14.7 EDA tool is
recommended and provided for simulation.
b.Learn about the using of Bi-directional Data Bus (BDB), and use a parallel Bi-directional Data Bus to finish the data transmission between CPU and POC.
2.Introduction and Tasks
POC is one of the most common I/O modules, namely the parallel output controller. It plays the role of an interface between the computer system bus and the peripheral
Figure 1. System structure diagram
As Fig.1 shows the inner connecting of a printer to the system bus through the POC. The - munication between POC and the printer is controlled by a “handshake” protocol given
in Fig.2.
Figure 2. The handshake-timing diagram between POC and the printer The handshaking process is described as follows: When the printer is ready to receive a
char- acter, it holds RDY=1. The POC must then hold a character at PD (parallel data) port and produce a pulse at the terminal TR (transfer request). The printer will change RDY to 0, take the character
at PD and hold RDY at 0 until the character has been printed (e.g. delay 5 or 10ms), then set RDY to 1 again when it is ready to receive the next character.
The buffer register BR is used to temporarily hold a character sent from the processor, which char- acter will be transferred to the printer later.
The status register SR is used for two control
functions:
①SR7 serves as a ready flag to indicate POC is ready or not to receive a new character from the processor.
②SR0 is used to enable the interrupt requests sent by
POC.
In interrupt mode, If SR0=1, then POC will send an interrupt request signal to processor when it is ready to receive a character (i.e., when SR7=1).
If SR0=0, then POC will not
interrupt.
The transfer of a character to POC via the system bus proceeds as follows:
In interrupt mode, SR0 is always
1.
After sending character to printer, POC sets the SR7 to 1, since SR0=1, the interrupt request signal (IRQ) is set to 0, which indicate an effective interrupt signal to the processor.
1、processor sets the value of SR7 &sets the value of
BR
①When the processor detects the effective IRQ signal, the processor directly selects BR and writes a character into BR, (processor will never read the state of SR7, which is different with polling mode.)
②Then the processor sets the SR7 to 0, which indicates that the new character has been written into
BR and not printed
yet.
2、POC reads and sets the value of SR7& handshakes operations with the
printer
①When POC detects that SR7 is set to 0, POC then proceeds to start the handshaking operations with the printer.
②After sending character to printer, POC sets the SR7 to 1, which indicates POC is ready to receive another character from the processor. The transfer cycle can now repeat.(①and ②are same with the polling state)
PS: During the handshaking operations between POC and printer, the processor does not try to access POC until it receives the interrupt request signal
3.The overall connection of the simulated printer and POC expressed in the top module form
Figure 3. The top module form of the project
4.Design description of the simulation input
waveforms
The input and output of CPU,POC and printer are shown below:
Processorj
Pins Descriptio
n
Input
clk Input the clock for the CPU running.
mode Choose the mode for printing.
When mode=’1’,select a interrupt
mode.
IRQ
Receive the interrupt signal IRQ.
When IRQ='1' , new data can be sent.
DIN[7..0] Read data from poc.
DOUT[7..0] Write data into poc.
Output
rw Show the direction of the DOUT[7..0] and DIN[7..0]
When rw='0', read data from POC.
When 'rw'='1', write data to POC.
A0 Control the address read and write on POC.
5.Simulation results
Connection between cpu and poc
Connection between poc and printer
Here are the explanations of the simulation wave:
interrupt mode:
1、In the interrupt mode,mode is always set 1, the print process occures by the IRQ signal from poc.
2、When S(7)=0, IRA send ‘0’ to cpu, it means there is a print requirement and cpu begin to handle it.
3、In the interrupt process RW and A0 are singals from cpu to poc to control the action of poc.
RW=’1’and A0=’1’write data from cpu(D) to poc(BR), means the begin of the interrupt process.
RW=’x’ and A0=’x’ means there is no interrupt requirement .
4、After sending datas to BR and set sr to “00000000”, if RDY=’1’, poc give a impulse in TR to make the printer begin to work. After the TR signal we can see that the input RDY signal from the printer change from 1 to 0, which shows that the TR signal really make the printer work.
5、After data of BR has been transmitted into printer, poc set SR to “10000001” itself to indicate that it comes to ready and can get the next print task.
6、Let data plus 1 to indicate the next new print cycle.
6. Conclusion and Discussions
1、As a parallel output controller ,poc module to act as an interface between cpu and printer. Form the simulation wave, we can see that my program meets the designs requirements.
2、I divide the system into three parts, and one top entity. And I use two way to finish the top entity. One is write program with vhdl language and another is create a schematic type file and connect wire.
3、By designing the POC module, I find it helps to learn how to use of quartus and VHDL for design and simulation.The process of designing also teachs me the importantce of figuring out the struc- ture and timing of the task before programming .
Appendix:
The program of processor:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
-- Uncomment the following library declaration if using
-- arithmetic functions with Signed or Unsigned values
--use IEEE.NUMERIC_STD.ALL;
-- Uncomment the following library declaration if instantiating
-- any Xilinx primitives in this code.
--library UNISIM;
--use UNISIM.VComponents.all;
entity processor is
port
(
clk : in std_logic;
IRQ : in std_logic;
DOUT : out std_logic_vector(7 downto 0):="00000000";
RW : out std_logic:='0';--0read,1write
A0 : out std_logic:='0';--0sr,1br
DIN : in std_logic_vector(7 downto 0)
);
end processor;
architecture Behavioral of processor is
signal data:std_logic_vector(7 downto 0):="00000000";
signal mode:std_logic:='1';--默认为中断模式
begin
process(clk)
begin
if clk'event and clk='1' then
if mode='1' then
if IRQ='0' then
A0<='1';
RW<='1';--写入数据到BR
data<=data+"00000001";--代表传输的字符
DOUT<=data;
else
A0<='X';
RW<='X';--读入SR的数据
end if;
end if;
end if;
end process;
end Behavioral;
the program of poc:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use ieee.std_logic_arith.ALL;
use ieee.std_logic_unsigned.ALL;
-- Uncomment the following library declaration if using
-- arithmetic functions with Signed or Unsigned values
--use IEEE.NUMERIC_STD.ALL;
-- Uncomment the following library declaration if instantiating -- any Xilinx primitives in this code.
--library UNISIM;
--use UNISIM.VComponents.all;
entity poc is
port
(
A0 : in std_logic;
RW : in std_logic;
clk : in std_logic;
CS : in std_logic:='1';
RDY : in std_logic;
IRQ : out std_logic:='1';
DOUT : out std_logic_vector(7 downto 0);
PD : out std_logic_vector(7 downto 0);
TR : out std_logic:='0';
DIN : in std_logic_vector(7 downto 0)
);
end poc;
architecture Behavioral of poc is
signal SR : std_logic_vector(7 downto 0):="10000001"; signal BR : std_logic_vector(7 downto 0):="00000000"; signal count:integer range 0 to 5:=0;
type state_type is (s0,s1,s2);
signal state: state_type:=s0;
begin
process(clk)
begin
if clk'event and clk='1' then
TR<='0';
IRQ<='1';
case state is
when s0=>----中断请求信号
if SR(7)='1' then
IRQ<='0';--中断请求
state<=s1;
else
IRQ<='1';
state<=s2;--无中断请求
end if;
when s1=>----读入读出选择
if RW='1' and A0='1' then--cpu写入数据到BR
BR<=DIN;
SR(7)<='0';
state<=s2;
elsif RW='0' and A0='0' then--cpu读入SR的数据
DOUT<=SR;
elsif RW='1' and A0='0' then--cpu写入数据到SR
SR<=DIN;
elsif RW='0' and A0='1' then--cpu读入BR的数据
DOUT<=BR;
end if;
when s2=>----打印机
if RDY='1' then
TR<='1';
PD<=BR;
SR(7)<='1';
end if;
state<=s0;
end case;
end if;
end process;
end Behavioral;
the program of printer:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use ieee.std_logic_arith.ALL;
use ieee.std_logic_unsigned.ALL;
-- Uncomment the following library declaration if using
-- arithmetic functions with Signed or Unsigned values
--use IEEE.NUMERIC_STD.ALL;
-- Uncomment the following library declaration if instantiating -- any Xilinx primitives in this code.
--library UNISIM;
--use UNISIM.VComponents.all;
entity print is
port
(
RDY : out std_logic:='1';
TR : in std_logic;
PD : in std_logic_vector(7 downto 0);
clk : in std_logic
);
end print;
architecture Behavioral of print is
signal count: integer range 0 to 5:=0;
signal data: std_logic_vector(7 downto 0);
signal ready:std_logic;
begin
process(clk,TR)
begin
if clk'event and clk='1' then
if TR='1' then
RDY<='0';
ready<='0';
data<=PD;
else
if ready='0' then
count<=count+1;
if count=5 then
RDY<='1';
ready<='1';
count<=0;
end if;
end if;
end if;
end if;
end process;
end Behavioral;
connection program:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
-- Uncomment the following library declaration if using
-- arithmetic functions with Signed or Unsigned values
--use IEEE.NUMERIC_STD.ALL;
-- Uncomment the following library declaration if instantiating -- any Xilinx primitives in this code.
--library UNISIM;
--use UNISIM.VComponents.all;
entity top is
port
(
CLK : in std_logic
);
end top;
architecture Behavioral of top is
signal a0:std_logic;
signal irq:std_logic;
signal d1:std_logic_vector(7 downto 0);
signal d2:std_logic_vector(7 downto 0);
signal rw:std_logic;
signal rdy:std_logic;
signal pd:std_logic_vector(7 downto 0);
signal tr:std_logic;
component processor
port
(
clk : in std_logic;
IRQ : in std_logic;
DOUT : out std_logic_vector(7 downto 0):="00000000"; RW : out std_logic:='0';--0read,1write
A0 : out std_logic:='0';--0sr,1br
DIN : in std_logic_vector(7 downto 0)
);
end component;
component poc
port
(
A0 : in std_logic;
RW : in std_logic;
clk : in std_logic;
CS : in std_logic:='1';
RDY : in std_logic;
IRQ : out std_logic:='1';
DOUT : out std_logic_vector(7 downto 0);
PD : out std_logic_vector(7 downto 0);
TR : out std_logic:='0';
DIN : in std_logic_vector(7 downto 0)
);
end component;
component print
port
(
RDY : out std_logic:='1';
TR : in std_logic;
PD : in std_logic_vector(7 downto 0);
clk : in std_logic
);
end component;
begin
u1: processor port map(clk=>CLK,A0=>a0,RW=>rw,IRQ=>irq,DOUT=>d1,DIN=>d2); u2: poc port
map(clk=>CLK,A0=>a0,RW=>rw,IRQ=>irq,DOUT=>d2,DIN=>d1,RDY=>rdy,TR=>tr,PD =>pd);
u3: print port map(clk=>CLK,RDY=>rdy,TR=>tr,PD=>pd);
end Behavioral;
东南大学信息学院计算结构POC实验报告
POC实验报告 目录 目录 .............................................................................................................................................. 1-1 1 实验目的............................................................................................................................... 1-1 2 实验任务............................................................................................................................... 2-1 3 架构说明............................................................................................................................... 3-2 4 仿真信号设计与结果分析................................................................................................... 4-3 4.1 打印机模块............................................................................................................... 4-3 4.1.1 仿真信号说明与设计................................................................................... 4-3 4.1.2 仿真结果与分析........................................................................................... 4-3 4.2 POC模块.................................................................................................................. 4-3 4.2.1 仿真信号说明与设计................................................................................... 4-3 4.2.2 仿真结果与分析........................................................................................... 4-4 4.3 整体模块................................................................................................................... 4-4 5 总结与补充........................................................................................................................... 5-4 5.1 查询模式................................................................................................................... 5-5 5.2 中断模式................................................................................................................... 5-5 6 附录....................................................................................................................................... 6-6 1实验目的 本实验的目的是设计一块简易的POC(并行输出控制器),从而连接系统总线和打印机。通过本次实验,可以初步了解输入输出、存储模块的设计,为接下来CPU的设计奠定良好的基础。 2实验任务 利用ISE和VHDL语言设计出POC模块和打印机模块,并且通过仿真测试并验证其主要功能的实现。 仿真主要以中断响应工作模式为主。而查询模式也需要了解,这部分分析内容都将放在总结环节。