<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>PCI protocol | Student Projects</title>
	<atom:link href="https://studentprojects.in/tag/pci-protocol/feed/" rel="self" type="application/rss+xml" />
	<link>https://studentprojects.in</link>
	<description>Microcontroller projects, Circuit Diagrams, Project Ideas</description>
	<lastBuildDate>Thu, 10 Mar 2022 10:26:20 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.1.7</generator>
	<item>
		<title>Design and Verification of a PCI Based System using SystemC</title>
		<link>https://studentprojects.in/software-development/software-projects/software/design-verification-pci-based-system-systemc/</link>
					<comments>https://studentprojects.in/software-development/software-projects/software/design-verification-pci-based-system-systemc/#comments</comments>
		
		<dc:creator><![CDATA[Editorial Team]]></dc:creator>
		<pubDate>Sun, 06 Feb 2011 08:04:16 +0000</pubDate>
				<category><![CDATA[Software Engineering Projects]]></category>
		<category><![CDATA[monitor]]></category>
		<category><![CDATA[interfaces]]></category>
		<category><![CDATA[driver]]></category>
		<category><![CDATA[testbench]]></category>
		<category><![CDATA[project]]></category>
		<category><![CDATA[PCI protocol]]></category>
		<category><![CDATA[pci]]></category>
		<category><![CDATA[bus]]></category>
		<category><![CDATA[verification]]></category>
		<category><![CDATA[systemc]]></category>
		<category><![CDATA[tlm]]></category>
		<category><![CDATA[modeling]]></category>
		<category><![CDATA[system design]]></category>
		<category><![CDATA[pci verification]]></category>
		<category><![CDATA[master]]></category>
		<category><![CDATA[slaves]]></category>
		<category><![CDATA[arbitor]]></category>
		<category><![CDATA[testcases]]></category>
		<guid isPermaLink="false">http://studentprojects.in/?p=622</guid>

					<description><![CDATA[<p>Study about PCI Bus protocol before reading this project 1.1. System Design Introduction: The present design is of a PCI based system consisting of three Masters and six Slaves. The masters communicate with the slaves using the PCI bus. The transaction is governed by the standard PCI bus transaction protocol. Whenever a master needs to</p>
<p>The post <a href="https://studentprojects.in/software-development/software-projects/software/design-verification-pci-based-system-systemc/">Design and Verification of a PCI Based System using SystemC</a> first appeared on <a href="https://studentprojects.in">Student Projects</a>.</p>]]></description>
										<content:encoded><![CDATA[<p>Study about <a title="PCI Bus protocol tutorial" href="https://studentprojects.in/articles/computer-science/protocol/introduction-to-pci-protocol/" target="_blank" rel="noopener">PCI Bus protocol</a> before reading this project</p>
<p><strong>1.1. System Design Introduction:</strong><br />
The present design is of a PCI based system consisting of three Masters and six Slaves. The masters communicate with the slaves using the PCI bus. The transaction is governed by the standard PCI bus transaction protocol. Whenever a master needs to communicate with any of the slaves through the PCI bus it requests for the control of the bus to the arbiter. The arbiter grants the master control of the bus depending on the availability of the bus and also on the requesting master’s priority. Once the master is granted control of the bus it starts the transaction by keeping the address of the target slave along with the transaction command. The address thus kept is read by all the slaves. This address is decoded by each of them individually. If the address belongs to them, that particular slave acknowledges the call. This is the address phase. The address phase lasts for just one clock cycle. Once the address phase is finished the data phase begins. If none of the slaves acknowledge the masters call then the master aborts the transaction.</p>
<p>The design verification is done using the testbench. The testbench is connected to the design using channels. The testbench tells the master what transaction is to be carried out and also inspects the data sent and received at the slave end. The block diagram is as given below.</p>
<figure id="attachment_1358" aria-describedby="caption-attachment-1358" style="width: 493px" class="wp-caption aligncenter"><img decoding="async" class="size-full wp-image-1358" title="General system block diagram" src="https://studentprojects.in/wp-content/uploads/2011/02/General-block-diagram.jpg" alt="General system block diagram" width="493" height="276" /><figcaption id="caption-attachment-1358" class="wp-caption-text">General system block diagram</figcaption></figure>
<p><strong>1.2. System</strong></p>
<p>This section describes the working of the present design in brief. The block diagram of the system is as shown in below fig.</p>
<p>The DUT consists of Master module, Slave module, Arbiter module, Channel declaration and a top file which connects all the instances. Just one module of the master is defined and three objects are instantiated in top file. The same is being done with the slave module, just one slave module is being described and six objects are being instantiated from it in the top file.</p>
<p>The interconnections of all the modules are shown below. Each of the blocks is as described below.</p>
<figure id="attachment_1359" aria-describedby="caption-attachment-1359" style="width: 459px" class="wp-caption aligncenter"><img decoding="async" loading="lazy" class="size-full wp-image-1359" title="General block diagram of the system" src="https://studentprojects.in/wp-content/uploads/2011/02/General-block-diagram-of-the-system.jpg" alt="General block diagram of the system" width="459" height="635" /><figcaption id="caption-attachment-1359" class="wp-caption-text">General block diagram of the system</figcaption></figure>
<p><strong>1.2.1 Master :</strong><br />
In the fig5.2 Master 1, Master 2 and Master 3 are all instances of the main module Master. The master receives packets of information from the test bench. This packet contains information regarding address of the destination, command definition and data. It also tells which master is to carry out the transaction. Once the master receives and decodes this packet it begins the required transaction.</p>
<p>Whenever a master has to undertake any transaction it first requests the arbiter for permission to take over the bus. Once the arbiter has granted the request, the master begins the required transaction.</p>
<p>The transaction begins with the master by asserting FRAME#. At the same time it keeps the address of the destination along with the transaction command definition. This is called ‘Address phase’. Once the address phase is done, the master asserts IRDY# and waits for the addressed slave to asserts DEVSEL#. If DEVSEL# is not asserted until the latency time runs out, the master ends the transaction with ‘Master abort’. If DEVSEL# is asserted the ‘Data phase’ begins. The data transaction between the master and slave takes place only when both IRDY# and TRDY# are asserted. As soon as TRDY# is asserted the master places the data on the AD lines during write transaction and during read transaction it reads the data from the bus after assertion of TRDY#. All signal assertions are done during the negative clock edge and are sampled during the positive clock edge. Care should be taken to see that the signals or data on the AD lines are stable during the positive edge of the clock pulse. The master can make the target wait for the data by deasserting the IRDY# signal.</p>
<p>Parity of AD, C/BE and PAR are checked regularly during each phase (data/address). During write transaction the master keeps the data on the multiplexed AD lines during one clock cycle and keep its parity during next clock cycle. During a read transaction the master checks for parity during the second clock cycle of the received data. If parity is found to be odd, it asserts the PERR# during the third clock cycle. This will result in ‘Master abort’.</p>
<p>In some cases the slave might be ready to carry out the present transaction that the master is requesting. During such a situation the master should end the transaction and retry after some time, but with the same address and command definition. The end of the transaction is marked by deassertion of FRAME#. The FRAME# might be deasserted after the last data has been transferred or just before the last data phase. Once all the data are transferred or received IRDY# is deasserted.</p>
<p><strong>1.2.2 Slave : </strong></p>
<p>In fig 5.2, Slave 1 – Slave 6 are the instances derived from the module called Slave. Each slave is assigned with a unique address that is used by the master to notify which slave it wants to interact with. The address is assigned while the object of slave is instantiated.</p>
<p>Before a slave undertakes nay memory or i/o based transactions its configuration space should be configured. In the present design this is done by any of the masters. Rest of the transactions are done depending on the content present in the configuration space. In our design we have implemented the configuration space using a structure. Once the slave has been configured it is ready to undertake any of the transactions.</p>
<p>The transaction begins when the master asserts FRAME#. During the address phase all the slaves read the address placed on the AD lines. In the same clock pulse each slave compares the read address with the content stored in the base address registers present in the configuration space. If the address belongs to any particular slave it acknowledges by asserting DEVSEL# in the next clock cycle. If the slave is ready to undertake the required transaction it asserts TRDY# along with DEVSEL#. But, if the slave is not ready to undertake the required transaction it asserts STOP# instead of TRDY# telling the master to retry the same try the same transaction after some time. Once TRDY# and IRDY# are asserted the data transfer takes place. If IRDY# is not asserted then the slave has to wait until the master asserts it. The slave has to wait until the master asserts it. The slave can also make the master wait by deasserting TRDY# and asserting it only when it is ready to receive/send data.</p>
<p>The memory and i/o space are implemented in the monitor. The slave extracts the address of the destination location from the address that is being sent from the maser and sends it to the monitor along with the data to be stored or retrieved.</p>
<p>In case of blast transaction if the slave is not able to continue with any more transaction it aborts the transaction. There are three ways a slave can abort a transaction – ‘Target Abort’, ‘Target abort with data’ and ‘Target abort without data’. In ‘Target abort’, the slave needs to abort if just asserts STOP# and at the same time deasserts DEVSEL# as well as TRDY#. In ‘Master abort without data’, as soon as STOP# is asserted only TRDY# is deasserted. DEVSEL# is deasserted only clock pulse after FRAME# is deasserted. In this case no data is transmitted one the STOP# is asserted. During ‘Target abort with data’, one data phase is allowed after STOP# is asserted. After one data phase has been completed TRDY# is deasserted. The rest of the deassertion are similar to that of target abort without data.</p>
<p>Parity of AD, C/BE and PAR are checked regularly during each phase (data/address). During read transaction the slave keeps the data on the multiplexed AD lines during one clock cycle and keeps its parity during next clock cycle. During a write transaction the slave checks for parity during the second clock cycle of the received data. If parity is found to be odd, it asserts the PERR# during the third clock cycle. This will result in ‘Target abort’.</p>
<p><strong>1.2.3 Arbiter :</strong></p>
<p>Since the PCI Bus accommodates multiple masters — any of which could request the use of the bus at any time — there must be a mechanism that allocates use of bus resources in a reasonable way and resolves conflicts among multiple masters wishing to use the bus simultaneously.</p>
<p>The arbiter is used to grant permission to the requesting master. When more than one master is requesting, the arbiter takes in all the requests and decides which master should be granted the permission of using the bus. The arbiter selects the master depending on its priority i.e. the requesting master with the highest priority is selected first by asserting the GNT# signal. In case of multiple requests the grant is given using ‘Round Robin’ logic. The grant is given by asserting the respective GNT(G1,G2,G3) signal. Every master is connected to the arbiter by individual REQ(R) and GNT(G) signals as seen in the fig 1.2. REQ# and GNT# are unique on a per master basis allowing the arbiter to implement a bus fairness algorithm. Arbitration in PCI is &#8220;hidden&#8221; in the sense that it does not consume clock cycles.</p><p>The post <a href="https://studentprojects.in/software-development/software-projects/software/design-verification-pci-based-system-systemc/">Design and Verification of a PCI Based System using SystemC</a> first appeared on <a href="https://studentprojects.in">Student Projects</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://studentprojects.in/software-development/software-projects/software/design-verification-pci-based-system-systemc/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>Introduction to PCI protocol</title>
		<link>https://studentprojects.in/software-development/protocol/introduction-to-pci-protocol/</link>
					<comments>https://studentprojects.in/software-development/protocol/introduction-to-pci-protocol/#comments</comments>
		
		<dc:creator><![CDATA[Editorial Team]]></dc:creator>
		<pubDate>Sat, 10 Oct 2009 15:24:16 +0000</pubDate>
				<category><![CDATA[Protocols]]></category>
		<category><![CDATA[PCI Cards]]></category>
		<category><![CDATA[PCI slots]]></category>
		<category><![CDATA[master and slave]]></category>
		<category><![CDATA[computer hardware]]></category>
		<category><![CDATA[reports]]></category>
		<category><![CDATA[error detections]]></category>
		<category><![CDATA[arbitration process]]></category>
		<category><![CDATA[space decoding]]></category>
		<category><![CDATA[timing diagrams]]></category>
		<category><![CDATA[bus transactions]]></category>
		<category><![CDATA[pin descreption]]></category>
		<category><![CDATA[pci signals]]></category>
		<category><![CDATA[PCI protocol]]></category>
		<guid isPermaLink="false">http://studentprojects.in/?p=930</guid>

					<description><![CDATA[<p>Today’s computer systems, with their emphasis on high resolution graphics, full motion video, high bandwidth networking, and so on, go far beyond the capabilities of the architecture that ushered in the age of the personal computer in 1982. Modern PC systems demand high performance interconnects that also allow devices to be changed or upgraded with</p>
<p>The post <a href="https://studentprojects.in/software-development/protocol/introduction-to-pci-protocol/">Introduction to PCI protocol</a> first appeared on <a href="https://studentprojects.in">Student Projects</a>.</p>]]></description>
										<content:encoded><![CDATA[<p>Today’s  computer systems, with their emphasis on high resolution graphics, full motion  video, high bandwidth networking, and so on, go far beyond the capabilities of  the architecture that ushered in the age of the personal computer in 1982.  Modern PC systems demand high performance interconnects that also allow devices  to be changed or upgraded with a minimum of effort by the end user.</p>
<p align="left">In response to this need, PCI (<strong>peripheral component interconnect</strong>) has emerged as the dominant mechanism for  interconnecting the elements of modern, high performance computer systems. It  is a well thought out standard with a number of forward looking features that  should keep it relevant well into the next century. Originally conceived as a  mechanism for interconnecting peripheral components on a motherboard, PCI has  evolved into at least a half dozen different physical implementations directed  at specific market segments yet all using the same basic bus protocol. In the  form known as Compact PCI, it is having a major impact in the rapidly growing telecommunications  market.</p>
<p>PCI offers a number of significant  performance and architectural advantages over previous busses:</p>
<p><strong>Speed:</strong>The basic PCI protocol can transfer up to 132 Mbytes per second,  well over an order of magnitude faster than ISA. Even so, the demand for  bandwidth is insatiable. Extensions to the basic protocol yield bandwidths as  high as 512 Mbytes per second and development currently under way will push it  to a gigabyte.</p>
<p><strong>Configurability:</strong>PCI offers the ability to configure a system automatically,  relieving the user of the task of system configuration. It could be argued that  PCI’s success owes much to the very fact that users need not be aware of it.</p>
<p><strong>Multiple Masters:</strong>Prior to PCI, most busses supported only one “master,” the  processor. High bandwidth devices could have direct access to memory through a  mechanism called DMA (direct memory access) but devices,  in general, could not talk to each other. In PCI, any device has the potential  to take control of the bus and initiate transactions with any other device.</p>
<p><strong>Reliability:</strong>“Hot Plug”  and “Hot Swap,” defined respectively for PCI and Compact PCI, offer the ability  to replace modules without disrupting a system’s operation. This substantially  reduces MTTR (mean time to repair) to yield the necessary  degree of up-time required of mission-critical systems such as the telephone  network.</p>
<figure id="attachment_952" aria-describedby="caption-attachment-952" style="width: 365px" class="wp-caption aligncenter"><img decoding="async" loading="lazy" class="size-full wp-image-952" title="PCI_slot_and_cards" src="https://studentprojects.in/wp-content/uploads/2009/10/PCI_slot_and_cards.jpg" alt="PCI Slots and PCI card" width="365" height="468" /><figcaption id="caption-attachment-952" class="wp-caption-text">PCI Slots and PCI card</figcaption></figure>
<p><strong>1. PCI Protocol </strong></p>
<p>PCI is a synchronous bus architecture with all data  transfers being performed relative to a system clock (CLK). The initial PCI  specification permitted a maximum clock rate of 33 MHz allowing one bus  transfer to be performed every 30 nanoseconds. Later, PCI specification  extended the bus definition to support operation at 66 MHz, but the vast  majority of today&#8217;s personal computers continue to implement a PCI bus that  runs at a maximum speed of 33 MHz.</p>
<p>PCI implements a 32-bit multiplexed Address and Data  bus (AD[31:0]). It architects a means of supporting a 64-bit data bus through a  longer connector slot, but most of today&#8217;s personal computers support only  32-bit data transfers through the base 32-bit PCI connector. At 33 MHz, a  32-bit slot supports a maximum data transfer rate of 132 MBytes/sec, and a  64-bit slot supports 264 MBytes/sec.</p>
<p>The multiplexed Address and Data bus allows a reduced  pin count on the PCI connector that enables lower cost and smaller package size  for PCI components. Typical 32-bit PCI add-in boards use only about 50 signals  pins on the PCI connector of which 32 are the multiplexed Address and Data bus.  PCI bus cycles are initiated by driving an address onto the AD[31:0] signals  during the first clock edge called the address phase. The address phase  is signaled by the activation of the FRAME# signal. The next clock edge begins  the first of one or more data phases in which data is transferred over  the AD[31:0] signals.</p>
<p>In PCI terminology, data is transferred between an initiator which is the bus master, and a target which is the bus slave. The  initiator drives the C/BE[3:0]# signals during the address phase to signal the  type of transfer (memory read, memory write, I/O read, I/O write, etc.). During  data phases the C/BE[3:0]# signals serve as byte enable to indicate which data  bytes are valid. Both the initiator and target may insert wait states into the  data transfer by deasserting the IRDY# and TRDY# signals. Valid data transfers  occur on each clock edge in which both IRDY# and TRDY# are asserted.</p>
<p>A PCI bus transfer consists of one address phase and  any number of data phases. I/O operations that access registers within PCI  targets typically have only a single data phase. Memory transfers that move blocks  of data consist of multiple data phases that read or write multiple consecutive  memory locations. Both the initiator and target may terminate a bus transfer  sequence at any time. The initiator signals completion of the bus transfer by  deasserting the FRAME# signal during the last data phase. A target may  terminate a bus transfer by asserting the STOP# signal. When the initiator  detects an active STOP# signal, it must terminate the current bus transfer and  re-arbitrate for the bus before continuing. If STOP# is asserted without any  data phases completing, the target has issued a retry. If STOP# is  asserted after one or more data phases have successfully completed, the target  has issued a disconnect.</p>
<p>Initiators arbitrate for ownership of the bus by asserting  a REQ# signal to a central arbiter. The arbiter grants ownership of the bus by  asserting the GNT# signal. REQ# and GNT# are unique on a per slot basis  allowing the arbiter to implement a bus fairness algorithm. Arbitration in PCI  is &#8220;hidden&#8221; in the sense that it does not consume clock cycles. The  current initiator&#8217;s bus transfers are overlapped with the arbitration process  that determines the next owner of the bus.</p>
<p>PCI supports a rigorous auto configuration mechanism.  Each PCI device includes a set of configuration registers that allow  identification of the type of device (SCSI, video, Ethernet, etc.) and the  company that produced it. Other registers allow configuration of the device&#8217;s  I/O addresses, memory addresses, interrupt levels, etc.</p>
<p>Although it is not widely implemented, PCI supports  64-bit addressing. Unlike the 64-bit data bus option which requires a longer  connector with additional 32-bits of data signals, 64-bit addressing can be  supported through the base 32-bit connector. Dual Address Cycles are  issued in which the low order 32-bits of the address are driven onto the  AD[31:0] signals during the first address phase, and the high order 32-bits of  the address (if non-zero) are driven onto the AD[31:0] signals during a second  address phase. The remainder of the transfer continues like a normal bus  transfer.</p>
<p>PCI defines support for both 5 Volt and 3.3 Volt  signaling levels. The PCI connector defines pin locations for both the 5 Volt  and 3.3 Volt levels. However, most early PCI systems were 5 Volt only, and did  not provide active power on the 3.3 Volt connector pins. Over time more use of  the 3.3 Volt interface is expected, but add-in boards which must work in older  legacy systems are restricted to using only the 5 Volt supply. A &#8220;keying&#8221;  scheme is implemented in the PCI connectors to prevent inserting an add-in  board into a system with incompatible supply voltage.</p>
<p>Although used most extensively in PC compatible  systems, the PCI bus architecture is processor independent. PCI signal  definitions are generic allowing the bus to be used in systems based on other  processor families. PCI includes strict specifications to ensure the signal  quality required for operation at 33 and 66 MHz. Components and add-in boards  must include unique bus drivers that are specifically designed for use in a PCI  bus environment. Typical TTL devices used in previous bus implementations such  as ISA and EISA are not compliant with the requirements of PCI. This  restriction along with the high bus speed dictates that most PCI devices are  implemented as custom ASICs.</p>
<p>The  higher speed of PCI limits the number of expansion slots on a single bus to no  more than 3 or 4, as compared to 6 or 7 for earlier bus architectures. To  permit expansion buses with more than 3 or 4 slots, the PCI SIG has defined a PCI-to-PCI Bridge mechanism. PCI-to-PCI Bridges  are ASICs that electrically isolate two PCI buses while allowing bus transfers  to be forwarded from one bus to another. Each bridge device has a  &#8220;primary&#8221; PCI bus and a &#8220;secondary&#8221; PCI bus. Multiple  bridge devices may be cascaded to create a system with many PCI buses.</p>
<p><strong>Chapters:</strong></p>
<ol>
<li><a href="https://studentprojects.in/articles/computer-science/protocol/introduction-to-pci-protocol/">Introduction to PCI protocol</a></li>
<li><a href="https://studentprojects.in/articles/computer-science/protocol/introduction-to-pci-protocol/2/">PCI Signal Descriptions</a></li>
<li><a href="https://studentprojects.in/articles/computer-science/protocol/introduction-to-pci-protocol/3/">PCI Bus Transactions</a></li>
<li><a href="https://studentprojects.in/articles/computer-science/protocol/introduction-to-pci-protocol/4/">PCI Bus Timing Diagrams</a></li>
<li><a href="https://studentprojects.in/articles/computer-science/protocol/introduction-to-pci-protocol/5/">Configuration space decoding</a></li>
<li><a href="https://studentprojects.in/articles/computer-science/protocol/introduction-to-pci-protocol/6/">Arbitration process under PCI</a></li>
<li><a href="https://studentprojects.in/articles/computer-science/protocol/introduction-to-pci-protocol/7/">Error Detection and Reporting</a></li>
</ol>
<p><strong>Bibliography</strong></p>
<ol>
<li>PCI Tutorial by Xilinx</li>
<li>PCI Bus Demystified by Doug Abbott</li>
</ol>
<p><strong>Submitted by</strong>: Rovin and Sagar</p><p>The post <a href="https://studentprojects.in/software-development/protocol/introduction-to-pci-protocol/">Introduction to PCI protocol</a> first appeared on <a href="https://studentprojects.in">Student Projects</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://studentprojects.in/software-development/protocol/introduction-to-pci-protocol/feed/</wfw:commentRss>
			<slash:comments>6</slash:comments>
		
		
			</item>
	</channel>
</rss>
