<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-2307912207817612528</id><updated>2024-09-05T23:30:35.962+05:30</updated><category term="FPGA"/><category term="Block RAM"/><category term="PLL"/><category term="VHDL"/><category term="VLSI"/><category term="Verilog"/><title type='text'>FPGA design</title><subtitle type='html'>This blog will discuss about the articles which will be very helpful for learning and practicing FPGA based designing. This blog will also discuss about happening in this field.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://learnfpga.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2307912207817612528/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://learnfpga.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>FPGA Designer</name><uri>http://www.blogger.com/profile/10663573329911400715</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>4</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-2307912207817612528.post-488317768219484534</id><published>2012-06-30T00:12:00.001+05:30</published><updated>2012-06-30T00:12:22.742+05:30</updated><title type='text'>Coding styles for different RAM configurations (part-2)</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;br /&gt;
&lt;b&gt;Write first mode&amp;nbsp;&lt;/b&gt;: most often user would like to see the same data at the output port which is being written during read-write conflict. Here’s the Verilog code to write a code, from RTL it should not be difficult to understand the behavior of the module.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Verilog coding style&lt;/b&gt;: 1&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: blue;&quot;&gt;always @(posedge clk)&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: blue;&quot;&gt;begin&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: blue;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (we)&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: blue;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;mem[addr] &amp;lt;= din;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: blue;&quot;&gt;end&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: blue;&quot;&gt;always @(posedge clk)&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: blue;&quot;&gt;begin&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: blue;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (we)&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: blue;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;dout &amp;lt;= din;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: blue;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;else&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: blue;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;dout &amp;lt;= mem[addr];&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: blue;&quot;&gt;end&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
conditional statement in the second ‘always’ block will create a 2:1 mux for dout with ‘we’ working as select line.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg5FE0BRXfbiOrAOV9cCLbcCGlz5KJU8v1nIZXB7Fj_6v_gGDlWwIOVE3uiia7IqAMNelMb6UeVOPqz_0g3A00WQTI6EfousIQ-nJf-LSq43U134W0p0yYwvIwiCiWGaBLYFFwSqA06-nDR/s1600/spwf.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;128&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg5FE0BRXfbiOrAOV9cCLbcCGlz5KJU8v1nIZXB7Fj_6v_gGDlWwIOVE3uiia7IqAMNelMb6UeVOPqz_0g3A00WQTI6EfousIQ-nJf-LSq43U134W0p0yYwvIwiCiWGaBLYFFwSqA06-nDR/s320/spwf.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
Fig2: RTL view for Single port write first -1&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
So what one needs to understand here is the point that Block RAM element in most of the FPGAs support write first mode internally and no glue logic is required to be created. Further some synthesis software are so intelligent that if the mode is not supported internally then they will create a glue logic and implement this functionality.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Verilog coding style&lt;/b&gt;: 2&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: blue;&quot;&gt;always @(posedge clk)&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: blue;&quot;&gt;begin&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: blue;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;if (we)&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: blue;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;  &lt;/span&gt;mem[addr] &amp;lt;= din;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: blue;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;  &lt;/span&gt;reg_addr &amp;lt;= addr;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: blue;&quot;&gt;end&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white;&quot;&gt;&lt;span style=&quot;color: blue;&quot;&gt;assign dout = mem[reg_addr];&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white;&quot;&gt;&lt;span style=&quot;color: blue;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
So now one can argue why I have discussed this coding style under &#39;write first&#39; configuration mode. Here we have registered the read address but not the write address so it is straightforward that if the read and write operations are performed on location for one clock cycle then there will not be any conflict and dout will read from previous data. But if address is not changed for two or more number of clock cycles then read-write conflict will occur and that needs to be resolved and from RTL. It is clear that dout will read from the same address where write operation is happening in second and consequent clock cycles. Also note dout is not defined as &#39;reg&#39; here.&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgo7Mu5WUcshJZX65ZAy-b7yTf5wLYzWNvy1DPk2zjmhv_xmEdSDKee7O6Rz_SOdQ5FFh_DXnJDwyO1Jo9b-_ZgTa2pCV-o58cNkPQFWIv-4Jz7IdAm8HEkBvZZtDFfqQ9lbOXqJFRT_ryF/s1600/spwf1.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;96&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgo7Mu5WUcshJZX65ZAy-b7yTf5wLYzWNvy1DPk2zjmhv_xmEdSDKee7O6Rz_SOdQ5FFh_DXnJDwyO1Jo9b-_ZgTa2pCV-o58cNkPQFWIv-4Jz7IdAm8HEkBvZZtDFfqQ9lbOXqJFRT_ryF/s320/spwf1.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
Fig3: RTL view for Single port write first -2&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: right;&quot;&gt;
cont...&lt;/div&gt;
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://learnfpga.blogspot.com/feeds/488317768219484534/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://learnfpga.blogspot.com/2012/06/coding-styles-for-different-ram_30.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2307912207817612528/posts/default/488317768219484534'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2307912207817612528/posts/default/488317768219484534'/><link rel='alternate' type='text/html' href='http://learnfpga.blogspot.com/2012/06/coding-styles-for-different-ram_30.html' title='Coding styles for different RAM configurations (part-2)'/><author><name>FPGA Designer</name><uri>http://www.blogger.com/profile/10663573329911400715</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg5FE0BRXfbiOrAOV9cCLbcCGlz5KJU8v1nIZXB7Fj_6v_gGDlWwIOVE3uiia7IqAMNelMb6UeVOPqz_0g3A00WQTI6EfousIQ-nJf-LSq43U134W0p0yYwvIwiCiWGaBLYFFwSqA06-nDR/s72-c/spwf.jpg" height="72" width="72"/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2307912207817612528.post-943446690895888662</id><published>2012-06-28T20:57:00.003+05:30</published><updated>2012-06-28T20:57:39.838+05:30</updated><title type='text'>Coding styles for different RAM configurations (part-1)</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;br /&gt;
&lt;br /&gt;
Sometime back I was very much confused about different configurations &amp;amp; modes that most of the block RAM architectures inside the FPGA support. So I thought why not compile all relevant information at one single point to help beginners and engineers for reference. First and foremost important pint to know is that at least either the read address or the output data in your RTL code (for RAM) should be registered in order to infer block RAM. Following are some of the possible configurations that an FPGA can support:&lt;br /&gt;
&lt;br /&gt;
•&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;Single port RAM&lt;br /&gt;
•&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;Simple dual port RAM&lt;br /&gt;
•&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;True dual port RAM&lt;br /&gt;
•&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;RAM with initialization&lt;br /&gt;
•&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;ROM&lt;br /&gt;
&lt;br /&gt;
Except the last memory configuration (i.e. ROM), all others can further be configured in one of the following modes&lt;br /&gt;
•&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;Read first mode&lt;br /&gt;
•&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;Write first mode&lt;br /&gt;
•&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;No change mode&lt;br /&gt;
&lt;br /&gt;
These configuration modes make sense during state of conflict i.e. when user&#39;s code tries to write to as well as read from the same memory location in same clock cycle. In this situation, based on the RTL code, synthesis tool should implement it. Block RAM elements in some of the FPGAs support these modes internally (like Xilinx block RAM), whereas in other cases, some synthesis tools may facilitate the users to optionally implement the conflict resolving glue logic through available resources (LUTs &amp;amp; FFs).&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Single port RAM (SPRAM):&lt;/b&gt; Out of these 5 configurations, Single port RAM is the easiest one with single address port for both read and write operations. I will start with this configuration mode first of all. In this configuration, conflict will occur every time when there is read as well write operations are performed in the same clock cycle.&lt;br /&gt;
Read First mode: During the state of conflict, output reflects the existing memory contents not the one which is being written into.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Verilog coding style:&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: blue;&quot;&gt;always @(posedge clk)&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: blue;&quot;&gt;begin&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: blue;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;if (we)&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: blue;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;  &lt;/span&gt;mem[addr] &amp;lt;= din;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: blue;&quot;&gt;end&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: blue;&quot;&gt;always @(posedge clk)&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: blue;&quot;&gt;begin&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: blue;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;  &lt;/span&gt;dout &amp;lt;= mem[addr];&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: blue;&quot;&gt;end &amp;nbsp; &lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Here we have only output data registered, read address is not registered. So one can see every time, user writes into the RAM, conflict will occur as you are reading the same location as well, but if you are not writing into the memory then it&#39;s only a read operation and no conflict. So during should be resolved by either the Block RAM element internally or through glue logic. Some synthesis tools support this feature of creating glue logic to resolve the conflict. It is not as straight forward to create a glue logic for read first mode as it is for other cases. It is important to understand that what kind of behavior you implementation is going to provide you for this kind of coding style.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVBqshx4kOPC7QAaFKacpK0_Lwz63sHinuFE86LO9NaK7FUmWYksROiUI1hUdYibndU1UgXLFqBzFzIy9dAweWJUVa7sRNjxc2LpPA8cJ5ACM40IaTx61WRvwEa4mYzsQPz8nRKnQvkwO8/s1600/rf.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;134&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVBqshx4kOPC7QAaFKacpK0_Lwz63sHinuFE86LO9NaK7FUmWYksROiUI1hUdYibndU1UgXLFqBzFzIy9dAweWJUVa7sRNjxc2LpPA8cJ5ACM40IaTx61WRvwEa4mYzsQPz8nRKnQvkwO8/s320/rf.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
Fig 1: RTL view for Single port Read First RAM&lt;/div&gt;
&lt;div style=&quot;text-align: right;&quot;&gt;
&amp;nbsp;cont...&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://learnfpga.blogspot.com/feeds/943446690895888662/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://learnfpga.blogspot.com/2012/06/coding-styles-for-different-ram.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2307912207817612528/posts/default/943446690895888662'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2307912207817612528/posts/default/943446690895888662'/><link rel='alternate' type='text/html' href='http://learnfpga.blogspot.com/2012/06/coding-styles-for-different-ram.html' title='Coding styles for different RAM configurations (part-1)'/><author><name>FPGA Designer</name><uri>http://www.blogger.com/profile/10663573329911400715</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVBqshx4kOPC7QAaFKacpK0_Lwz63sHinuFE86LO9NaK7FUmWYksROiUI1hUdYibndU1UgXLFqBzFzIy9dAweWJUVa7sRNjxc2LpPA8cJ5ACM40IaTx61WRvwEa4mYzsQPz8nRKnQvkwO8/s72-c/rf.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2307912207817612528.post-1235083361359694648</id><published>2012-06-27T08:38:00.000+05:30</published><updated>2012-06-27T08:40:55.177+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="Block RAM"/><category scheme="http://www.blogger.com/atom/ns#" term="FPGA"/><category scheme="http://www.blogger.com/atom/ns#" term="PLL"/><title type='text'>FPGA architecture</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
In the market, FPGA architectures are available in different kinds of flavors. They are available for small applications and low cost to high performance with large number of gates. There are some FPGAs, which tend to bring in unique feature of low power and small form factor which makes them suitable for high speed mobile applications.&lt;br /&gt;
&lt;br /&gt;
Most of the FPGA architectures have following common basic elements&lt;span style=&quot;background-color: white;&quot;&gt;&amp;nbsp;internally:&lt;/span&gt;&lt;br /&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;Configurable Functional Elements&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Input/Output Element&lt;/li&gt;
&lt;li&gt;DSP Elements&lt;/li&gt;
&lt;li&gt;Block RAM Elements&lt;/li&gt;
&lt;li&gt;PLL Elements&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;u&gt;&lt;b&gt;Configurable Functional Elements&lt;/b&gt;&lt;/u&gt; (CFE) is the basic building element for FPGA architecture, it has the capacity to implement both combinatorial or sequential&amp;nbsp;Boolean&amp;nbsp;function. To implement the combinatorial function it contains multiple inputs Look Up Tables (LUTs) and flip flops to realize sequential Boolean function. it may also contains various multiplexers to provide selectivity.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;u style=&quot;font-weight: bold;&quot;&gt;Input/Output Element&lt;/u&gt;&amp;nbsp;(IOE) provides the logic to configure an FPGA pin as input, output or inout mode. At the time of assigning IOs to ports of a designs, users can also opt for IO standard (LVCMOS33, LVCMOS25, LVTTL33 etc.), driving strength etc. for the pins.&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;u style=&quot;font-weight: bold;&quot;&gt;DSP Elements&lt;/u&gt;&amp;nbsp;(DSPE) has become essential part of an FPGA today. The reason is market driven, today most of the applications require DSP engine to process data digitally which provides predictable quality of results and performance. All communication and mobile application require this feature and so FPGAs are provide this elements internally.&lt;br /&gt;
&lt;br /&gt;
&lt;u style=&quot;font-weight: bold;&quot;&gt;Block RAM Elements&lt;/u&gt;&amp;nbsp;(BRAME) makes an essential part of any digital logic design. Multiple block RAM elements are used as large RAM block in&amp;nbsp;variety&amp;nbsp;of configurable modes. Mostly all FPGAs provides capability to configure them as ROM as well which is useful.&lt;br /&gt;
&lt;br /&gt;
&lt;u style=&quot;font-weight: bold;&quot;&gt;PLL Elements&lt;/u&gt;&amp;nbsp;Most of the applications today require more than one CLOCK sources with different frequency in a design. PLL elements help generate precisely different frequencies and phase matched with source as well. In addition to this, PLL elements can provide variety of other features like fine/coarse phase delay, frequency multiplication/division etc.&lt;br /&gt;
&lt;br /&gt;
Besides these basic elements, FPGA also provides global buffer elements for clocking sources and a dedicated clocking network to minimize clock skew as well. This helps users to concentrate more on designing rather than worrying about skew and fan out capability of clocks.&lt;br /&gt;
&lt;br /&gt;
In the market today, FPGAs from following manufacturers are available in a broad variety:&lt;br /&gt;
&lt;br /&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;Xilinx&lt;/li&gt;
&lt;li&gt;Altera&lt;/li&gt;
&lt;li&gt;Actel&lt;/li&gt;
&lt;li&gt;Lattice&lt;/li&gt;
&lt;li&gt;Achronix&lt;/li&gt;
&lt;li&gt;Silicon Blue&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
Readers are encouraged to go to their website and explore more, in case of any questions or discussion please leave a comment.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://learnfpga.blogspot.com/feeds/1235083361359694648/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://learnfpga.blogspot.com/2012/06/fpga-architecture.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2307912207817612528/posts/default/1235083361359694648'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2307912207817612528/posts/default/1235083361359694648'/><link rel='alternate' type='text/html' href='http://learnfpga.blogspot.com/2012/06/fpga-architecture.html' title='FPGA architecture'/><author><name>FPGA Designer</name><uri>http://www.blogger.com/profile/10663573329911400715</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2307912207817612528.post-8714191839163874299</id><published>2012-06-25T22:39:00.001+05:30</published><updated>2012-06-25T22:39:14.804+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="FPGA"/><category scheme="http://www.blogger.com/atom/ns#" term="Verilog"/><category scheme="http://www.blogger.com/atom/ns#" term="VHDL"/><category scheme="http://www.blogger.com/atom/ns#" term="VLSI"/><title type='text'>FPGAs &amp; designing with them</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
Field Programmable Gate Array (FPGA) devices have become very popular for digital logic design. Today variety of FPGA devices from different manufacturers are available in market to target specific application area. Their cost effectiveness as compared to ASICs manufacturing and increased avaliability of gates per area has made them further economic to be used for ASIC prototyping. Large number of ASIC designs are first prototyped with high end FPGA boards to reduce the time to market. It helps designers and verification engineers to start working well before the first ASIC gets ready.&lt;br /&gt;
My blogs on designing with FPGAs will discuss about the intricacies of different FPGA architectures and other common but&amp;nbsp;important&amp;nbsp;topics related to FPGA design. &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://learnfpga.blogspot.com/feeds/8714191839163874299/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://learnfpga.blogspot.com/2012/06/fpgas-designing-with-them.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2307912207817612528/posts/default/8714191839163874299'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2307912207817612528/posts/default/8714191839163874299'/><link rel='alternate' type='text/html' href='http://learnfpga.blogspot.com/2012/06/fpgas-designing-with-them.html' title='FPGAs &amp; designing with them'/><author><name>FPGA Designer</name><uri>http://www.blogger.com/profile/10663573329911400715</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>