<?xml version="1.0"?>
<rss version="2.0"><channel><title>&#x42F;&#x437;&#x44B;&#x43A;&#x438; &#x43F;&#x440;&#x43E;&#x435;&#x43A;&#x442;&#x438;&#x440;&#x43E;&#x432;&#x430;&#x43D;&#x438;&#x44F; &#x43D;&#x430; &#x41F;&#x41B;&#x418;&#x421; (FPGA) Latest Topics</title><link>https://electronix.ru/forum/forum/16-yazyki-proektirovaniya-na-plis-fpga/</link><description>&#x42F;&#x437;&#x44B;&#x43A;&#x438; &#x43F;&#x440;&#x43E;&#x435;&#x43A;&#x442;&#x438;&#x440;&#x43E;&#x432;&#x430;&#x43D;&#x438;&#x44F; &#x43D;&#x430; &#x41F;&#x41B;&#x418;&#x421; (FPGA) Latest Topics</description><language>en</language><item><title>&#x424;&#x443;&#x43D;&#x43A;&#x446;&#x438;&#x44F; &#x43D;&#x435; &#x43F;&#x440;&#x430;&#x432;&#x438;&#x43B;&#x44C;&#x43D;&#x43E; &#x432;&#x44B;&#x434;&#x430;&#x451;&#x442; &#x437;&#x43D;&#x430;&#x447;&#x435;&#x43D;&#x438;&#x44F;</title><link>https://electronix.ru/forum/topic/218145-funktsiya-ne-pravilno-vydayot-znacheniya/</link><description><![CDATA[<p>
	Есть функция:<br />
	function automatic logic [32-1:0][32-1:0] find_positions(<br />
	    input int SIZE,<br />
	    input logic [32-1:0] mask<br />
	);<br />
	    logic [32-1:0][32-1:0] result = '0;<br />
	    <br />
	    int k = 0;<br />
	    for(int i = 0; i &lt; SIZE; i++) begin<br />
	        if(mask<em> == 1'b1) begin</em><br /><em>
	            result[k] = k;</em><br /><em>
	            k++;</em><br /><em>
	        end</em><br /><em>
	    end</em><br /><em>
	    return result;</em><br /><em>
	endfunction</em><br /><em>
	</em><br /><em>
	Вызываю функцию следующим образом:</em><br /><em>
	 
</em></p><em>

</em><div style="background-color:rgb(31,31,31);color:rgb(204,204,204);font-size:14px;"><em>
	</em><span style="color:rgb(204,204,204);"><em>localparam int NUM_IF = 8; // пример</em><br /><em>
	localparam logic [NUM_IF-1:0]  </em><span style="color:rgb(204,204,204);background-color:rgb(31,31,31);"><em>MASK_POS_THIS_TYPE = 8b'11000011; // пример</em></span><br /><em>
	localparam int NUM_POS_THIS_TYPE = 4; // вычисляется как количество 1 в маске MASK_POS_THIS_TYPE, в этом примере равно 4, но по факту тоже через другую функцию делаю</em></span><br /><em>
	localparam logic [NUM_POS_THIS_TYPE-1:0][$clog2(NUM_IF)-1:0] POS_THIS_TYPE = find_positions(NUM_IF,MASK_POS_THIS_TYPE);</em><br /><em>
	</em><br /><em>
	Функция выдаёт logic 32x32, в синтезируемой логике значение просто обрезается, тут вроде бы тоже самое, поправьте если я не прав.</em><br /><em>
	Как результат я жду, что функция присвоит POS_THIS_TYPE значения [0,1,6,7], естественно в виде векторов [000] [001] [110] [111]. По факту же имею на выходе [000] [000] [000] [000].
</em></div><em>

</em><div style="background-color:rgb(31,31,31);color:rgb(204,204,204);font-size:14px;"><em>
	Функцию я вызываю в цикле по параметру. Сама функция лежит в package, его я импортирую. Все используемые здесь параметры правильно инициализированы и их значения правильны, только </em><span style="color:rgb(204,204,204);"><em>POS_THIS_TYPE не корректен</em></span><em>.

	</em><div style="background-color:rgb(31,31,31);color:rgb(204,204,204);font-size:14px;"><em>
		</em><p><em>
			</em><span style="color:rgb(197,134,192);"><em>for</em></span><span style="color:rgb(204,204,204);"><em> (</em></span><span style="color:rgb(86,156,214);"><em>genvar</em></span><span style="color:rgb(204,204,204);"><em> </em></span><span style="color:rgb(156,220,254);"><em>k</em></span><span style="color:rgb(204,204,204);"><em> </em></span><span style="color:rgb(212,212,212);"><em>=</em></span><span style="color:rgb(204,204,204);"><em> </em></span><span style="color:rgb(181,206,168);"><em>0</em></span><span style="color:rgb(204,204,204);"><em>; </em></span><span style="color:rgb(156,220,254);"><em>k</em></span><span style="color:rgb(204,204,204);"><em> </em></span><span style="color:rgb(212,212,212);"><em>&lt;</em></span><span style="color:rgb(204,204,204);"><em> NUM_TYPE_CDC; </em></span><span style="color:rgb(156,220,254);"><em>k</em></span><span style="color:rgb(212,212,212);"><em>++</em></span><span style="color:rgb(204,204,204);"><em>) </em></span><span style="color:rgb(197,134,192);"><em>begin</em></span><em>
		</em></p><em>

		</em><div style="background-color:rgb(31,31,31);color:rgb(204,204,204);font-size:14px;"><em>
			</em><div><em>
				</em><span style="color:rgb(86,156,214);"><em>localparam logic</em></span><span style="color:rgb(204,204,204);"><em> [NUM_POS_THIS_TYPE</em></span><span style="color:rgb(212,212,212);"><em>-</em></span><span style="color:rgb(181,206,168);"><em>1</em></span><span style="color:rgb(212,212,212);"><em>:</em></span><span style="color:rgb(181,206,168);"><em>0</em></span><span style="color:rgb(204,204,204);"><em>][</em></span><span style="color:rgb(220,220,170);"><em>$clog2</em></span><span style="color:rgb(204,204,204);"><em>(NUM_IF)</em></span><span style="color:rgb(212,212,212);"><em>-</em></span><span style="color:rgb(181,206,168);"><em>1</em></span><span style="color:rgb(212,212,212);"><em>:</em></span><span style="color:rgb(181,206,168);"><em>0</em></span><span style="color:rgb(204,204,204);"><em>] POS_THIS_TYPE </em></span><span style="color:rgb(212,212,212);"><em>=</em></span><span style="color:rgb(220,220,170);"><em> find_positions</em></span><span style="color:rgb(204,204,204);"><em>(NUM_IF,MASK_POS_THIS_TYPE)</em></span><em>
			</em></div><em>
		</em></div><em>

		</em><div style="background-color:rgb(31,31,31);color:rgb(204,204,204);font-size:14px;"><em>
			</em><div><em>
				</em><span style="color:rgb(197,134,192);"><em>end</em></span><em>
			</em></div><em>
		</em></div><em>
		Есть идеи что не так?
	</em></div><em>
	</em><img class="ipsImage ipsImage_thumbnailed" data-fileid="179022" data-ratio="13.60" width="456" alt="image.png.d45658fa5f3c65e89ccf67d4e8061b92.png" src="https://electronix.ru/forum/uploads/monthly_2026_03/image.png.d45658fa5f3c65e89ccf67d4e8061b92.png" /><img class="ipsImage ipsImage_thumbnailed" data-fileid="179024" data-ratio="12.03" width="474" alt="image.png.9df5a62fbec1ea5e7b5a66ec4a2c7573.png" src="https://electronix.ru/forum/uploads/monthly_2026_03/image.png.9df5a62fbec1ea5e7b5a66ec4a2c7573.png" /><em>
</em></div><em>
</em>]]></description><guid isPermaLink="false">218145</guid><pubDate>Fri, 06 Mar 2026 15:16:02 +0000</pubDate></item><item><title>&#x43F;&#x440;&#x430;&#x432;&#x438;&#x43B;&#x44C;&#x43D;&#x43E;&#x441;&#x442;&#x44C; &#x43F;&#x440;&#x438;&#x43C;&#x435;&#x43D;&#x435;&#x43D;&#x438;&#x44F; &#x43A;&#x43E;&#x43D;&#x441;&#x442;&#x440;&#x435;&#x439;&#x43D;&#x43E;&#x432; &#x43F;&#x440;&#x438; pll</title><link>https://electronix.ru/forum/topic/206281-pravilnost-primeneniya-konstreynov-pri-pll/</link><description><![CDATA[<p>
	Привет, коллеги )
</p>

<p>
	Задам вам вопрос о правильности применения констрейнов и их эффекте.
</p>

<p>
	1. Создаю PLL в Vivado. Привык давно, что либо в Quartus особо на них констрейнов писать не надо, само подхватит при спец команде. Так и с Xilinx в Vivado особо не заморачивался, никогда не создавал (вроде само формирует xdc файл по ним, лень смотреть). В Vivado главное смотрю timing report, что все частоты совпадают и на месте
</p>

<p>
	 
</p>

<p>
	2. Обратил внимание, что один коллега, к этой pll прикрутил `create_clock` на каждый выход этой PLL (CLKOUT0,1,2,3,4)
</p>

<p>
	 
</p>

<p>
	И хожу я теперь в замешательстве, что с этим делать? на сколько это корректно?
</p>

<p>
	Это еще не все.
</p>

<p>
	Стали анализировать, и вот что вышло:
</p>

<p>
	1. Дизайн с create_clock на выходах pll заметно быстрее собирается и с таймингами нет проблем
</p>

<p>
	2. Дизайн по умолчанию без них собирается прям сложнее, дольше. Иногда надо что нибудь такое придумать, оптимизировать, чтобы тайминги свелись
</p>

<p>
	И вот вроде бы я бы рад оставить констрейны, эффект вау, но как то на подсознании понимаю, что пути клока могут обсчитываться короче и из за этого сводится все без проблем.
</p>

<p>
	 
</p>

<p>
	Знатоки, рассудите, корректно ли применять дополнительно create_clock к выходам PLL?
</p>

<p>
	 
</p>

<p>
	ps. Советы типа, проверь периоды в pll и create_clock или номера выходов после синтеза не сработают ) проверил все от и до.
</p>
]]></description><guid isPermaLink="false">206281</guid><pubDate>Tue, 12 Aug 2025 14:05:49 +0000</pubDate></item><item><title>CAN Controller &#x441; opencores</title><link>https://electronix.ru/forum/topic/116847-can-controller-s-opencores/</link><description><![CDATA[<p>кто-нибудь использовал <a href="http://electronix.ru/redirect.php?http://opencores.org/project,can" rel="">ядро CAN Protocol Controller с opencores ?</a>  Все ли нормально работает, надо ли его допиливать? вроде в описании указано <b>tested in HW and verified with the Bosch VHDL Reference System</b>, но с другой стороны висит открытый список Bug-репортов.</p>]]></description><guid isPermaLink="false">116847</guid><pubDate>Fri, 15 Nov 2013 10:49:47 +0000</pubDate></item><item><title>&#x420;&#x430;&#x431;&#x43E;&#x442;&#x430; &#x432;&#x441;&#x442;&#x440;&#x43E;&#x435;&#x43D;&#x43D;&#x43E;&#x433;&#x43E; &#x433;&#x435;&#x43D;&#x435;&#x440;&#x430;&#x442;&#x43E;&#x440;&#x430; &#x432; &#x441;&#x435;&#x440;&#x438;&#x438; Altera MAX II</title><link>https://electronix.ru/forum/topic/213378-rabota-vstroennogo-generatora-v-serii-altera-max-ii/</link><description><![CDATA[<p>
	Подключение генератора:
</p>

<pre style="border:none;padding:0cm;"><span style="color:rgb(34,34,34);font-size:12px;">ALTUFM_OSC osc( .oscena(1'b1), .osc(clk));</span></pre>

<p>
	Отключение:
</p>

<p>
	<span style="color:rgb(34,34,34);font-size:12px;">ALTUFM_OSC osc( .oscena(0'b1), .osc(clk));</span>
</p>

<p>
	Вопросы:
</p>

<p>
	1. До подключения генератор физически работал?
</p>

<p>
	2. При отключении генератор физически перестает генерировать импульсы или только происходит логическое отключение?
</p>

<p>
	Это интересует в связи с использованием ПЛИС для схем, чувствительных к наводкам.
</p>
]]></description><guid isPermaLink="false">213378</guid><pubDate>Mon, 12 Jan 2026 08:46:56 +0000</pubDate></item><item><title>&#x41E;&#x43A;&#x440;&#x443;&#x433;&#x43B;&#x435;&#x43D;&#x438;&#x435; &#x432; Verilog</title><link>https://electronix.ru/forum/topic/212906-okruglenie-v-verilog/</link><description><![CDATA[<p>
	Всем привет!
</p>

<p>
	Не могу понять, как в verilog делать округление. Пока что пользуюсь таким костылем:
</p>

<pre class="ipsCode">localparam FREQ_DIV = (2*CLOCK_RATE/BAUD_RATE+1)/2;</pre>

<p>
	Нашел такие варианты округления: через $round() и через приведение типа к int', но ни один из вариантов не работает. Среда Gowin IDE.
</p>

<p>
	Эти варианты не работают:
</p>

<pre class="ipsCode">localparam FREQ_DIV = $round(1.0*CLOCK_RATE/BAUD_RATE);
//ERROR (EX3817) : System function call 'round' is not allowed here("C:\...":22)


localparam FREQ_DIV = int'(1.0*CLOCK_RATE/BAUD_RATE);
// ERROR (EX3863) : Syntax error near '''("C:\...":22)</pre>

<p>
	Как округлять без костылей?
</p>

<p>
	Я правильно понимаю, что в verilog приведение к типу int округляет, а не отбрасывает дробную часть?
</p>
]]></description><guid isPermaLink="false">212906</guid><pubDate>Wed, 31 Dec 2025 09:22:58 +0000</pubDate></item><item><title>i2c &#x447;&#x435;&#x440;&#x435;&#x437; FPGA (&#x43A;&#x43E;&#x43D;&#x43A;&#x440;&#x435;&#x442;&#x43D;&#x43E; &#x447;&#x435;&#x440;&#x435;&#x437; GoWin GW1N*)</title><link>https://electronix.ru/forum/topic/195840-i2c-cherez-fpga-konkretno-cherez-gowin-gw1n/</link><description><![CDATA[<p>
	Добрый день,<br />
	<br />
	имеется МК (на 3.3В) с I2C (SCL, SDA), который мне надо подключить к 5 различным сенсорам с одинаковым адресом, чтобы с ними общаться через I2C и у сенсоров свое напряжение (1.8В). Мне достаточно, чтобы МК в каждый момент времени работал только с одним сенсором.<br />
	<br />
	Я понимаю как это сделать через левел-конверторы и i2c свич, но не хотел бы так делать.<br />
	<br />
	У меня есть в дизайне плиска GW1N*9 у которой есть достаточно свободных ног, чтобы пропустить это все через нее, то есть там есть:.
</p>

<pre class="ipsCode prettyprint lang-c prettyprinted"><span class="pln">inout sda_master</span><span class="pun">;</span><span class="pln">
inout scl_slave</span><span class="pun">;</span><span class="pln">

input </span><span class="pun">[</span><span class="lit">2</span><span class="pun">:</span><span class="lit">0</span><span class="pun">]</span><span class="pln"> </span><span class="typ">Pos</span><span class="pun">;</span><span class="pln">

inout sda_slave</span><span class="pun">[</span><span class="lit">0</span><span class="pun">:</span><span class="lit">4</span><span class="pun">];</span><span class="pln">
inout scl_slave</span><span class="pun">[</span><span class="lit">0</span><span class="pun">:</span><span class="lit">4</span><span class="pun">];</span></pre>

<p>
	Не понимаю, пожалуйста, подскажите как мне на основании значения Pos (которое принимает значения от 0 до 4 включительно) соединять на (систем)верилоге эти мастер-слейв пины? Или это силами плиски невозможно сделать, и надо в ручную писать на FPGA i2c-шный интерфейс?
</p>

<p>
	 
</p>

<p>
	Спасибо!
</p>

<p>
	 
</p>

<p>
	ИИВ
</p>
]]></description><guid isPermaLink="false">195840</guid><pubDate>Sun, 03 Nov 2024 12:04:54 +0000</pubDate></item><item><title>&#x41D;&#x430;&#x439;&#x442;&#x438; &#x43C;&#x435;&#x441;&#x442;&#x430; &#x434;&#x43B;&#x44F; DSP32</title><link>https://electronix.ru/forum/topic/212111-nayti-mesta-dlya-dsp32/</link><description><![CDATA[<p>
	Всем привет!
</p>

<p>
	Есть проект Vivado. Есть ли способ найти в проекте места, в которых можно задействовать блоки DSP32 c помощью инференса?
</p>

<p>
	Я пробовал такой подход. Назначить на все ячейки проекта
</p>

<blockquote class="ipsQuote" data-ipsquote="">
	<div class="ipsQuote_citation">
		Quote
	</div>

	<div class="ipsQuote_contents">
		<p>
			set_property use_dsp yes [get_cells -hierarchical -filter { IS_PRIMITIVE == "FALSE" }]
		</p>
	</div>
</blockquote>

<p>
	А затем вывести список ячеек, на которых инференс произошел. Проблема в том, что некоторые дизайны не проходят синтез с такими настройками - падают с segmantation fault. Есть ли какой-то другой способ?
</p>
]]></description><guid isPermaLink="false">212111</guid><pubDate>Mon, 15 Dec 2025 11:24:07 +0000</pubDate></item><item><title>&#x41D;&#x435; &#x443;&#x434;&#x430;&#x451;&#x442;&#x441;&#x44F; &#x43E;&#x431;&#x44A;&#x44F;&#x432;&#x438;&#x442;&#x44C; IP-core</title><link>https://electronix.ru/forum/topic/210528-ne-udayotsya-obyavit-ip-core/</link><description><![CDATA[<p>
	Как только прописываю корку умножителя в строках 21...26
</p>

<p>
	<a class="ipsAttachLink ipsAttachLink_image" href="https://electronix.ru/forum/uploads/monthly_2025_11/image.png.cbc4034e04840d7aee2e21e841855d0d.png" data-fileid="176814" data-fileext="png" rel=""><img class="ipsImage ipsImage_thumbnailed" data-fileid="176814" data-ratio="24.53" width="640" alt="image.thumb.png.7d7c1fc0480653a0577b5a6953712906.png" src="https://electronix.ru/forum/uploads/monthly_2025_11/image.thumb.png.7d7c1fc0480653a0577b5a6953712906.png" /></a>
</p>

<p>
	Сразу выскакивает ошибка при синтезе
</p>

<p>
	<img class="ipsImage ipsImage_thumbnailed" data-fileid="176815" data-ratio="9.85" width="619" alt="image.png.f39fbe25d4e2cb43e669976d9b1290c3.png" src="https://electronix.ru/forum/uploads/monthly_2025_11/image.png.f39fbe25d4e2cb43e669976d9b1290c3.png" />
</p>

<p>
	Уже крыша едет... В проекте около 40 файлов, куча умножителей и никаких проблем. А с этим файлом замучался.
</p>

<p>
	Коллеги, есть ли какие мысли?
</p>
]]></description><guid isPermaLink="false">210528</guid><pubDate>Fri, 14 Nov 2025 15:45:18 +0000</pubDate></item><item><title>&#x43A;&#x43E;&#x43C;&#x431;&#x438;&#x43D;&#x430;&#x442;&#x43E;&#x440;&#x43D;&#x430;&#x44F; &#x441;&#x445;&#x435;&#x43C;&#x430; &#x43D;&#x435; &#x440;&#x430;&#x431;&#x43E;&#x442;&#x430;&#x435;&#x442;</title><link>https://electronix.ru/forum/topic/209532-kombinatornaya-shema-ne-rabotaet/</link><description><![CDATA[<p>
	Здравствуйте!
</p>

<p>
	Прошу посмотреть что не так в коде:
</p>

<p>
	 
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted"><span class="pln">reg    [28:0] id;
wire  [7:0] acceptance_code_1;
wire  [7:0] acceptance_code_2;
wire  [7:0] acceptance_code_3;


wire  [7:0] acceptance_mask_1;
wire  [7:0] acceptance_mask_2;
wire  [7:0] acceptance_mask_3;

always @ (posedge clk )//or posedge rst)
begin
  if (rst)
    id &lt;= 29'h0;
  else if (sample_point &amp; (rx_id1 | rx_id2) &amp; (~bit_de_stuff))
    id &lt;= {id[27:0], sampled_bit};
end
wire          match_sf_std;

assign match_sf_std = ( (id[3]  == acceptance_code_0[0] | acceptance_mask_0[0] ) &amp;
                        (id[4]  == acceptance_code_0[1] | acceptance_mask_0[1] ) &amp;
                        (id[5]  == acceptance_code_0[2] | acceptance_mask_0[2] ) &amp;
                        (id[6]  == acceptance_code_0[3] | acceptance_mask_0[3] ) &amp;
                        (id[7]  == acceptance_code_0[4] | acceptance_mask_0[4] ) &amp;
                        (id[8]  == acceptance_code_0[5] | acceptance_mask_0[5] ) &amp;
                        (id[9]  == acceptance_code_0[6] | acceptance_mask_0[6] ) &amp;
                        (id[10] == acceptance_code_0[7] | acceptance_mask_0[7] ) &amp;

                        (rtr1   == acceptance_code_1[4] | acceptance_mask_1[4] ) &amp;
                        (id[0]  == acceptance_code_1[5] | acceptance_mask_1[5] ) &amp;
                        (id[1]  == acceptance_code_1[6] | acceptance_mask_1[6] ) &amp;
                        (id[2]  == acceptance_code_1[7] | acceptance_mask_1[7] ) 
						);</span></pre>
<p>
	Проблема в том что при несоответствии id и acception_code и acception_mask match_sf_std всегда остается 1
</p>
]]></description><guid isPermaLink="false">209532</guid><pubDate>Sat, 25 Oct 2025 21:07:35 +0000</pubDate></item><item><title>&#x423;&#x432;&#x435;&#x43B;&#x438;&#x447;&#x435;&#x43D;&#x438;&#x435; &#x43C;&#x430;&#x43A;&#x441;&#x438;&#x43C;&#x430;&#x43B;&#x44C;&#x43D;&#x43E;&#x439; &#x447;&#x430;&#x441;&#x442;&#x43E;&#x442;&#x44B; &#x440;&#x430;&#x431;&#x43E;&#x442;&#x44B; &#x441;&#x447;&#x451;&#x442;&#x447;&#x438;&#x43A;&#x430;</title><link>https://electronix.ru/forum/topic/201889-uvelichenie-maksimalnoy-chastoty-raboty-schyotchika/</link><description><![CDATA[<p>
	Добрый день.<br />
	Допустим в проекте есть счётчик на 32 бита:<br />
	 
</p>

<pre class="ipsCode prettyprint lang-c prettyprinted"><span class="pln">logic </span><span class="pun">[</span><span class="lit">31</span><span class="pun">:</span><span class="lit">0</span><span class="pun">]</span><span class="pln"> cnt</span><span class="pun">;</span><span class="pln">

always_ff </span><span class="pun">@(</span><span class="pln">posedge clock_i or negedge arstn_i</span><span class="pun">)</span><span class="pln"> begin
    </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(!</span><span class="pln">arstn_i</span><span class="pun">)</span><span class="pln"> begin 
    	cnt </span><span class="pun">&lt;=</span><span class="pln"> </span><span class="str">'</span><span class="lit">0</span><span class="pun">;</span><span class="pln">
    end
    </span><span class="kwd">else</span><span class="pln"> begin
    	cnt </span><span class="pun">&lt;=</span><span class="pln"> cnt </span><span class="pun">+</span><span class="pln"> </span><span class="lit">1</span><span class="str">'</span><span class="pln">b1</span><span class="pun">;</span><span class="pln">
    end 
end </span></pre>

<p>
	Максимальная частота работы допустим 300МГц.<br />
	Есть какие-то методы, чтобы повысить максимальную частоту работы такого счётчика допустим до 350МГц без смены плис?<br />
	Благодарю.
</p>
]]></description><guid isPermaLink="false">201889</guid><pubDate>Tue, 25 Mar 2025 07:55:28 +0000</pubDate></item><item><title>SPI &#x440;&#x430;&#x431;&#x43E;&#x442;&#x430;&#x435;&#x442; &#x43D;&#x435; &#x43D;&#x430; &#x432;&#x441;&#x435;&#x445; &#x443;&#x441;&#x442;&#x440;&#x43E;&#x439;&#x441;&#x442;&#x432;&#x430;&#x445;</title><link>https://electronix.ru/forum/topic/209156-spi-rabotaet-ne-na-vseh-ustroystvah/</link><description><![CDATA[<p>
	Здравствуйте, я написал протокол SPI master на systemverilog, проблема в том, что он не работает с флеш памятью <span style="color:#000000;"><span style="font-size:13.92px;"><span style="background-color:#ffffff;">S25FL512S. Я решил проверить флеш память на работоспособность и написал програмный код spi master на си на плате stm32f407, флеш память работала и отвечала, после чего я проверил код на верилоге на работоспособность, я настроил аппаратный spi slave на той же stm (работал он исправлно, я подсоеденил аппаратный spi slave к программному spi master, все работало корректно), когда я подсоеденил spi master на verilog к spi slave аппаратному на stm, то у меня все заработало. И вот сейчас я в тупике, мой код на verilog работает на stm, но не работает на флеш памяти, помогите разобратья в чем причина.<br />
	<br />
	Хотелось еще добавить, я максимально упростил код на verilog, отправляя только команду 9F, 9F это команда id, я хотел чтобы первый байт был командой, а остальные мусорными байтами, на си это сработало.</span></span></span>
</p>
<p>
<a class="ipsAttachLink" href="https://electronix.ru/forum/applications/core/interface/file/attachment.php?id=176171&amp;key=306d61f88972d80205fd136cd60a831b" data-fileExt='docx' data-fileid='176171' data-filekey='306d61f88972d80205fd136cd60a831b'>code.docx</a></p>]]></description><guid isPermaLink="false">209156</guid><pubDate>Thu, 16 Oct 2025 07:49:43 +0000</pubDate></item><item><title>desighing in vitis HLS block for writing samples into DDR</title><link>https://electronix.ru/forum/topic/208167-desighing-in-vitis-hls-block-for-writing-samples-into-ddr/</link><description><![CDATA[<p>
	 
</p>

<p>
	<span style="background-color:#e7eaef;color:#000000;font-size:12.48px;">Hello , In the attached TCL file and PDF file described block diagram in RFSOCK 4x2.</span><br style="background-color:#e7eaef;color:#000000;font-size:12.48px;" />
	<br style="background-color:#e7eaef;color:#000000;font-size:12.48px;" />
	<span style="background-color:#e7eaef;color:#000000;font-size:12.48px;">I want to create an IP block in VITIS HLS so I could import it into vivado, which writes samples into DDR so I could see the value of a 1.5GHz tone on the output.</span><br style="background-color:#e7eaef;color:#000000;font-size:12.48px;" />
	<br style="background-color:#e7eaef;color:#000000;font-size:12.48px;" />
	<span style="background-color:#e7eaef;color:#000000;font-size:12.48px;">Is there some example codes or guidelines in need to use for this purpose?</span><br style="background-color:#e7eaef;color:#000000;font-size:12.48px;" />
	<br style="background-color:#e7eaef;color:#000000;font-size:12.48px;" />
	<span style="background-color:#e7eaef;color:#000000;font-size:12.48px;">Thanks.</span>
</p>

<p>
	<a class="ipsAttachLink" data-fileid="175576" href="https://electronix.ru/forum/applications/core/interface/file/attachment.php?id=175576&amp;key=9308e65f03f70722e64f6cee8265948e" data-fileext="pdf" rel="">design_rf_18_09.pdf</a>
</p>

<p>
	<a class="ipsAttachLink" data-fileid="175575" href="https://electronix.ru/forum/applications/core/interface/file/attachment.php?id=175575&amp;key=db8cfed1e2f9815e86f0c2215eb0faa0" data-fileext="tcl" rel="">design_rf_18_09_25.tcl</a>
</p>
]]></description><guid isPermaLink="false">208167</guid><pubDate>Thu, 18 Sep 2025 02:49:38 +0000</pubDate></item><item><title>&#x412;&#x44B;&#x447;&#x438;&#x441;&#x43B;&#x435;&#x43D;&#x438;&#x435; &#x44D;&#x43A;&#x441;&#x43F;&#x43E;&#x43D;&#x435;&#x43D;&#x442;&#x44B; pipeline</title><link>https://electronix.ru/forum/topic/207838-vychislenie-eksponenty-pipeline/</link><description><![CDATA[<p>
	Всем доброго дня!<br />
	<br />
	Гуру, помогите разобраться с кодом вычисления экспоненты:
</p>

<pre class="ipsCode">
module exp_pipelined(
	input clk,
	input signed [ARG_HIGH+ ARG_LOW-1:0] ix,
	output [RES_HIGH+ RES_LOW-1:0] oexp
	);

parameter ARG_HIGH= 4;
parameter ARG_LOW= 16;
parameter ARG_GUARD= 0;

parameter RES_HIGH= 16;
parameter RES_LOW= 16;
parameter RES_GUARD= 0;

//	Внутренние константы, не переопределять.
parameter A_BITS= ARG_HIGH+ ARG_LOW+ ARG_GUARD;
parameter A_UP= A_BITS-1;

parameter R_BITS= RES_HIGH+ RES_LOW+ RES_GUARD;
parameter STEPS= RES_HIGH+ RES_LOW;
parameter R_UP= R_BITS-1;

bit [A_UP:0] x [STEPS:0];
bit [R_UP:0] bexp [STEPS:0];

assign oexp= bexp[STEPS]&gt;&gt;RES_GUARD;

`define LN2x64 (64'hB17217F7D1CF79AB)
wire signed [63:0] C_LN_10001 [63:0];	//	Ln(1+1/2^x)

always @( posedge clk ) 
begin
	integer ind;

	x[0]&lt;= ix&lt;&lt;&lt;ARG_GUARD;
	bexp[0]&lt;= 64'h1&lt;&lt;(RES_LOW+RES_GUARD);
	for (ind=0; ind&lt;ARG_HIGH; ind++ )
	begin
		if ( x[ind]&gt;(`LN2x64&gt;&gt;( 64-A_BITS+ind )) )
		begin
			x [ind+1]&lt;= x[ind] - (`LN2x64&gt;&gt;( 64-A_BITS+ind ));
			bexp[ind+1]&lt;= bexp[ind]&lt;&lt;(64'h1&lt;&lt;(ARG_HIGH-ind-1));
		end
		else
		begin
			x [ind+1]&lt;= x [ind];
			bexp[ind+1]&lt;= bexp[ind];
		end
	end
	for (ind=ARG_HIGH; ind&lt;STEPS; ind++ )
	begin
		if ( x[ind]&gt;(C_LN_10001[ind-ARG_HIGH]&gt;&gt;( 67-A_BITS )) )
		begin
			x [ind+1]&lt;= x[ind] - (C_LN_10001[ind-ARG_HIGH]&gt;&gt;( 67-A_BITS ));
			bexp[ind+1]&lt;= bexp[ind] + (bexp[ind]&gt;&gt;(ind-ARG_HIGH+1));
		end
		else
		begin
			x [ind+1]&lt;= x [ind];
			bexp[ind+1]&lt;= bexp[ind];
		end
	end
end

//	for ( i=0; i&lt;64; i++){
//		double dval= log(1+1./pow(2.,1+i)) * pow(2.,64.); //((long long)1 &lt;&lt; i);
//		unsigned long long val= i&gt;30 ? 1ull&lt;&lt;(63-i) :dval;
//		cout &lt;&lt; "assign C_LN_10001[" &lt;&lt; dec &lt;&lt; i &lt;&lt; "]= 64'h" &lt;&lt; hex &lt;&lt; val &lt;&lt; ";" &lt;&lt; endl;
//	}

assign C_LN_10001[0]= 64'h67cc8fb2fe613000;//	Точность первых понижена!
assign C_LN_10001[1]= 64'h391fef8f35344400;
assign C_LN_10001[2]= 64'h1e27076e2af2e600;
assign C_LN_10001[3]= 64'hf85186008b15300;
assign C_LN_10001[4]= 64'h7e0a6c39e0cc000;
assign C_LN_10001[5]= 64'h3f815161f807c80;
assign C_LN_10001[6]= 64'h1fe02a6b1067890;
assign C_LN_10001[7]= 64'hff805515885e00;
assign C_LN_10001[8]= 64'h7fe00aa6ac4398;
assign C_LN_10001[9]= 64'h3ff80155156220;
assign C_LN_10001[10]= 64'h1ffe002aa6ab11;
assign C_LN_10001[11]= 64'hfff8005551558;
assign C_LN_10001[12]= 64'h7ffe000aaa6aa;
assign C_LN_10001[13]= 64'h3fff800155515;
assign C_LN_10001[14]= 64'h1fffe0002aaa6;
assign C_LN_10001[15]= 64'hffff80005555;
assign C_LN_10001[16]= 64'h7fffe0000aaa;
assign C_LN_10001[17]= 64'h3ffff8000155;
assign C_LN_10001[18]= 64'h1ffffe00002a;
assign C_LN_10001[19]= 64'hfffff800005;
assign C_LN_10001[20]= 64'h7ffffe00000;
assign C_LN_10001[21]= 64'h3fffff80000;
assign C_LN_10001[22]= 64'h1fffffe0000;
assign C_LN_10001[23]= 64'hffffff8000;
assign C_LN_10001[24]= 64'h7fffffe000;
assign C_LN_10001[25]= 64'h3ffffff800;
assign C_LN_10001[26]= 64'h1ffffffe00;
assign C_LN_10001[27]= 64'hfffffff80;
assign C_LN_10001[28]= 64'h7ffffffe0;
assign C_LN_10001[29]= 64'h3fffffff8;
assign C_LN_10001[30]= 64'h1fffffffe;
assign C_LN_10001[31]= 64'h100000000;
assign C_LN_10001[32]= 64'h80000000;
assign C_LN_10001[33]= 64'h40000000;
assign C_LN_10001[34]= 64'h20000000;
assign C_LN_10001[35]= 64'h10000000;
assign C_LN_10001[36]= 64'h8000000;
assign C_LN_10001[37]= 64'h4000000;
assign C_LN_10001[38]= 64'h2000000;
assign C_LN_10001[39]= 64'h1000000;
assign C_LN_10001[40]= 64'h800000;
assign C_LN_10001[41]= 64'h400000;
assign C_LN_10001[42]= 64'h200000;
assign C_LN_10001[43]= 64'h100000;
assign C_LN_10001[44]= 64'h80000;
assign C_LN_10001[45]= 64'h40000;
assign C_LN_10001[46]= 64'h20000;
assign C_LN_10001[47]= 64'h10000;
assign C_LN_10001[48]= 64'h8000;
assign C_LN_10001[49]= 64'h4000;
assign C_LN_10001[50]= 64'h2000;
assign C_LN_10001[51]= 64'h1000;
assign C_LN_10001[52]= 64'h800;
assign C_LN_10001[53]= 64'h400;
assign C_LN_10001[54]= 64'h200;
assign C_LN_10001[55]= 64'h100;
assign C_LN_10001[56]= 64'h80;
assign C_LN_10001[57]= 64'h40;
assign C_LN_10001[58]= 64'h20;
assign C_LN_10001[59]= 64'h10;
assign C_LN_10001[60]= 64'h8;
assign C_LN_10001[61]= 64'h4;
assign C_LN_10001[62]= 64'h2;
assign C_LN_10001[63]= 64'h1;

endmodule


</pre>

<p>
	Вообще не пойму, что за алгоритм такой? На ряд Тейлора  не походит.<br />
	Походит что-то на способ вычисления e^a = e^(n*ln2)*e^x,
</p>

<p>
	где a=n*ln2+x, n=int(a/ln2), x = a%ln2
</p>

<p>
	Вот это походит на итеративное деление на ln2:
</p>

<pre class="ipsCode">    for (ind=0; ind&lt;ARG_HIGH; ind++ )
    begin
        if ( x[ind]&gt;(`LN2x64&gt;&gt;( 64-A_BITS+ind )) )
        begin
            x [ind+1]&lt;= x[ind] - (`LN2x64&gt;&gt;( 64-A_BITS+ind ));
            bexp[ind+1]&lt;= bexp[ind]&lt;&lt;(64'h1&lt;&lt;(ARG_HIGH-ind-1));
        end
        else
        begin
            x [ind+1]&lt;= x [ind];
            bexp[ind+1]&lt;= bexp[ind];
        end
    end</pre>

<p>
	А вот что второй цикл делает - вообще непонятно.
</p>

<p>
	Кто в теме, подскажите пожалуйста, как математически вообще этот способ реализован? Общая формула вычисления по этому способу какая?
</p>
]]></description><guid isPermaLink="false">207838</guid><pubDate>Wed, 10 Sep 2025 04:51:25 +0000</pubDate></item><item><title>&#x443;&#x442;&#x435;&#x447;&#x43A;&#x430; &#x43F;&#x430;&#x43C;&#x44F;&#x442;&#x438; cocotb + questa(modelsim)</title><link>https://electronix.ru/forum/topic/203444-utechka-pamyati-cocotb-questamodelsim/</link><description><![CDATA[<p>
	есть идеи как бороться с этим? подтекает оперативка со скоростью несколько мб/с, тестбенч в долгую не запустить
</p>
]]></description><guid isPermaLink="false">203444</guid><pubDate>Thu, 15 May 2025 09:22:43 +0000</pubDate></item><item><title>question regarding  manual about different block types</title><link>https://electronix.ru/forum/topic/204328-question-regarding-manual-about-different-block-types/</link><description><![CDATA[<p>
	<span style="background-color:#eae8cf;color:#1d1d1d;font-size:15px;">Hello, I want to learn about different block types in vivado fpga.</span><br style="background-color:#eae8cf;color:#1d1d1d;font-size:15px;" />
	<span style="background-color:#eae8cf;color:#1d1d1d;font-size:15px;">dma gpio dac etc.. as shown below.</span><br style="background-color:#eae8cf;color:#1d1d1d;font-size:15px;" />
	<span style="background-color:#eae8cf;color:#1d1d1d;font-size:15px;">Is the some good manual you could reccomend (video is the best)</span><br style="background-color:#eae8cf;color:#1d1d1d;font-size:15px;" />
	<span style="background-color:#eae8cf;color:#1d1d1d;font-size:15px;">where I could learn about these block in vivado how they function and how they are being implement in vivado?</span><br style="background-color:#eae8cf;color:#1d1d1d;font-size:15px;" />
	<span style="background-color:#eae8cf;color:#1d1d1d;font-size:15px;">Thanks.</span>
</p>

<p>
	<a class="ipsAttachLink ipsAttachLink_image" href="https://electronix.ru/forum/uploads/monthly_2025_06/image.png.f68452fb62cb8cb0d6b4e63f4af8ac5c.png" data-fileid="173918" data-fileext="png" rel=""><img class="ipsImage ipsImage_thumbnailed" data-fileid="173918" data-ratio="48.75" width="640" alt="image.thumb.png.5317f69ce3add7cf671c0a1e27ef41b8.png" src="https://electronix.ru/forum/uploads/monthly_2025_06/image.thumb.png.5317f69ce3add7cf671c0a1e27ef41b8.png" /></a>
</p>
]]></description><guid isPermaLink="false">204328</guid><pubDate>Mon, 09 Jun 2025 22:02:36 +0000</pubDate></item><item><title>&#x418;&#x437;&#x43C;&#x435;&#x440;&#x435;&#x43D;&#x438;&#x435; &#x432;&#x440;&#x435;&#x43C;&#x435;&#x43D;&#x43D;&#x44B;&#x445; &#x438;&#x43D;&#x442;&#x435;&#x440;&#x432;&#x430;&#x43B;&#x43E;&#x432;</title><link>https://electronix.ru/forum/topic/202811-izmerenie-vremennyh-intervalov/</link><description><![CDATA[<p>
	Добрый день!
</p>

<p>
	Не придумал как назвать тему, назвал как назвал. Вопрос (тема нониусных измерений) в следующем.
</p>

<p>
	Пусть, на одном периоде основного клока где-то появляется асинхронный имульс. Вопрос - можно ли как-то средствами плис запустить какой-нибудь периодический сигнал, скажем меандр или строб, СИНХРОННЫЙ с передним(или задним) фронтом этого асинхронного импульса? 
</p>

<p>
	Что-то ничего не придумывается, хотелось бы закрыть этот вопрос для себя, чтобы зря не ломать голову.
</p>

<p>
	Спасибо.
</p>

<p>
	 
</p>
]]></description><guid isPermaLink="false">202811</guid><pubDate>Mon, 21 Apr 2025 11:16:52 +0000</pubDate></item><item><title>&#x41C;&#x43E;&#x436;&#x43D;&#x43E; &#x43B;&#x438; &#x438;&#x433;&#x43D;&#x43E;&#x440;&#x438;&#x440;&#x43E;&#x432;&#x430;&#x442;&#x44C;: "Warning: Choice in ordinary CASE statement alternative must be locally static"?</title><link>https://electronix.ru/forum/topic/205150-mozhno-li-ignorirovat-warning-choice-in-ordinary-case-statement-alternative-must-be-locally-static/</link><description><![CDATA[<p>
	Всем привет! Наткнулся на древнюю книгу VHDL Coding Styles and Methodologies, 1995 (автор Ben Cohen).
</p>

<p>
	Внимание привлекло правило 4 из пункта 3.2.2.1, а на следующем листе пример Case_nty демонстрирует нарушение правила
</p>

<p>
	(строка "when 1 to Max_g", где Max_g - параметр, задаваемый с помощью generic).При попытке симуляции vhdl-исходника (стандарта VHDL-2008) с аналогичной конструкцией можно увидеть предупреждение типа:
</p>

<p>
	"** Warning: D:/Work/Test_project/hdl/test_reg.vhd(193): (vcom-1937) Choice in ordinary CASE statement alternative must be locally static."
</p>

<p>
	Я обычно игнорировал подобные предупреждения из соображений, что warning - это не ошибка, да и в железе вроде всегда работало)
</p>

<p>
	Теперь вопрос к гуру: а правомерно ли я поступаю? Чревато ли чем-то подобное игнорирование? Возникновением ошибок, еще какими-либо неочевидными пока проблемами и т.п.?
</p>

<p>
	Заранее всем спасибо за любые ответы по теме вопроса!
</p>

<p>
	P.S.: Да, я знаю, что VHDL уже "дедушка", который лучше не использовать) Но заимствование кода и сопровождения существующих проектов еще никто не отменял)
</p>

<p>
	P.P.S.: Бегло пробежался поиском в поисках ответа... Периодически вопрос всплывал, но не в конкретном виде. Если пропустил,  поделитесь ссылкой пожалуйста 
</p>
<p>
<a class="ipsAttachLink" href="https://electronix.ru/forum/applications/core/interface/file/attachment.php?id=174264&amp;key=5f78d478186ee4962af7abb13720e995" data-fileExt='pdf' data-fileid='174264' data-filekey='5f78d478186ee4962af7abb13720e995'>Ben Cohen - VHDL Coding Styles and Methodologies (pages).pdf</a></p>]]></description><guid isPermaLink="false">205150</guid><pubDate>Tue, 08 Jul 2025 08:25:40 +0000</pubDate></item><item><title>Altera - &#x43A;&#x43E;&#x43D;&#x432;&#x435;&#x440;&#x442;&#x430;&#x446;&#x438;&#x44F; rbj to jic</title><link>https://electronix.ru/forum/topic/203715-altera-konvertatsiya-rbj-to-jic/</link><description><![CDATA[<p>
	Привет всем, 
</p>

<p>
	Подскажите, пожалуйста, (никогда не пробовал) можно ли сконвертить сырой rbj to jic (чтобы через JTAG залить)?
</p>

<p>
	Заранее спасибо!
</p>
]]></description><guid isPermaLink="false">203715</guid><pubDate>Thu, 22 May 2025 15:51:22 +0000</pubDate></item><item><title>&#x41D;&#x443;&#x436;&#x43D;&#x43E; &#x43D;&#x430;&#x440;&#x438;&#x441;&#x43E;&#x432;&#x430;&#x442;&#x44C; &#x441;&#x445;&#x435;&#x43C;&#x443; &#x43F;&#x43E; &#x43A;&#x43E;&#x434;&#x443; verilog, &#x43F;&#x43E;&#x43C;&#x43E;&#x433;&#x438;&#x442;&#x435; &#x43F;&#x43E;&#x436;&#x430;&#x43B;&#x443;&#x439;&#x441;&#x442;&#x430;</title><link>https://electronix.ru/forum/topic/203024-nuzhno-narisovat-shemu-po-kodu-verilog-pomogite-pozhaluysta/</link><description><![CDATA[<p>
	////////////////////////////////////////////////////////////////////<br />
	//<br />
	// main_fft_twiddle_roms.v<br />
	//<br />
	//<br />
	// This file is part of the "bel_fft" project<br />
	//<br />
	// Author(s):<br />
	//     - Frank Storm (Frank.Storm@gmx.net)<br />
	//<br />
	////////////////////////////////////////////////////////////////////<br />
	//<br />
	// Copyright (C) 2010-2012 Authors<br />
	//<br />
	// This source file may be used and distributed without<br />
	// restriction provided that this copyright statement is not<br />
	// removed from the file and that any derivative work contains<br />
	// the original copyright notice and the associated disclaimer.<br />
	//<br />
	// This source file is free software; you can redistribute it<br />
	// and/or modify it under the terms of the GNU Lesser General<br />
	// Public License as published by the Free Software Foundation;<br />
	// either version 2.1 of the License, or (at your option) any<br />
	// later version.<br />
	//<br />
	// This source is distributed in the hope that it will be<br />
	// useful, but WITHOUT ANY WARRANTY; without even the implied<br />
	// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR<br />
	// PURPOSE.  See the GNU Lesser General Public License for more<br />
	// details.<br />
	//<br />
	// You should have received a copy of the GNU Lesser General<br />
	// Public License along with this source; if not, download it<br />
	// from http://www.gnu.org/licenses/lgpl.html<br />
	//<br />
	////////////////////////////////////////////////////////////////////<br />
	//<br />
	// CVS Revision History<br />
	//<br />
	// $Log$<br />
	//<br />
	////////////////////////////////////////////////////////////////////
</p>

<p>
	<br />
	`include "bel_core/bel_fft_def.v"
</p>

<p>
	<br />
	module main_fft_twiddle_roms (clk_i, rst_i, adr_i, rd_i, dat_o, cfg_sel_i);
</p>

<p>
	    parameter word_width = 16;<br />
	    parameter config_num = 1;<br />
	    parameter max_awidth = 6;
</p>

<p>
	    parameter size = 256;<br />
	    parameter awidth = 6;<br />
	    parameter file_name = "bel_rom_twiddles.dat";
</p>

<p>
	    parameter size2 = 256;<br />
	    parameter awidth2 = 6;<br />
	    parameter file_name2 = "bel_rom_twiddles2.dat";
</p>

<p>
	    parameter size3 = 256;<br />
	    parameter awidth3 = 6;<br />
	    parameter file_name3 = "bel_rom_twiddles3.dat";
</p>

<p>
	    parameter size4 = 256;<br />
	    parameter awidth4 = 6;<br />
	    parameter file_name4 = "bel_rom_twiddles4.dat";
</p>

<p>
	    input clk_i;<br />
	    input rst_i;<br />
	    input [max_awidth - 1:0] adr_i;<br />
	    input rd_i;<br />
	    output [word_width * 2 - 1:0] dat_o;<br />
	    input [config_num - 1:0] cfg_sel_i;
</p>

<p>
	    reg [word_width * 2 - 1:0] rom [0:size - 1];<br />
	    reg [awidth - 1:0] adr;<br />
	    reg [word_width * 2 - 1:0] dat_o;
</p>

<p>
	<br />
	    initial begin<br />
	        $readmemh (file_name, rom);<br />
	    end
</p>

<p>
	<br />
	    always @ (posedge rst_i or posedge clk_i) begin<br />
	        if (rst_i) begin<br />
	            adr &lt;= 0;<br />
	        end else begin<br />
	            if (rd_i) begin<br />
	                adr &lt;= adr_i;<br />
	            end<br />
	        end<br />
	    end
</p>

<p>
	<br />
	generate
</p>

<p>
	    if (config_num &gt; 1) begin<br />
	    <br />
	        reg [word_width * 2 - 1:0] rom2 [0:size2 - 1];
</p>

<p>
	        initial begin<br />
	            $readmemh (file_name2, rom2);<br />
	        end
</p>

<p>
	<br />
	        if (config_num &gt; 2) begin
</p>

<p>
	            reg [word_width * 2 - 1:0] rom3 [0:size3 - 1];
</p>

<p>
	            initial begin<br />
	                $readmemh (file_name3, rom3);<br />
	            end
</p>

<p>
	<br />
	            if (config_num &gt; 3) begin
</p>

<p>
	                reg [word_width * 2 - 1:0] rom4 [0:size4 - 1];
</p>

<p>
	                initial begin<br />
	                    $readmemh (file_name4, rom4);<br />
	                end
</p>

<p>
	                always @ (cfg_sel_i or adr) begin<br />
	                    case (cfg_sel_i)<br />
	                        4'b1000: begin<br />
	                            dat_o = rom4[adr[awidth4 - 1: 0]];<br />
	                        end<br />
	                        4'b0100: begin<br />
	                            dat_o = rom3[adr[awidth3 - 1: 0]];<br />
	                        end<br />
	                        4'b0010: begin<br />
	                            dat_o = rom2[adr[awidth2 - 1: 0]];<br />
	                        end<br />
	                        default: begin<br />
	                            dat_o = rom[adr];<br />
	                        end<br />
	                    endcase<br />
	                end
</p>

<p>
	            end else begin
</p>

<p>
	                always @ (cfg_sel_i or adr) begin<br />
	                    case (cfg_sel_i)<br />
	                        3'b100: begin<br />
	                            dat_o = rom3[adr[awidth3 - 1:0]];<br />
	                        end<br />
	                        3'b010: begin<br />
	                            dat_o = rom2[adr[awidth2 - 1:0]];<br />
	                        end<br />
	                        default: begin<br />
	                            dat_o = rom[adr[awidth - 1:0]];<br />
	                        end<br />
	                    endcase<br />
	                end
</p>

<p>
	            end
</p>

<p>
	        end else begin
</p>

<p>
	            always @ (cfg_sel_i or adr) begin<br />
	                case (cfg_sel_i)<br />
	                    2'b10: begin<br />
	                        dat_o = rom2[adr[awidth2 - 1:0]];<br />
	                    end<br />
	                    default: begin<br />
	                        dat_o = rom[adr[awidth - 1:0]];<br />
	                    end<br />
	                endcase<br />
	            end
</p>

<p>
	        end
</p>

<p>
	    end else begin
</p>

<p>
	        always @ (adr)<br />
	            dat_o = rom[adr[awidth - 1:0]];
</p>

<p>
	    end
</p>

<p>
	endgenerate
</p>

<p>
	    <br />
	endmodule
</p>
]]></description><guid isPermaLink="false">203024</guid><pubDate>Wed, 30 Apr 2025 16:54:57 +0000</pubDate></item><item><title>&#x420;&#x430;&#x437;&#x440;&#x430;&#x431;&#x43E;&#x442;&#x43A;&#x430; &#x431;&#x443;&#x444;&#x435;&#x440;&#x43D;&#x43E;&#x439; &#x43F;&#x430;&#x43C;&#x44F;&#x442;&#x438;</title><link>https://electronix.ru/forum/topic/202881-razrabotka-bufernoy-pamyati/</link><description><![CDATA[<p>
	Столкнулся с таким заданием, с verilog не особо дружу. Какие-то наброски структурной схемы имеются, но не уверен, что она правильная и она не закончена. Хотя бы начать. С полным пониманием, а тем более с написанием кода совсем беда. Решил начать со счетчика адреса и наверное управления, кода совсем пара строк.<br />
	 
</p>

<pre class="ipsCode">module counter (
	input LD,
	input [8:0] DI,
	input clk,
	input EN,
	output [8:0] data,
	output CEO);

begin
if(LD) out&lt;=DI
else out=out+1;
end</pre>

<p>
	<a class="ipsAttachLink" data-fileext="docx" data-fileid="173077" href="https://electronix.ru/forum/applications/core/interface/file/attachment.php?id=173077&amp;key=03e97b1f878ca45b69663d4c5e3c323b" rel="">задача.docx</a>
</p>

<p><a href="https://electronix.ru/forum/uploads/monthly_2025_04/IMG_0188.JPG.ee0e241fc8c1f55198762630d960da0c.JPG" class="ipsAttachLink ipsAttachLink_image" ><img data-fileid="173080" src="https://electronix.ru/forum/uploads/monthly_2025_04/IMG_0188.thumb.JPG.bb028f1de8941dbca97d139236a4a3b5.JPG" data-ratio="85.78" width="640" class="ipsImage ipsImage_thumbnailed" alt="IMG_0188.JPG"></a></p>]]></description><guid isPermaLink="false">202881</guid><pubDate>Thu, 24 Apr 2025 20:01:20 +0000</pubDate></item><item><title>&#x410;&#x434;&#x440;&#x435;&#x441;&#x430;&#x446;&#x438;&#x44F; &#x432; BRAM &#x41F;&#x41B;&#x418;&#x421;</title><link>https://electronix.ru/forum/topic/200580-adresatsiya-v-bram-plis/</link><description><![CDATA[<p>
	Здравствуйте!
</p>

<p>
	 
</p>

<p>
	Успешно записываю и считываю данные из BRAM ПЛИС, но возник вопрос с адресацией.
</p>

<p>
	BRAM настроена на ширину 32 бита.
</p>

<p>
	В процессе преобразования адреса ошибочно оказалось что мой адрес не плюсует 4 байта, то есть я записываю считываю по адресам численно отличающиеся на 1.
</p>

<p>
	В связи с этим вопрос почему при такой байтовой адресации, как я понимаю, я успешно читаю ранее записанные слова(из 4-х байт)?
</p>
]]></description><guid isPermaLink="false">200580</guid><pubDate>Sat, 22 Feb 2025 20:13:42 +0000</pubDate></item><item><title>&#x41F;&#x43E;&#x441;&#x43E;&#x432;&#x435;&#x442;&#x443;&#x439;&#x442;&#x435; - &#x43A;&#x430;&#x43A; &#x441;&#x434;&#x435;&#x43B;&#x430;&#x442;&#x44C; &#x446;&#x435;&#x43F;&#x43E;&#x447;&#x43A;&#x443; &#x438;&#x437; 2&#x445; &#x434;&#x435;&#x43B;&#x438;&#x442;&#x435;&#x43B;&#x435;&#x439; &#x43A;&#x43B;&#x43E;&#x43A;&#x430; &#x43D;&#x430; 10 &#x43D;&#x430; verilog</title><link>https://electronix.ru/forum/topic/201815-posovetuyte-kak-sdelat-tsepochku-iz-2h-deliteley-kloka-na-10-na-verilog/</link><description><![CDATA[<p>
	Приветствую!
</p>

<p>
	Посоветуйте - как сделать цепочку из 2х делителей клока 100МГц на 10 и еще раз на 10 на verilog, чтобы Quartus не жаловался на Ripple Clock и счетчики были синхронные
</p>

<p>
	Пытаюсь сделать так - но получаю ошибки тайминга.
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted"><span class="pln">reg [2:0] count_reg10M;		// 3 bit = 8   /счет до 4
reg [3:0] count_reg1M;		// 4 bit = 16  /счет до 9

always @(posedge clock_main)
	begin
		if (count_reg10M == 3'd4) // Reset counter after 5 cycles
			begin
				count_reg10M &lt;= 3'b0;
				clock_10MHz &lt;= ~clock_10MHz;
			end
		else
			count_reg10M &lt;= count_reg10M + 1'd1;
	end

	// 1MHz clock 			
always @(posedge clock_main)
	begin
		if( count_reg10M[2] )	// Если счетчик 10MHz достиг 4
			begin
				if( count_reg1M == 4'd9 )		// Деление на 10 - счетчик до 9
					begin
						count_reg1M &lt;= 4'b0;
						clock_1MHz  &lt;= ~clock_1MHz;
					end
				else
					count_reg1M &lt;= count_reg1M + 1'd1;
			end		
	end</span></pre>

<p>
	 
</p>

<p>
	<a class="ipsAttachLink ipsAttachLink_image" href="https://electronix.ru/forum/uploads/monthly_2025_03/2025-03-2217_48_36-QuartusPrimeLiteEdition-C__intelFPGA_lite_Proj_DriverCtl1_MaxV_DriverCtl1_M.png.0a35e05a1e6d3b2d2a0d4f8cff8be543.png" data-fileid="172357" data-fileext="png" rel=""><img alt="2025-03-22 17_48_36-Quartus Prime Lite Edition - C__intelFPGA_lite_Proj_DriverCtl1_MaxV_DriverCtl1_M.png" class="ipsImage ipsImage_thumbnailed" data-fileid="172357" data-ratio="16.72" width="640" src="https://electronix.ru/forum/uploads/monthly_2025_03/2025-03-2217_48_36-QuartusPrimeLiteEdition-C__intelFPGA_lite_Proj_DriverCtl1_MaxV_DriverCtl1_M.thumb.png.3263c91bd267d2157cc3ce750e262c18.png" /></a>
</p>
]]></description><guid isPermaLink="false">201815</guid><pubDate>Sat, 22 Mar 2025 14:50:01 +0000</pubDate></item><item><title>&#x41D;&#x443;&#x436;&#x43D;&#x430; &#x43F;&#x43E;&#x43C;&#x43E;&#x449;&#x44C; &#x441; SPI Mux</title><link>https://electronix.ru/forum/topic/201551-nuzhna-pomosch-s-spi-mux/</link><description><![CDATA[<p>
	Всем привет,изучаю плис в Vivado и мне дали такое задание,после симуляции видно,что данные не идут на выход,а в tcl cosole видео,что байты не правильно принимаются,помогите пожалуйста
</p>

<p>
	<br />
	 
</p>

<p>
	<span><span>1.1.<span>    </span></span></span>Мультиплексор имеет входной интерфейс и два выходных интерфейса обмена и обеспечивает приём пакета со входного интерфейса (типа ведомый) и выдачу пакета на один из выходных интерфейсов (типа ведущий) в зависимости от значения 2 байта, если считать с нуля от начала приёма пакета: если 0 – то пакет выдаётся на первый выходной интерфейс, иначе – на второй.
</p>

<p>
	<span><span>1.2.<span>    </span></span></span>Пакетом считаются данные, присутствующие на интерфейсе в момент высокого уровня сигнала <span lang="en-us" xml:lang="en-us">CS</span> интерфейса <span lang="en-us" xml:lang="en-us">SPI</span>. Сигнал <span lang="en-us" xml:lang="en-us">CS</span> должен быть заложен на всех интерфейсах модуля. Пакет не может превышать 10 байт данных.
</p>

<p>
	<span><span>1.3.<span>    </span></span></span>Модуль имеет вход сброса и вход тактовой частоты, являющейся синхронизирующим сигналом для выходных интерфейсов. Входные данные синхронны сигналу <span lang="en-us" xml:lang="en-us">SCLK</span> входного интерфейса <span lang="en-us" xml:lang="en-us">SPI</span>.<br />
	 
</p>
<p>
<a class="ipsAttachLink" href="https://electronix.ru/forum/applications/core/interface/file/attachment.php?id=172199&amp;key=580e8bc96065b66f26b89bf25ca09ef2" data-fileExt='docx' data-fileid='172199' data-filekey='580e8bc96065b66f26b89bf25ca09ef2'>код.docx</a> 
<a class="ipsAttachLink" href="https://electronix.ru/forum/applications/core/interface/file/attachment.php?id=172200&amp;key=357886c334ae77e8ea014c8c903a2594" data-fileExt='docx' data-fileid='172200' data-filekey='357886c334ae77e8ea014c8c903a2594'>тест бенч.docx</a></p>]]></description><guid isPermaLink="false">201551</guid><pubDate>Sun, 16 Mar 2025 14:40:42 +0000</pubDate></item><item><title>Little-endian &#x432; Big-endian &#x43D;&#x430; &#x43A;&#x43E;&#x43C;&#x431;&#x438;&#x43D;&#x430;&#x442;&#x43E;&#x440;&#x43D;&#x43E;&#x439; &#x43B;&#x43E;&#x433;&#x438;&#x43A;&#x435;</title><link>https://electronix.ru/forum/topic/200493-little-endian-v-big-endian-na-kombinatornoy-logike/</link><description><![CDATA[<p>
	Здравствуйте!
</p>

<p>
	Подскажите пожалуйста, как на комбинаторике на верилоге преобразовать байт little ebdian в big endian
</p>

<p>
	Спасибо!
</p>
]]></description><guid isPermaLink="false">200493</guid><pubDate>Thu, 20 Feb 2025 11:36:17 +0000</pubDate></item><item><title>core for PCI Express to I2C, SPI and UART</title><link>https://electronix.ru/forum/topic/139975-core-for-pci-express-to-i2c-spi-and-uart/</link><description><![CDATA[
<p>Всем привет, может у кого завалялось ядро PCIE в I2C, SPI или UART. Совсем замечательно, если будет еще и драйвер для хост машины к этому ядру.</p>
<p>
Мне нужно под Virtex6 и 7. </p>
<p>
Алексей.</p>
]]></description><guid isPermaLink="false">139975</guid><pubDate>Fri, 20 Jan 2017 13:44:46 +0000</pubDate></item></channel></rss>
