<?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>Блог НТЦ Метротек &#187; usability</title>
	<atom:link href="http://blog.metrotek.spb.ru/tag/usability/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.metrotek.spb.ru</link>
	<description>блог разработчиков</description>
	<lastBuildDate>Sat, 21 Jan 2012 12:36:22 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Quartus и сборка в коммандной строке. Часть II.</title>
		<link>http://blog.metrotek.spb.ru/2009/10/20/quartus-i-sborka-v-kommandnoy-stroke-chast-ii/</link>
		<comments>http://blog.metrotek.spb.ru/2009/10/20/quartus-i-sborka-v-kommandnoy-stroke-chast-ii/#comments</comments>
		<pubDate>Tue, 20 Oct 2009 11:07:33 +0000</pubDate>
		<dc:creator>Алексей Литвинов</dc:creator>
				<category><![CDATA[новости]]></category>
		<category><![CDATA[fpga]]></category>
		<category><![CDATA[quartus]]></category>
		<category><![CDATA[tcl]]></category>
		<category><![CDATA[usability]]></category>

		<guid isPermaLink="false">http://blog.metrotek.spb.ru/?p=1484</guid>
		<description><![CDATA[Компилировать проекты в графическом интерфейсе, конечно, иногда приятно, но с увеличением количества этих самых проектов и их сложности возникает необходимость в альтернативном решении. Альтернативное решение &#8212; использование командной строки &#8212; уже было описано в статье Павла Курочкина. И вот эта идея получила некоторое развитие. Дело в том, что quartus понимает tcl-скрипты, и программисты компании Altera [...]]]></description>
			<content:encoded><![CDATA[<p>Компилировать проекты в графическом интерфейсе, конечно, иногда приятно, но с увеличением количества этих самых проектов и их сложности возникает необходимость в альтернативном решении. Альтернативное решение &#8212; использование командной строки &#8212; уже было описано в <a href="http://b4open.spb.ru/bin/view/B4/QuartusAdvancedUsageArticle">статье</a> Павла Курочкина. И вот эта идея получила некоторое развитие.</p>
<p>Дело в том, что <span id="more-1484"></span> quartus понимает tcl-скрипты, и программисты компании Altera подготовили набор готовых функций и методов для управления проектами. Т.е. с помощью tcl мы можем выполнить абсолютно все то же самое, что и с помощью GUI (при желании нарисовать этот самый GUI), только быстро и автоматизированно. Данное знание не является сакральным и вы можете ознакомиться с ним <a href="http://www.altera.com/literature/manual/TclScriptRefMnl.pdf?GSA_pos=1&amp;WT.oss_r=1&amp;WT.oss=quartus%20scripting%20manual" target="_blank">здесь</a>. Мы, в свою очередь, бегло просмотрели руководство по tcl скриптингу и решили использовать данные возможности при сборке новых проектов. Сразу отметим, что больше всего нам понравилась сборка всего проекта одной строкой, что на фоне Makefile&#8217;а выглядит несколько более компактно.</p>
<p>Что получилось в итоге? А в итоге получился файл &#171;files&#187; в котором списком перечислены файлы необходимые для сборки проекта (причем без какого-либо пути к именам этих файлов) и скрипт make.tcl, которому в качестве аргументов передаются имя проекта и пути к бибилиотекам с файлами. Скрипт открывает проект, выполняет очистку .qsf &#8212; файла (данный файл содержит все настройки проекта) от прежних подключенных файлов проекта, выполняет поиск указанных в &#171;files&#187; файлов в библиотеках и, в зависимоти от их расширений (чтобы понять, что это &#8212; verilog/vhdl/sdc), подключает их к проекту. </p>
<p>После этого запускается сборка проекта всего ОДНОЙ СТРОКОЙ и проект закрывается. На выходе мы получаем .pof файл. Далее ничто нам не мешает использовать этот скрипт в Makefile&#8217;е. Т.к. это наш первый опыт tcl скриптинга, то мы будем рады любым предложениям по оптимизации данного скрипта и вообще любым замечаниям.</p>
<p>Скрипт make.tcl (запускаем так: ./make.tcl my_project /lib_path1 /lib_path2 ):</p>
<pre>
#!/opt/altera/quartus8.0/quartus/bin/quartus_sh -t

load_package flow

#PROJECT - project name to build
set PROJECT [lindex $argv 0]
#others args is paths for lib dirs with sources
set LIB     [string trimleft $argv $PROJECT]

#Opening project
project_open $PROJECT

#Forming list with source files
#List is in "files"
set FILE_LIST "[exec cat files]"

############################
#Array with filetypes
array set file_types {
  VERILOG_FILE 0
  SDC_FILE     1
  VHDL_FILE    2
}

#Clear project files assignments from .qsf
foreach {type count} [array get file_types] {
 exec grep -v $type $PROJECT.qsf &gt; $PROJECT.qsf_tmp
 exec cat $PROJECT.qsf_tmp &gt; $PROJECT.qsf
 exec rm $PROJECT.qsf_tmp
}

##############################
#Adds source files to .qsf
##############################

#Find every file from file list
foreach file $FILE_LIST {
  foreach path $LIB {
    set file_path     [exec find $path -name $file]
    set file_path_num [exec echo $file_path | wc -l]

    #Does file exist?
    if { [llength $file_path] &gt; 0 } {
    #Is there only one file name?
      if { $file_path_num == "1" } {
        #Add assignment for source files
        switch -regexp -- $file {
          {.v}     {
                     puts "set_global_assignment -name VERILOG_FILE $file_path"
                     set_global_assignment -name VERILOG_FILE $file_path
                   }
          {.sdc}   {
                     puts "set_global_assignment -name SDC_FILE $file_path"
                     set_global_assignment -name SDC_FILE $file_path
                   }
          {.vhdl?} {
                     puts "set_global_assignment -name VHDL_FILE $file_path"
                     set_global_assignment -name VHDL_FILE $file_path
                   }
        }
      } else {
        puts "########################################################"
        puts "!!!! Error: files with the same names !!!!"
        puts "file_path=$file_path"
        puts "########################################################"
        exit
      }
    }
  }
}
##############################
#Run flow just with one command
execute_flow -compile
#Closing project
project_close
</pre>
<p>Пример файла &#171;files&#187;</p>
<p>module1.v<br />
module2.vdh<br />
module3.v<br />
constr.sdc</p>
<p>#############<br />
Алексей Литвинов<br />
Константин Добросолец<br />
Денис Габидуллин</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.metrotek.spb.ru/2009/10/20/quartus-i-sborka-v-kommandnoy-stroke-chast-ii/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Гуглу &#8212; респект</title>
		<link>http://blog.metrotek.spb.ru/2009/02/10/guglu-respekt/</link>
		<comments>http://blog.metrotek.spb.ru/2009/02/10/guglu-respekt/#comments</comments>
		<pubDate>Tue, 10 Feb 2009 10:32:38 +0000</pubDate>
		<dc:creator>Антон Фельдман</dc:creator>
				<category><![CDATA[интересное]]></category>
		<category><![CDATA[наблюдения]]></category>
		<category><![CDATA[usability]]></category>

		<guid isPermaLink="false">http://blog.metrotek.spb.ru/?p=611</guid>
		<description><![CDATA[Совет от Google: Время – деньги! Нажимайте &#171;Ввод&#187; (Enter) на клавиатуре вместо кнопки &#171;Поиск&#187; на экране. Молодцы. Не только в этом, но за это&#160;&#8212; отдельное спасибо.]]></description>
			<content:encoded><![CDATA[<p><a href="http://metrotek.spb.ru/b3etl.html"><img src="http://blog.metrotek.spb.ru/wp-content/uploads/2009/02/knopka.png" alt="knopka" title="knopka" width="111" height="111" class="alignright size-full wp-image-613" /></a> Совет от Google: <em>Время – деньги! Нажимайте &#171;Ввод&#187; (Enter) на клавиатуре вместо кнопки &#171;Поиск&#187; на экране.</em></p>
<p>Молодцы. Не только в этом, но за это&nbsp;&mdash; отдельное спасибо.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.metrotek.spb.ru/2009/02/10/guglu-respekt/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

