<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Мир FPGA</title>
	<atom:link href="http://mirfpga.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://mirfpga.wordpress.com</link>
	<description>FPGA, PLD, ASIC, SoC and Hardware Design</description>
	<lastBuildDate>Thu, 10 Feb 2011 06:57:58 +0000</lastBuildDate>
	<language>ru</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='mirfpga.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://0.gravatar.com/blavatar/478a52414872dba0c89223acd737add1?s=96&#038;d=http%3A%2F%2Fs2.wp.com%2Fi%2Fbuttonw-com.png</url>
		<title>Мир FPGA</title>
		<link>http://mirfpga.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://mirfpga.wordpress.com/osd.xml" title="Мир FPGA" />
	<atom:link rel='hub' href='http://mirfpga.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Правда об асинхронном сбросе</title>
		<link>http://mirfpga.wordpress.com/2011/02/09/313/</link>
		<comments>http://mirfpga.wordpress.com/2011/02/09/313/#comments</comments>
		<pubDate>Wed, 09 Feb 2011 02:36:39 +0000</pubDate>
		<dc:creator>Warm Snow</dc:creator>
				<category><![CDATA[FPGA Programming]]></category>
		<category><![CDATA[Coding Style]]></category>
		<category><![CDATA[Design Tricks]]></category>

		<guid isPermaLink="false">https://mirfpga.wordpress.com/2011/02/09/%d0%bf%d1%80%d0%b0%d0%b2%d0%b4%d0%b0-%d0%be%d0%b1-%d0%b0%d1%81%d0%b8%d0%bd%d1%85%d1%80%d0%be%d0%bd%d0%bd%d0%be%d0%bc-%d1%81%d0%b1%d1%80%d0%be%d1%81%d0%b5/</guid>
		<description><![CDATA[Частенько на вопрос “Почему вы выбрали асинхронную схему сброса для своих модулей?” в ответ можно услышать, что такая схема требует меньше логических ресурсов для своей реализации. В целом это, конечно, правильно. Однако не всегда. И в этом посте мне хотелось бы привести наглядный пример обратной ситуации. Задача: перемножить два 16-ти разрядных числа. В наличии имеются: [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mirfpga.wordpress.com&amp;blog=7262421&amp;post=366&amp;subd=mirfpga&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<div style="font-family:Trebuchet MS;text-align:left;"><span style="font-size:13px;"><br />
Частенько на вопрос “Почему вы выбрали асинхронную схему сброса для своих модулей?” в ответ можно услышать, что такая схема требует меньше логических ресурсов для своей реализации. В целом это, конечно, правильно. Однако не всегда. И в этом посте мне хотелось бы привести наглядный пример обратной ситуации.</span></div>
<div style="font-family:Trebuchet MS;text-align:left;"><span style="font-size:13px;"><br />
</span></div>
<div style="font-family:Trebuchet MS;text-align:left;">
<p><span style="font-size:13px;"><span id="more-366"></span></span></p>
<div style="font-family:Trebuchet MS;text-align:left;">
<div style="font-family:Trebuchet MS;text-align:left;"><span style="font-size:13px;">Задача: перемножить два 16-ти разрядных числа.</p>
<p>В наличии имеются: голова, руки, FPGA семейства Xilinx Spartan 3E и пакет Xilinx ISE 9.2.</p>
<p>Поскольку у Spartan 3E есть встроенные DSP-блоки, то пишем незамысловатый код (не заморачиваясь со специальными алгоритмами перемножения чисел):<br />
&nbsp;<br />
</span></div>
<pre><span style="font-size:14px;"><span style="font-family:Courier New;"><span style="color:#0000ff;">
module</span> mult
(
  <span style="color:#0000ff;">input</span> CLK,
  <span style="color:#0000ff;">input</span> RSTn,
  <span style="color:#0000ff;">input signed</span> [07:00] mx,
  <span style="color:#0000ff;">input signed</span> [07:00] my,
  <span style="color:#0000ff;">output reg signed</span> [15:00] result
);

<span style="color:#0000ff;">always</span> @(<span style="color:#0000ff;">posedge</span> CLK <span style="color:#0000ff;">or negedge</span> RSTn)
<span style="color:#0000ff;">begin
  if</span> (!RSTn)
    result &lt;= 16'h0;
  <span style="color:#0000ff;">else</span>
    result &lt;= mx * my;
<span style="color:#0000ff;">end

endmodule
</span></span></span></pre>
<div style="font-family:Trebuchet MS;text-align:left;"><span style="font-size:13px;"><br />
Синтезируем наш модуль в ISE и получаем вполне предсказуемый результат:<br />
</span></div>
<pre><span style="font-size:14px;"><span style="font-family:Courier New;">
Advanced HDL Synthesis Report

Macro Statistics
# Multipliers        : 1
8×8-bit multiplier   : 1
# Registers          : 16
Flip-Flops           : 16
</span></span></pre>
<div style="font-family:Trebuchet MS;text-align:left;"><span style="font-size:13px;"><br />
Открываем Technology Schematic и убеждаемся: да, действительно, один встроенный перемножитель и 16 триггеров.&nbsp;</p>
<p>А теперь изменим схему сброса на синхронную (удалим “<span style="color:#0000ff;">or negedge</span> RSTn” из заголовка процесса) и запустим синтез еще раз. Вуаля!</p>
<p></span></div>
<pre><span style="font-size:14px;"><span style="font-family:Courier New;">
Advanced HDL Synthesis Report

Macro Statistics
# Multipliers        : 1
8×8-bit multiplier   : 1
</span></span></pre>
<div style="font-family:Trebuchet MS;text-align:left;"><span style="font-size:13px;"><br />
Снова открываем Technology Schematic  и видим, что 16-ти триггеров как не бывало. Мистика?&nbsp;</p>
<p>Ларчик открывается просто: перемножитель MULT18X18SIO уже имеет на борту вывод RSTP (см. технологическую схему) для синхронного сброса выхода перемножителя, который синтезатор задействовал по своему прямому назначению. В случае с асинхронным сбросом вход RSTP синтезатором не задействован и логично подключен к “земле”.</p>
<p>Кстати, заменив логику сигнала сброса с инверсной на прямую, вы сможете сэкономить дополнительно одну LUT, что тоже не может не радовать.</p>
<p>Подводя итог, можно сказать, что выбор схемы сброса при проектировании для FPGA полезно делать, исходя из структуры ее логических блоков, а не с бухты-барахты.</p>
<p>P.S. Хотите интересно и с пользой провести время? Тогда попробуйте синтезировать наш перемножитель в двух вариантах для FPGA от Altera (Cyclone II например) <img src='http://s1.wp.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  .</p>
<p>&nbsp;</p>
<p></span></div>
</div>
</div>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mirfpga.wordpress.com/366/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mirfpga.wordpress.com/366/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mirfpga.wordpress.com/366/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mirfpga.wordpress.com/366/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/mirfpga.wordpress.com/366/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/mirfpga.wordpress.com/366/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/mirfpga.wordpress.com/366/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/mirfpga.wordpress.com/366/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mirfpga.wordpress.com/366/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mirfpga.wordpress.com/366/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mirfpga.wordpress.com/366/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mirfpga.wordpress.com/366/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mirfpga.wordpress.com/366/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mirfpga.wordpress.com/366/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mirfpga.wordpress.com&amp;blog=7262421&amp;post=366&amp;subd=mirfpga&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://mirfpga.wordpress.com/2011/02/09/313/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/a6c6af1140ab90b8f95c04526641d264?s=96&#38;d=http%3A%2F%2Fs0.wp.com%2Fi%2Fmu.gif&#38;r=G" medium="image">
			<media:title type="html">W@rmSnow</media:title>
		</media:content>
	</item>
		<item>
		<title>Аудио интерфейс для WM8731</title>
		<link>http://mirfpga.wordpress.com/2010/05/19/312/</link>
		<comments>http://mirfpga.wordpress.com/2010/05/19/312/#comments</comments>
		<pubDate>Wed, 19 May 2010 06:14:58 +0000</pubDate>
		<dc:creator>Warm Snow</dc:creator>
				<category><![CDATA[Altera DE2]]></category>
		<category><![CDATA[FPGA Programming]]></category>
		<category><![CDATA[Design Tricks]]></category>
		<category><![CDATA[Interfaces]]></category>

		<guid isPermaLink="false">http://mirfpga.wordpress.com/2010/05/19/312/</guid>
		<description><![CDATA[Никогда не любил использовать в своих проектах исходники, поставляемые вместе с комплектами разработчика. Особенно, если авторами кода являются азиаты. Вы не подумайте чего, к азиатам я отношусь совершенно нормально (иначе вряд ли бы работал с ними столь длительное время). Однако разница в менталитетах приводит и к разнице в решениях.&#160; Вот и тайваньская плата Altera DE2 [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mirfpga.wordpress.com&amp;blog=7262421&amp;post=312&amp;subd=mirfpga&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<div style="font-family:Trebuchet MS;text-align:left;"><span style="font-size:13px;"><br />
Никогда не любил использовать в своих проектах исходники, поставляемые вместе с комплектами разработчика. Особенно, если авторами кода являются азиаты. Вы не подумайте чего, к азиатам я отношусь совершенно нормально (иначе вряд ли бы работал с ними столь длительное время). Однако разница в менталитетах приводит и к разнице в решениях.&nbsp;</p>
<p><span style="font-size:13px;"><span id="more-312"></span></span><br />
Вот и тайваньская плата Altera DE2 не стала исключением. Особенно та часть исходников, которая работает с кодеком. Нет, на демонстрационных проектах Terasic все крутится чики-пуки. Однако попытка использовать готовые исходники в своих проектах приводила к сбоям в работе аудио-кодека. То он напрочь отказывался запускаться, то каналы по очереди глохли или забивались каким-то непонятным шумом. В общем, такой расклад меня не устроил и управление аудио-кодеком было мной переписано начисто.</p>
<div style="font-family:Trebuchet MS;text-align:left;">
<p>Начал я с аудио-интерфейса. Во-первых, я изменил концепцию его работы на прямо противоположную. Terasic пользует кодек WM8731 в режиме Slave, то есть генерация управляющих сигналов <strong>BCLK</strong> и <strong>ADCLRC</strong>/<strong>DACLRC</strong> возложена на покатые плечи FPGA-шки. И при миграции на другое железо возможны проблемы (особенно если учесть, что тактовый сигнал для кодека генерится с помощью PLL внутри ПЛИСины). Я же в своем модуле возложил генерацию клоков на сам кодек (то есть использовал режим Master).</p>
<p>Во-вторых, реализовал 2 режима работы интерфейса: I2S и DSP/PCM Mode A (за подробностями &#8211; в <a title="WM8731" href="http://www.wolfsonmicro.com/uploads/documents/en/WM8731.pdf">даташит</a> на кодек). Режим работы выбирается установкой высокого или низкого уровня на управляющем входе.</p>
<p>Распиновка модуля выглядит так:</p>
<p><a href="http://mirfpga.files.wordpress.com/2010/05/dai.png"><img class="aligncenter size-full wp-image-310" title="dai" src="http://mirfpga.files.wordpress.com/2010/05/dai.png?w=427&#038;h=197" alt="" width="427" height="197" /></a></p>
<p>Выводы <strong>iBCLK</strong>, <strong>iLRCK</strong>, <strong>iDIN</strong>, <strong>oDOUT</strong> образуют стандартный последовательный аудио-интерфейс (кстати, индекс перед названием вывода обозначает его направление: i &#8211; вход, o &#8211; выход). Вход <strong>iLRCK</strong> подключен у меня к выходу <strong>ADCLRC</strong> кодека. Подключение остальных, думаю, понятно.</p>
<p><strong>iCLK</strong>, <strong>iRSTn</strong> и <strong>iAUDMODE</strong> &#8211; управляющие входы модуля (причем активный уровень сигнала <strong>iRSTn</strong> &#8211; низкий). Высокий уровень на входе <strong>iAUDMODE</strong> соответсвует режиму I2S, низкий-DSP/PCM Mode A.</p>
<p>На выходе <strong>oStrobe</strong> генерируются короткие импульсы, сигнализирующие о том, что данные с обоих каналов приняты и выставлены на выходах <strong>oDataLeft</strong> и <strong>oDataRight</strong> (желающие могут сделать отдельный строб для каждого канала, это нетрудно). Эти же импульсы инициируют передачу данных с параллельных входов модуля в кодек. Так что данные на входах <strong>iDataLeft</strong> и <strong>iDataRight</strong> должны быть установлены еще до появления строба.</p>
<p>В ПЛИСине EP2C35F672C6 (на плате Altera DE2) все это хозяйство занимает 274 LCs и работает вплоть до частоты iCLK = 213 MHz (при установках синтезатора по умолчанию).</p>
<p>В заключение хотелось бы сказать, что данный модуль без каких-либо изменений успешно работает у меня еще и в FPGA-шке XC3S500E от Xilinx. Так что с миграцией на другое железо проблем быть не должно.</p>
<p><a href="http://mirfpga.files.wordpress.com/2010/05/de2_audio_if-zip.pdf">Скачать исходник.</a></p>
<p>PS. после закачки файла замените расширение файла на .zip и распакуйте получившийся архив.</p>
</div>
<p>&nbsp;</p>
<p></span></div>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mirfpga.wordpress.com/312/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mirfpga.wordpress.com/312/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mirfpga.wordpress.com/312/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mirfpga.wordpress.com/312/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/mirfpga.wordpress.com/312/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/mirfpga.wordpress.com/312/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/mirfpga.wordpress.com/312/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/mirfpga.wordpress.com/312/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mirfpga.wordpress.com/312/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mirfpga.wordpress.com/312/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mirfpga.wordpress.com/312/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mirfpga.wordpress.com/312/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mirfpga.wordpress.com/312/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mirfpga.wordpress.com/312/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mirfpga.wordpress.com&amp;blog=7262421&amp;post=312&amp;subd=mirfpga&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://mirfpga.wordpress.com/2010/05/19/312/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/a6c6af1140ab90b8f95c04526641d264?s=96&#38;d=http%3A%2F%2Fs0.wp.com%2Fi%2Fmu.gif&#38;r=G" medium="image">
			<media:title type="html">W@rmSnow</media:title>
		</media:content>

		<media:content url="http://mirfpga.files.wordpress.com/2010/05/dai.png" medium="image">
			<media:title type="html">dai</media:title>
		</media:content>
	</item>
		<item>
		<title>Audience(TM). 1.Общая архитектура.</title>
		<link>http://mirfpga.wordpress.com/2010/03/19/276/</link>
		<comments>http://mirfpga.wordpress.com/2010/03/19/276/#comments</comments>
		<pubDate>Fri, 19 Mar 2010 05:54:36 +0000</pubDate>
		<dc:creator>Warm Snow</dc:creator>
				<category><![CDATA[Audience(TM)]]></category>
		<category><![CDATA[Hardware Design]]></category>

		<guid isPermaLink="false">http://mirfpga.wordpress.com/2010/03/19/276/</guid>
		<description><![CDATA[Итак, начинаем проектирование. Для начала набросаю примерную архитектуру платы. В процессе проектирования в нее наверняка будут внесены дополнения и изменения, однако в первом приближении структура видится мне следующей: Таким образом на плате будут следующие узлы: FPGA Audio Codec SDRAM (ставлю на всякий случай, поскольку с тех пор, как я занят обработкой звука, SDRAM мне ниразу [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mirfpga.wordpress.com&amp;blog=7262421&amp;post=276&amp;subd=mirfpga&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<div style="font-family:Trebuchet MS;text-align:left;"><span style="font-size:13px;"><br />
Итак, начинаем проектирование.<br />
Для начала набросаю примерную архитектуру платы. В процессе проектирования в нее наверняка будут внесены дополнения и изменения, однако в первом приближении структура видится мне следующей:</span></div>
<div style="font-family:Trebuchet MS;text-align:left;"><span style="font-size:13px;"><br />
</span></div>
<div style="font-family:Trebuchet MS;text-align:left;">
<div style="font-family:Trebuchet MS;text-align:left;">
<p><span style="font-size:13px;"><span id="more-276"></span></span></p>
<div style="font-family:Trebuchet MS;text-align:left;"><span style="font-size:13px;"><a href="http://mirfpga.files.wordpress.com/2010/03/1-audience_architecture1.png"><img class="aligncenter size-full wp-image-292" title="1.audience_architecture" src="http://mirfpga.files.wordpress.com/2010/03/1-audience_architecture1.png?w=581&#038;h=615" alt="" width="581" height="615" /></a><br />
Таким образом на плате будут следующие узлы:</p>
<ul>
<li><span style="font-family:Trebuchet MS;"><strong>FPGA</strong><br />
</span></li>
<li><strong><span style="font-family:Trebuchet MS;">Audio Codec</span></strong></li>
<li><span style="font-family:Trebuchet MS;"><strong>SDRAM</strong> (ставлю на всякий случай, поскольку с тех пор, как я занят обработкой звука, SDRAM мне ниразу не пригодилась)</span></li>
<li><span style="font-family:Trebuchet MS;"><strong>Flash Memory</strong> (полезная штука, в ней с успехом можно хранить таблицы для синтеза сигналов)</span></li>
<li><span style="font-family:Trebuchet MS;"><strong>Serial EEPROM</strong> (вот эта вещь мне нужна для начальной загрузки параметров в прототипы создаваемых чипов, но на купленных платах она обычно отсутствует)</span></li>
<li><span style="font-family:Trebuchet MS;"><strong>User Control </strong>(всякие кнопочки и переключатели)</span></li>
<li><span style="font-family:Trebuchet MS;"><strong>Display</strong> (а здесь будут несколько светодиодов, знаковый LCD и 2 bargraph-дисплея, на которые можно выводить уровни сигналов)</span></li>
<li><span style="font-family:Trebuchet MS;"><strong>RS-232</strong> (несмотря на свою древность, весьма востребованный интерфейс. Через него у меня обычно работают отладочные модули для IP-ядер. Поэтому на плате их будет аж целых два)</span></li>
<li><span style="font-family:Trebuchet MS;"><strong>Ethernet PHY</strong> (полезен для разработки VoIP-приложений)</span></li>
<li><span style="font-family:Trebuchet MS;"><strong>USB</strong> (куда ж сейчас без него)</span></li>
<li><span style="font-family:Trebuchet MS;"><strong>Expansion connectors</strong> (разъемы для подключения внешних устройств)<br />
</span></li>
</ul>
<div style="font-family:Trebuchet MS;text-align:left;"><span style="font-size:13px;"><br />
Пока не определился с интерфейсом SPDIF. С одной стороны, он мне не нужен. А с другой &#8211; без него аудио-система выглядит не совсем полноценно. Думается мне, что в процессе я его все-таки добавлю. И еще наверняка добавлю на плату какой-нибудь wireless-чипсет. Пару раз он мне был сильно нужен, пришлось шаманить с паяльником и разъемами и навешивать дополнительные платы на свои development kits.</p>
<p>В общем, архитектура более-менее нарисовалась. На следующих этапах перехожу к самой ИМХО гадкой части проектирования &#8211; выбору компонентов. Обилие информации, которую придется перелопатить, меня уже заранее удручает.</p>
<p></span></div>
<p></span></div>
</div>
</div>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mirfpga.wordpress.com/276/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mirfpga.wordpress.com/276/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mirfpga.wordpress.com/276/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mirfpga.wordpress.com/276/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/mirfpga.wordpress.com/276/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/mirfpga.wordpress.com/276/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/mirfpga.wordpress.com/276/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/mirfpga.wordpress.com/276/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mirfpga.wordpress.com/276/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mirfpga.wordpress.com/276/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mirfpga.wordpress.com/276/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mirfpga.wordpress.com/276/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mirfpga.wordpress.com/276/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mirfpga.wordpress.com/276/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mirfpga.wordpress.com&amp;blog=7262421&amp;post=276&amp;subd=mirfpga&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://mirfpga.wordpress.com/2010/03/19/276/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/a6c6af1140ab90b8f95c04526641d264?s=96&#38;d=http%3A%2F%2Fs0.wp.com%2Fi%2Fmu.gif&#38;r=G" medium="image">
			<media:title type="html">W@rmSnow</media:title>
		</media:content>

		<media:content url="http://mirfpga.files.wordpress.com/2010/03/1-audience_architecture1.png" medium="image">
			<media:title type="html">1.audience_architecture</media:title>
		</media:content>
	</item>
		<item>
		<title>Audience (TM). Плата для разработки аудио-приложений. Общественный проект.</title>
		<link>http://mirfpga.wordpress.com/2010/03/09/215/</link>
		<comments>http://mirfpga.wordpress.com/2010/03/09/215/#comments</comments>
		<pubDate>Tue, 09 Mar 2010 07:07:30 +0000</pubDate>
		<dc:creator>Warm Snow</dc:creator>
				<category><![CDATA[Audience(TM)]]></category>
		<category><![CDATA[Hardware Design]]></category>

		<guid isPermaLink="false">http://mirfpga.wordpress.com/2010/03/09/215/</guid>
		<description><![CDATA[Поскольку в настоящее время сферой моей деятельности является разработка IP-ядер и микросхем для обработки звука, возникла необходимость в подходящей плате для верификации своих изделий. Перерыв интернет, я с удивлением обнаружил, что производители отладочных плат с FPGA про звук в основной своей массе почти не вспоминают. Такие платы, как правило, перегружены интерфейсами и видео-чипами. Однако если [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mirfpga.wordpress.com&amp;blog=7262421&amp;post=215&amp;subd=mirfpga&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<div style="font-family:Trebuchet MS;text-align:left;"><span style="font-size:13px;">Поскольку в настоящее время сферой моей деятельности является разработка IP-ядер и микросхем для обработки звука, возникла необходимость в подходящей плате для верификации своих изделий. Перерыв интернет, я с удивлением обнаружил, что производители отладочных плат с FPGA про звук в основной своей массе почти не вспоминают. Такие платы, как правило, перегружены интерфейсами и видео-чипами. Однако если у кого-то на плате и установлен аудио-кодек, то по очень остаточному принципу, а именно с минимальным количеством входов-выходов и посредственной функциональностью. На уже имеющейся у меня плате <a id="qy5s" title="Altera DE2" href="http://www.terasic.com.tw/cgi-bin/page/archive.pl?Language=English&amp;CategoryNo=39&amp;No=30">Altera DE2</a> кодек в один прекрасный день перестал удовлетворять растущие потребности. Да и мой последний проект совсем не хочет влазить в FPGA, установленную на этой плате.</span></div>
<div style="font-family:Trebuchet MS;text-align:left;"><span style="font-size:13px;">Единственный более-менее функциональный кодек оказался на плате у не совсем мной любимого <a id="bpps" title="Xilinx Home Page" href="http://www.xilinx.com">Xilinx</a>. Речь идет о платах <a id="rpcx" title="ML501" href="http://www.xilinx.com/products/devkits/HW-V5-ML501-UNI-G.htm">ML501</a> и <a id="fda7" title="ML505" href="http://www.xilinx.com/products/devkits/HW-V5-ML505-UNI-G.htm">ML505</a> на базе Virtex 5. Но и там напрочь отсутствует нужный мне интерфейс с телефонной линией, два линейных стерео-входа и выходной усилитель мощности.</span></div>
<div style="font-family:Trebuchet MS;text-align:left;"><span style="font-size:13px;"><br />
</span></div>
<div style="font-family:Trebuchet MS;text-align:left;"><span style="font-size:13px;">В связи с такой засадой появилось желание разработать свою собственную плату, &laquo;заточенную&raquo; именно под обработку звука (а пока пользоваться платами от Xilinx). Кроме того, возникла мысль привлечь заинтересованных лиц к участию в проекте (плата разрабатывается на общественных началах исключительно в свободное время), а о ходе разработки отписываться в блоге. Плата создается с нуля, поэтому к рассмотрению принимаются любые идеи и пожелания.</span></div>
<div style="font-family:Trebuchet MS;text-align:left;"><span style="font-size:13px;"><br />
</span></div>
<div style="font-family:Trebuchet MS;text-align:left;"><span style="font-size:13px;">Желающие размяться и поучаствовать в общественном проекте, пишите мне на <a id="esp1" title="Warm Snow" href="mailto:mirfpga@gmail.com">e-mail</a>.</span></div>
<div style="font-family:Trebuchet MS;text-align:left;"><span style="font-family:Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif;"><span style="font-family:'Trebuchet MS';"><br />
</span></span></div>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mirfpga.wordpress.com/215/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mirfpga.wordpress.com/215/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mirfpga.wordpress.com/215/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mirfpga.wordpress.com/215/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/mirfpga.wordpress.com/215/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/mirfpga.wordpress.com/215/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/mirfpga.wordpress.com/215/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/mirfpga.wordpress.com/215/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mirfpga.wordpress.com/215/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mirfpga.wordpress.com/215/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mirfpga.wordpress.com/215/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mirfpga.wordpress.com/215/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mirfpga.wordpress.com/215/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mirfpga.wordpress.com/215/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mirfpga.wordpress.com&amp;blog=7262421&amp;post=215&amp;subd=mirfpga&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://mirfpga.wordpress.com/2010/03/09/215/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/a6c6af1140ab90b8f95c04526641d264?s=96&#38;d=http%3A%2F%2Fs0.wp.com%2Fi%2Fmu.gif&#38;r=G" medium="image">
			<media:title type="html">W@rmSnow</media:title>
		</media:content>
	</item>
		<item>
		<title>Модель аудио-кодека WM8731.</title>
		<link>http://mirfpga.wordpress.com/2009/07/22/146/</link>
		<comments>http://mirfpga.wordpress.com/2009/07/22/146/#comments</comments>
		<pubDate>Wed, 22 Jul 2009 05:13:15 +0000</pubDate>
		<dc:creator>Warm Snow</dc:creator>
				<category><![CDATA[FPGA Programming]]></category>
		<category><![CDATA[Interfaces]]></category>
		<category><![CDATA[Models]]></category>

		<guid isPermaLink="false">http://mirfpga.wordpress.com/2009/07/22/146/</guid>
		<description><![CDATA[Одним из моих основных рабочих инструментов является плата Altera DE2 от компании Terasic. В ходе работы с этой платой возникла необходимость в создании поведенческой модели аудио-кодека WM8731, установленного на этой плате. К слову сказать, кодек оказался довольно неплохим. Однако мне совсем не понравилось, как инженеры Terasic установили его на плату. Во-первых: вход тактового сигнала кодека [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mirfpga.wordpress.com&amp;blog=7262421&amp;post=146&amp;subd=mirfpga&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<div style="font-family:Trebuchet MS;text-align:left;">
<p><span style="font-size:13px;"> Одним из моих основных рабочих инструментов является плата <a href="http://www.terasic.com.tw/cgi-bin/page/archive.pl?Language=English&amp;CategoryNo=39&amp;No=30">Altera DE2</a> от компании <a href="http://www.terasic.com.tw/">Terasic</a>. В ходе работы с этой платой возникла необходимость в создании поведенческой модели аудио-кодека <a href="http://www.wolfsonmicro.com/products/WM8731">WM8731</a>, установленного на этой плате. К слову сказать, кодек оказался довольно неплохим. Однако мне совсем не понравилось, как инженеры Terasic установили его на плату.</span></p>
<div style="font-family:Trebuchet MS;text-align:left;">
<p><span style="font-size:13px;"><span id="more-146"></span></span></p>
<div style="font-family:Trebuchet MS;text-align:left;"><span style="font-size:13px;">Во-первых: вход тактового сигнала кодека подключен к FPGA. То есть при разработке аудио-приложений один модуль PLL оказывается занят. Хотя на плате уйма места для того, чтобы поставить рядом с кодеком собственный кварцевый генератор. Серьезный минус!<br />
Во-вторых: выводы кодека CSB и MODE заземлены, что делает невозможным его конфигурацию по SPI-протоколу (только I2C). Сам же модуль конфигурации кодека, поставляемый вместе с платой, работает через раз (пришлось писать свой собственный).</p>
<p>Я не стал создавать полную модель WM8731 за ненадобностью, а сделал только модель последовательного аудио-интерфейса. Чем и спешу поделиться.</p>
</div>
<p><img style="width:243px;height:200px;float:left;margin-left:0;margin-right:1em;" src="http://docs.google.com/File?id=dfgk9sxq_6dmnfjjgw_b" alt="" /></p>
<div style="font-family:Trebuchet MS;text-align:left;"><span style="font-size:13px;">Кодек работает только в режиме MASTER, то есть сигналы BCLK, ADCLRC и DACLRC генерируются моделью на основе параметров.<br />
Модель поддерживает все 5 режимов работы последовательного аудио-интерфейса: I2C, DSP/PCM Mode A, DSP/PCM Mode B, Left Justified Mode, Right Justified Mode. Более подробно о режимах работы, а так же временные диаграммы можно найти в <span style="color:#3366ff;"><span style="text-decoration:underline;"><a id="clmi" title="WM8731 Datasheet" href="http://www.wolfsonmicro.com/uploads/documents/en/WM8731.pdf">спецификации</a></span></span> кодека. Выбор режима работы осуществляется заданием параметра IF_MODE.<br />
АЦП реализован не мудрствуя лукаво: модель читает данные из двух входных текстовых файлов (левый и правый канал) и выводит их по выбранному протоколу через порт ADCDAT.<br />
ЦАП реализован аналогичным образом: данные, поступающие через порт DACDAT, записываются в два выходных текстовых файла (левый и правый каналы). Имена и пути входных и выходных файлов задаются через параметры (см. список пользовательских параметров модели).&nbsp;</p>
<p>Пользовательские параметры модели:</p>
<p><img class="size-full wp-image-155 alignnone" title="parameters" src="http://mirfpga.files.wordpress.com/2009/07/parameters.png?w=510&#038;h=833" alt="parameters" width="510" height="833" /></p>
<p>Пример объявления модели в проекте (длина входного файла 10&#215;16 бит, режим работы PCMA):</p>
<p><span style="font-family:Courier New;">wm8731   CODEC</span><br style="font-family:Courier New;" /><span style="font-family:Courier New;">(</span><br style="font-family:Courier New;" /><span style="font-family:Courier New;"> .MCLK    (&#8230;), </span><br style="font-family:Courier New;" /><span style="font-family:Courier New;"> .BCLK    (&#8230;), </span><br style="font-family:Courier New;" /><span style="font-family:Courier New;"> .DACLRC (&#8230;), </span><br style="font-family:Courier New;" /><span style="font-family:Courier New;"> .ADCLRC (&#8230;), </span><br style="font-family:Courier New;" /><span style="font-family:Courier New;"> .ADCDAT  (&#8230;), </span><br style="font-family:Courier New;" /><span style="font-family:Courier New;"> .DACDAT  (&#8230;), </span><br style="font-family:Courier New;" /><span style="font-family:Courier New;"> .CLKOUT (&#8230;)</span><br style="font-family:Courier New;" /><span style="font-family:Courier New;">);</span><br style="font-family:Courier New;" /><span style="color:#0000ff;font-family:Courier New;">defparam</span><span style="font-family:Courier New;"> CODEC.DWIDTH = 16; </span><br style="font-family:Courier New;" /><span style="color:#0000ff;font-family:Courier New;">defparam </span><span style="font-family:Courier New;">CODEC.MFREQ = 18432000; </span><br style="font-family:Courier New;" /><span style="color:#0000ff;font-family:Courier New;">defparam </span><span style="font-family:Courier New;">CODEC.BASE_SFREQ = 48000; </span><br style="font-family:Courier New;" /><span style="color:#0000ff;font-family:Courier New;">defparam </span><span style="font-family:Courier New;">CODEC.TARGET_SFREQ = 8000; </span><br style="font-family:Courier New;" /><span style="color:#0000ff;font-family:Courier New;">defparam </span><span style="font-family:Courier New;">CODEC.IN_VECTOR_LENGTH = 10; </span><br style="font-family:Courier New;" /><span style="color:#0000ff;font-family:Courier New;">defparam </span><span style="font-family:Courier New;">CODEC.IF_MODE = &laquo;PCMA&raquo;; </span><br style="font-family:Courier New;" /><span style="color:#0000ff;font-family:Courier New;">defparam </span><span style="font-family:Courier New;">CODEC.LEFT_IN_FILE = &laquo;.left_adc_in.vec&raquo;; </span><br style="font-family:Courier New;" /><span style="color:#0000ff;font-family:Courier New;">defparam </span><span style="font-family:Courier New;">CODEC.RIGHT_IN_FILE = &laquo;./right_adc_in.vec&raquo;; </span><br style="font-family:Courier New;" /><span style="color:#0000ff;font-family:Courier New;">defparam </span><span style="font-family:Courier New;">CODEC.LEFT_OUT_FILE = &laquo;./left_dac_out.txt&raquo;; </span><br style="font-family:Courier New;" /><span style="color:#0000ff;font-family:Courier New;">defparam </span><span style="font-family:Courier New;">CODEC.RIGHT_OUT_FILE = &laquo;./right_dac_out.txt&raquo;;</span><br style="font-family:Courier New;" /><span style="color:#0000ff;font-family:Courier New;">defparam </span><span style="font-family:Courier New;">CODEC.tCOP = 10;</span><br style="font-family:Courier New;" /><span style="color:#0000ff;font-family:Courier New;">defparam </span><span style="font-family:Courier New;">CODEC.tDL = 10;</span><br style="font-family:Courier New;" /><span style="color:#0000ff;font-family:Courier New;">defparam </span><span style="font-family:Courier New;">CODEC.tDDA = 15;</span></p>
<p><span style="color:#3366ff;"><span style="text-decoration:underline;"><a id="mlgp" title="wm8731" href="http://mirfpga.files.wordpress.com/2009/07/wm8731-zip.pdf">Скачать Verilog-модель и пример входных файлов</a></span></span></p>
<p>Поскольку WordPress не поддерживает закачку архивов, то после скачивания файла необходимо заменить его расширение на .zip и распаковать.</p>
<p>&nbsp;</p>
<p></span></div>
</div>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mirfpga.wordpress.com/146/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mirfpga.wordpress.com/146/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mirfpga.wordpress.com/146/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mirfpga.wordpress.com/146/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/mirfpga.wordpress.com/146/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/mirfpga.wordpress.com/146/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/mirfpga.wordpress.com/146/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/mirfpga.wordpress.com/146/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mirfpga.wordpress.com/146/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mirfpga.wordpress.com/146/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mirfpga.wordpress.com/146/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mirfpga.wordpress.com/146/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mirfpga.wordpress.com/146/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mirfpga.wordpress.com/146/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mirfpga.wordpress.com&amp;blog=7262421&amp;post=146&amp;subd=mirfpga&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://mirfpga.wordpress.com/2009/07/22/146/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/a6c6af1140ab90b8f95c04526641d264?s=96&#38;d=http%3A%2F%2Fs0.wp.com%2Fi%2Fmu.gif&#38;r=G" medium="image">
			<media:title type="html">W@rmSnow</media:title>
		</media:content>

		<media:content url="http://docs.google.com/File?id=dfgk9sxq_6dmnfjjgw_b" medium="image" />

		<media:content url="http://mirfpga.files.wordpress.com/2009/07/parameters.png" medium="image">
			<media:title type="html">parameters</media:title>
		</media:content>
	</item>
		<item>
		<title>“Умение разбираться в чужом коде”</title>
		<link>http://mirfpga.wordpress.com/2009/07/14/171/</link>
		<comments>http://mirfpga.wordpress.com/2009/07/14/171/#comments</comments>
		<pubDate>Tue, 14 Jul 2009 04:36:30 +0000</pubDate>
		<dc:creator>Warm Snow</dc:creator>
				<category><![CDATA[Поток сознания]]></category>
		<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://mirfpga.wordpress.com/2009/07/23/171/</guid>
		<description><![CDATA[Знакомая фраза, не так ли? Большинство работодателей считают необходимым вставить эту фразу на одно из первых мест в список требований к потенциальному кандидату. По моему мнению, за этой фразой кроется не совсем то, что подразумевает работодатель… Я, конечно, понимаю, что объявления о приеме на работу пишут отнюдь не разработчики, а менеджеры по кадрам. Однако, ИМХО, [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mirfpga.wordpress.com&amp;blog=7262421&amp;post=171&amp;subd=mirfpga&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<div class="snap_preview">
<div style="font-family:Trebuchet MS;text-align:left;"><span style="font-size:13px;"></p>
<p>Знакомая фраза, не так ли?</p>
<p>Большинство работодателей считают необходимым вставить эту фразу на одно из первых мест в список требований к потенциальному кандидату.</p>
<p>По моему мнению, за этой фразой кроется не совсем то, что подразумевает работодатель…</p>
<div style="font-family:Trebuchet MS;text-align:left;"><span style="font-size:13px;"><span id="more-171"></span></span></p>
<div style="font-family:Trebuchet MS;text-align:left;"><span style="font-size:13px;">Я, конечно, понимаю, что объявления о приеме на работу пишут отнюдь не разработчики, а менеджеры по кадрам.<br />
Однако, ИМХО, такая фраза в списке требований к кандидату говорит отнюдь не о солидности компании, а скорее о:<br />
- неумении руководителей организовать разработчиков таким образом, чтобы они писали код единым стилем и сопровождали его внятными комментариями;<br />
- большой текучести кадров, которые оставляют после себя массы недокументированного кода, написанного по принципу “в огороде бузина, а в Киеве дядька”;<br />
- работе в постоянной “запарке”, не оставляющей времени на то, чтобы хоть как-то задокументировать написанное.</p>
<p>Кроме того, работодатель не подозревает о том, что любой код можно привести к абсолютно нечитаемому виду.<br />
Дабы не быть голословным, приведу пример кода, в котором мне пришлось разбираться несколько лет назад. Сотрудник, писавший этот код, отказался давать какие-либо комментарии, сославшись на свою бесконечную занятость (хотя скорее всего причина была в том, что он банально забыл,<br />
для чего нужна эта конструкция). Поэтому пришлось разбираться самому.</p>
<p>Итак, внимание, немного VHDL:</span></p>
<pre><span style="font-size:14px;"><span style="font-family:Courier New;"><span style="color:#0000ff;">process</span> (CLKIN, RST)
<span style="color:#0000ff;">variable</span> km : <span style="color:#0000ff;">integer</span> <span style="color:#0000ff;">range</span> 0 <span style="color:#0000ff;">to</span> 15;
<span style="color:#0000ff;">variable</span> fm : <span style="color:#0000ff;">std_logic</span>;
<span style="color:#0000ff;">begin</span>
<span style="color:#0000ff;"> if</span> ( RST = '1' ) <span style="color:#0000ff;">then</span>
  clk1 &lt;= '0';
<span style="color:#0000ff;"> elsif rising_edge</span>(CLKIN) <span style="color:#0000ff;">then</span>
<span style="color:#0000ff;">   case</span> km <span style="color:#0000ff;">is</span>
<span style="color:#0000ff;">    when</span> 0 =&gt; fm := '1'; km := 1;
<span style="color:#0000ff;">    when</span> 1 =&gt; fm := '1'; km := 2;
<span style="color:#0000ff;">    when</span> 2 =&gt; fm := '1'; km := 3;
<span style="color:#0000ff;">    when</span> 3 =&gt; fm := '1'; km := 4;
<span style="color:#0000ff;">    when</span> 4 =&gt; fm := '1'; km := 5;
<span style="color:#0000ff;">    when</span> 5 =&gt; fm := '1'; km := 6;
<span style="color:#0000ff;">    when</span> 6 =&gt; fm := '1'; km := 7;
<span style="color:#0000ff;">    when</span> 7 =&gt; fm := '1'; km := 8;
<span style="color:#0000ff;">    when</span> 8 =&gt; fm := '0'; km := 9;
<span style="color:#0000ff;">    when</span> 9 =&gt; fm := '0'; km := 10;
<span style="color:#0000ff;">    when</span> 10 =&gt; fm := '0'; km := 11;
<span style="color:#0000ff;">    when</span> 11 =&gt; fm := '0'; km := 12;
<span style="color:#0000ff;">    when</span> 12 =&gt; fm := '0'; km := 13;
<span style="color:#0000ff;">    when</span> 13 =&gt; fm := '0'; km := 14;
<span style="color:#0000ff;">    when</span> 14 =&gt; fm := '0'; km := 15;
<span style="color:#0000ff;">    when</span> <span style="color:#0000ff;">others</span> =&gt; fm := '0'; km := 0;
<span style="color:#0000ff;"> end case</span>;
 clk1 &lt;= fm;
<span style="color:#0000ff;"> end if</span>;
<span style="color:#0000ff;">end process</span>;
</span></span></pre>
<div style="font-family:Trebuchet MS;text-align:left;"><span style="font-size:13px;">Вот он – стиль настоящего профи. Ни единого комментария. Имена переменных так же ни о чем не говорят.<br />
После первого взгляда на этот кусок кода я поначалу был озадачен и не сразу “въехал” в назначение этой развесистой конструкции. Когда же я на огрызке бумаги нарисовал сигналы, то откровенно впал в ступор.<br />
Вы уже догадались, какое назначение имеет этот кусок кода? Правильно, это – банальный делитель частоты на 16.<br />
Несмотря на то, что в системе присутствовало НЕСКОЛЬКО! двоичных счетчиков, с выходов которых легко можно было снять требуемый сигнал, разработчик посчитал необходимым сделать отдельный делитель частоты (и, кстати, не единственный. Еще две аналогичных конструкции присутствовали в коде в качестве делителей частоты на 4 и на 8). Хотя, как выяснилось в процессе дальнейшей работы, он просто не знал, что общего между делителем частоты и двоичным счетчиком.</p>
<p>К чему я все это написал? Да к тому, уважаемый работодатель, что любой код можно легко превратить в “говнокод”, в котором нелегко будет разобраться даже профессионалу. Поэтому прежде, чем выдвигать магическое требование “Умение разбираться в чужом коде” подумайте, а пишут ли ваши разработчики его в читабельном виде.</span></p>
</div>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mirfpga.wordpress.com/171/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mirfpga.wordpress.com/171/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mirfpga.wordpress.com/171/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mirfpga.wordpress.com/171/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/mirfpga.wordpress.com/171/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/mirfpga.wordpress.com/171/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/mirfpga.wordpress.com/171/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/mirfpga.wordpress.com/171/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mirfpga.wordpress.com/171/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mirfpga.wordpress.com/171/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mirfpga.wordpress.com/171/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mirfpga.wordpress.com/171/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mirfpga.wordpress.com/171/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mirfpga.wordpress.com/171/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mirfpga.wordpress.com&amp;blog=7262421&amp;post=171&amp;subd=mirfpga&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://mirfpga.wordpress.com/2009/07/14/171/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/a6c6af1140ab90b8f95c04526641d264?s=96&#38;d=http%3A%2F%2Fs0.wp.com%2Fi%2Fmu.gif&#38;r=G" medium="image">
			<media:title type="html">W@rmSnow</media:title>
		</media:content>
	</item>
		<item>
		<title>Избавляемся от лишнего клокового домена.</title>
		<link>http://mirfpga.wordpress.com/2009/05/07/177/</link>
		<comments>http://mirfpga.wordpress.com/2009/05/07/177/#comments</comments>
		<pubDate>Thu, 07 May 2009 01:44:49 +0000</pubDate>
		<dc:creator>Warm Snow</dc:creator>
				<category><![CDATA[FPGA Programming]]></category>
		<category><![CDATA[Clock Domains]]></category>
		<category><![CDATA[Coding Style]]></category>
		<category><![CDATA[Design Tricks]]></category>
		<category><![CDATA[Interfaces]]></category>

		<guid isPermaLink="false">http://mirfpga.wordpress.com/2009/07/23/177/</guid>
		<description><![CDATA[При проектировании последовательных интерфейсов практически всегда возникает проблема реализации работы устройства от одного общего тактового сигнала. Классический пример последовательного интерфейса приведен на Рис.1. Рис.1. Последовательный интерфейс. На приведенной диаграмме видно, что данные в приемник защелкиваются по переднему фронту сигнала SCLK. При этом данные с передатчика должны установиться на линии DOUT до прихода переднего фронта SCLK. [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mirfpga.wordpress.com&amp;blog=7262421&amp;post=177&amp;subd=mirfpga&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<div class="snap_preview">
<div style="font-family:Trebuchet MS;text-align:left;"><span style="font-size:13px;"></p>
<p>При проектировании последовательных интерфейсов практически всегда возникает проблема реализации работы устройства от одного общего тактового сигнала.</p>
<p>Классический пример последовательного интерфейса приведен на Рис.1.</p>
<p style="text-align:center;"><img class="size-full wp-image-29 aligncenter" title="Рис.1. Последовательный интерфейс." src="http://mirfpga.files.wordpress.com/2009/04/serial_if_waveform2.jpg?w=585&#038;h=62&#038;h=62" alt="Рис.1. Последовательный интерфейс." width="585" height="62" /></p>
<p style="text-align:center;"><strong>Рис.1. Последовательный интерфейс.</strong></p>
<p>На приведенной диаграмме видно, что данные в приемник защелкиваются по переднему фронту сигнала SCLK. При этом данные с передатчика должны установиться на линии DOUT до прихода переднего фронта SCLK.</p>
<p>Типовая реализация такого интерфейса на языке Verilog выглядит следующим образом:</p>
<p><span style="font-family:'trebuchet ms';"><span style="font-size:13px;"><span id="more-177"></span></span></p>
<div style="font-family:Trebuchet MS;text-align:left;"><span style="font-size:13px;"></span></p>
<p style="font-family:Courier New;"><span style="color:#008000;">// Receiver</span></p>
<p style="font-family:Courier New;"><span style="color:#0000ff;">reg</span> rx_buf[15:00];</p>
<p style="font-family:Courier New;"><span style="color:#0000ff;">always</span> @(<span style="color:#0000ff;">posedge</span> SCLK)</p>
<p style="font-family:Courier New;">rx_buf &lt;= {rx[14:00], DIN};</p>
<p style="font-family:Courier New;">
<p style="font-family:Courier New;"><span style="color:#008000;">// Transmitter</span></p>
<p style="font-family:Courier New;"><span style="color:#0000ff;">reg</span> tx_buf[15:00];</p>
<p style="font-family:Courier New;"><span style="color:#0000ff;">always</span> @(<span style="color:#0000ff;">negedge</span> SCLK)</p>
<p style="font-family:Courier New;">DOUT &lt;= tx_buf[15];</p>
<p style="font-family:Courier New;"><span style="color:#008000;"> // Далее следует сдвиг tx_buf на один бит влево</span></p>
<p>Однако, приведенная реализация (при всей ее простоте) имеет два существенных недостатка:</p>
<p>- возникновение дополнительного клокового домена, работающего от сигнала SCLK</p>
<p>- использование в системе двух типов триггеров, работающих как по переднему фронту, так и по заднему фронтам сигнала SCLK</p>
<p>Если интерфейс реализован на FPGA, то такая реализация в большинстве случаев работает (хотя мне известны и обратные ситуации). Однако при проектировании ASIC такой стиль, как правило, неприемлем.</p>
<p>Избежать такой ситуации несложно. Достаточно выделить фронты сигнала SCLK и использовать их как сигналы разрешения. Это можно сделать следующим образом.</p>
<p style="font-family:Courier New;"><span style="color:#0000ff;">reg</span> [02:00] sclk_ed;</p>
<p style="font-family:Courier New;"><span style="color:#0000ff;">wire</span> sclk_re, sclk_fe;</p>
<p style="font-family:Courier New;"><span style="color:#0000ff;">always</span> @(<span style="color:#0000ff;">posedge</span> MCLK)</p>
<p style="font-family:Courier New;"><span style="color:#0000ff;"> if</span> (!RSTN)</p>
<p style="font-family:Courier New;">sclk_ed &lt;= 3′b000;</p>
<p style="font-family:Courier New;"><span style="color:#0000ff;"> else</span></p>
<p style="font-family:Courier New;">sclk_ed &lt;= {sclk_ed[01:00], SCLK};</p>
<p style="font-family:Courier New;">
<p style="font-family:Courier New;"><span style="color:#0000ff;">assign</span> sclk_re = ~sclk_ed[1] &amp; sclk_ed[0];</p>
<p style="font-family:Courier New;"><span style="color:#0000ff;">assign</span> sclk_fe = sclk_ed[1] &amp; ~sclk_ed[0];</p>
<p>Диаграмма работы детектора фронтов представлена на Рис.2</p>
<p style="text-align:center;"><img class="size-full wp-image-32 aligncenter" title="edge_detector" src="http://mirfpga.files.wordpress.com/2009/04/edge_detector1.jpg?w=584&#038;h=92&#038;h=92" alt="edge_detector" width="584" height="92" /></p>
<p style="text-align:center;"><strong>Рис.2. Детектор фронтов сигнала</strong></p>
<p style="text-align:center;">
<p style="text-align:left;">
<p>Как видно на диаграмме, сигнал sclk_re выделяет передний фронт сигнала SCLK, а сигнал sclk_fe – задний фронт SCLK.</p>
<p>В этом случае реализация последовательных приемника и передатчика может выглядеть следующим образом (где MCLK – системный клок):</p>
<p style="font-family:Courier New;"><span style="color:#008000;">// Receiver</span></p>
<p style="font-family:Courier New;"><span style="color:#0000ff;">reg</span> [15:00] rx_buf;</p>
<p style="font-family:Courier New;"><span style="color:#0000ff;">always</span> @(<span style="color:#0000ff;">posedge</span> MCLK)</p>
<p style="font-family:Courier New;"><span style="color:#0000ff;">begin</span></p>
<p style="font-family:Courier New;"><span style="color:#0000ff;"> if</span> (!RSTN)</p>
<p style="font-family:Courier New;">rx_buf   &lt;= 16′h0000;</p>
<p style="font-family:Courier New;"><span style="color:#0000ff;"> else</span></p>
<p style="font-family:Courier New;"><span style="color:#0000ff;"> begin</span></p>
<p style="font-family:Courier New;"><span style="color:#0000ff;"> if</span> (sclk_re)</p>
<p style="font-family:Courier New;">rx_buf[bitptr] &lt;= DIN;</p>
<p style="font-family:Courier New;"><span style="color:#0000ff;"> end</span></p>
<p style="font-family:Courier New;"><span style="color:#0000ff;">end</span></p>
<p style="font-family:Courier New;">
<p style="font-family:Courier New;"><span style="color:#008000;">// Transmitter</span></p>
<p style="font-family:Courier New;"><span style="color:#0000ff;">reg</span> [15:00] tx_buf;</p>
<p style="font-family:Courier New;"><span style="color:#0000ff;">always</span> @(<span style="color:#0000ff;">posedge</span> MCLK)</p>
<p style="font-family:Courier New;"><span style="color:#0000ff;">begin</span></p>
<p style="font-family:Courier New;"><span style="color:#0000ff;"> if </span>(!RSTN)</p>
<p style="font-family:Courier New;">DOUT &lt;= 1′b0;</p>
<p style="font-family:Courier New;"><span style="color:#0000ff;"> else</span></p>
<p style="font-family:Courier New;"><span style="color:#0000ff;"> begin</span></p>
<p style="font-family:Courier New;"><span style="color:#0000ff;"> if</span> (sclk_fe)</p>
<p style="font-family:Courier New;">DOUT &lt;= tx_buf[bitptr];</p>
<p style="font-family:Courier New;"><span style="color:#0000ff;"> end</span></p>
<p style="font-family:Courier New;"><span style="color:#0000ff;">end</span></p>
<p>Логику формирования указателя битов bitptr я не привожу, так как она может быть различна для разных типов последовательных интерфейсов.</p>
<p>Таким способом мы легко избавляемся от лишнего клокового домена и смешения типов триггеров.</p>
<p>На Рис.3 приведена диаграмма работы последовательных приемника и передатчика с использованием детектора фронтов SCLK:</p>
<p style="text-align:center;"><img class="aligncenter size-full wp-image-34" title="serial_if_result1" src="http://mirfpga.files.wordpress.com/2009/04/serial_if_result1.jpg?w=585&#038;h=133&#038;h=133" alt="serial_if_result1" width="585" height="133" /></p>
<p style="text-align:center;"><strong>Рис.3. Последовательный приемо-передатчик.</strong></p>
<p style="text-align:center;">
<p>Недостаток такого метода очевиден: задержки установления данных на линии DOUT и защелкивания данных с линии DIN. Кроме того, следует учесть, что период сигнала MCLK должен быть в несколько раз меньше периода SCLK.</p>
<p>Данный способ реализации последовательных приемо-передатчиков используется мной уже в течение нескольких лет и успешно работает как в проектах, реализованных на FPGA, так и в серийно выпускаемых ASIC.</p>
</div>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mirfpga.wordpress.com/177/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mirfpga.wordpress.com/177/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mirfpga.wordpress.com/177/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mirfpga.wordpress.com/177/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/mirfpga.wordpress.com/177/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/mirfpga.wordpress.com/177/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/mirfpga.wordpress.com/177/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/mirfpga.wordpress.com/177/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mirfpga.wordpress.com/177/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mirfpga.wordpress.com/177/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mirfpga.wordpress.com/177/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mirfpga.wordpress.com/177/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mirfpga.wordpress.com/177/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mirfpga.wordpress.com/177/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mirfpga.wordpress.com&amp;blog=7262421&amp;post=177&amp;subd=mirfpga&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://mirfpga.wordpress.com/2009/05/07/177/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/a6c6af1140ab90b8f95c04526641d264?s=96&#38;d=http%3A%2F%2Fs0.wp.com%2Fi%2Fmu.gif&#38;r=G" medium="image">
			<media:title type="html">W@rmSnow</media:title>
		</media:content>

		<media:content url="http://mirfpga.files.wordpress.com/2009/04/serial_if_waveform2.jpg?w=585&#38;h=62" medium="image">
			<media:title type="html">Рис.1. Последовательный интерфейс.</media:title>
		</media:content>

		<media:content url="http://mirfpga.files.wordpress.com/2009/04/edge_detector1.jpg?w=584&#38;h=92" medium="image">
			<media:title type="html">edge_detector</media:title>
		</media:content>

		<media:content url="http://mirfpga.files.wordpress.com/2009/04/serial_if_result1.jpg?w=585&#38;h=133" medium="image">
			<media:title type="html">serial_if_result1</media:title>
		</media:content>
	</item>
		<item>
		<title>Ключ на старт!</title>
		<link>http://mirfpga.wordpress.com/2009/04/07/%d0%ba%d0%bb%d1%8e%d1%87-%d0%bd%d0%b0-%d1%81%d1%82%d0%b0%d1%80%d1%82/</link>
		<comments>http://mirfpga.wordpress.com/2009/04/07/%d0%ba%d0%bb%d1%8e%d1%87-%d0%bd%d0%b0-%d1%81%d1%82%d0%b0%d1%80%d1%82/#comments</comments>
		<pubDate>Tue, 07 Apr 2009 00:32:21 +0000</pubDate>
		<dc:creator>Warm Snow</dc:creator>
				<category><![CDATA[Поток сознания]]></category>
		<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://mirfpga.wordpress.com/?p=6</guid>
		<description><![CDATA[Доброго дня всем! После многих лет работы по специальности возникло желание создать свой русскоязычный блог, посвященный электронике. Название &#171;Мир FPGA&#187; отражает в себе основную область интересов авторов блога &#8211; работу с программируемой логикой. Однако это не значит, что публикации на другие темы, относящиеся к электронике, будут обходиться стороной. Администрация блога приглашает всех заинтересованных специалистов поучаствовать [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mirfpga.wordpress.com&amp;blog=7262421&amp;post=6&amp;subd=mirfpga&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><span style="font-family:'trebuchet ms';"><span style="font-size:small;">Доброго дня всем!</span></span></p>
<div>
<p><span style="font-family:'trebuchet ms';"><span style="font-size:small;">После многих лет работы по специальности возникло желание создать свой русскоязычный блог, посвященный электронике.</span></span></p>
</div>
<div>
<p><span style="font-family:'trebuchet ms';"><span style="font-size:small;">Название </span></span><span style="font-weight:bold;"><span style="font-family:'trebuchet ms';"><span style="font-size:small;">&laquo;Мир FPGA&raquo;</span></span></span><span style="font-family:'trebuchet ms';"><span style="font-size:small;"> отражает в себе основную область интересов авторов блога &#8211; работу с программируемой логикой. Однако это не значит, что публикации на другие темы, относящиеся к электронике, будут обходиться стороной.</span></span></p>
</div>
<div>
<p><span style="font-family:'trebuchet ms';"><span style="font-size:small;">Администрация блога приглашает всех заинтересованных специалистов поучаствовать в создании информационного ресурса, в котором они смогут поделиться своим опытом работы в различных областях электроники, и, надеемся, найти для себя полезную информацию.</span></span></p>
</div>
<div>
<p><span style="font-family:'trebuchet ms';"><span style="font-size:small;">Ключ на старт! </span></span></p>
</div>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mirfpga.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mirfpga.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mirfpga.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mirfpga.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/mirfpga.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/mirfpga.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/mirfpga.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/mirfpga.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mirfpga.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mirfpga.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mirfpga.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mirfpga.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mirfpga.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mirfpga.wordpress.com/6/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mirfpga.wordpress.com&amp;blog=7262421&amp;post=6&amp;subd=mirfpga&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://mirfpga.wordpress.com/2009/04/07/%d0%ba%d0%bb%d1%8e%d1%87-%d0%bd%d0%b0-%d1%81%d1%82%d0%b0%d1%80%d1%82/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/a6c6af1140ab90b8f95c04526641d264?s=96&#38;d=http%3A%2F%2Fs0.wp.com%2Fi%2Fmu.gif&#38;r=G" medium="image">
			<media:title type="html">W@rmSnow</media:title>
		</media:content>
	</item>
	</channel>
</rss>
