<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	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:media="http://search.yahoo.com/mrss/" 
	>
<channel>
	<title>
	Comments for FPGATEK	</title>
	<atom:link href="https://fpgatek.com/comments/feed/" rel="self" type="application/rss+xml" />
	<link>https://fpgatek.com</link>
	<description>Learn how to implement digital circuits with FPGA from scratch</description>
	<lastBuildDate>Sat, 20 Jun 2026 12:45:46 +0000</lastBuildDate>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0</generator>
	<item>
		<title>
		Comment on Using IP Cores in the ISE Design Suite by Ahmad Saghafi		</title>
		<link>https://fpgatek.com/course/using-ip-cores-in-the-ise-design-suite/#comments/1001500</link>

		<dc:creator><![CDATA[Ahmad Saghafi]]></dc:creator>
		<pubDate>Sat, 20 Jun 2026 12:45:46 +0000</pubDate>
		<guid isPermaLink="false">https://fpgatek.com/course/using-ip-cores-in-the-ise-design-suite/#comment-1001500</guid>

					<description><![CDATA[In reply to &lt;a href=&quot;https://fpgatek.com/course/using-ip-cores-in-the-ise-design-suite/#comments/1001488&quot;&gt;Stuart O&#039;Reilly&lt;/a&gt;.

It depends on the ISE synthesis settings. By default, ISE will generate an error in this situation because it expects multipliers to be implemented using the dedicated hardware multiplier resources available in the FPGA.

However, you can change the synthesis settings to allow the tool to implement the multipliers using LUTs and flip-flops instead. Keep in mind that this will typically consume more FPGA resources and may result in lower performance compared to using the dedicated multiplier blocks.]]></description>
			<content:encoded><![CDATA[<p>In reply to <a href="https://fpgatek.com/course/using-ip-cores-in-the-ise-design-suite/#comments/1001488">Stuart O&#8217;Reilly</a>.</p>
<p>It depends on the ISE synthesis settings. By default, ISE will generate an error in this situation because it expects multipliers to be implemented using the dedicated hardware multiplier resources available in the FPGA.</p>
<p>However, you can change the synthesis settings to allow the tool to implement the multipliers using LUTs and flip-flops instead. Keep in mind that this will typically consume more FPGA resources and may result in lower performance compared to using the dedicated multiplier blocks.</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		Comment on Counter Implementation in VHDL by Ahmad Saghafi		</title>
		<link>https://fpgatek.com/course/counter-implementation-in-vhdl/#comments/1001499</link>

		<dc:creator><![CDATA[Ahmad Saghafi]]></dc:creator>
		<pubDate>Sat, 20 Jun 2026 12:41:48 +0000</pubDate>
		<guid isPermaLink="false">https://fpgatek.com/course/counter-implementation-in-vhdl/#comment-1001499</guid>

					<description><![CDATA[In reply to &lt;a href=&quot;https://fpgatek.com/course/counter-implementation-in-vhdl/#comments/1001486&quot;&gt;Stuart O&#039;Reilly&lt;/a&gt;.

The two uses of the keyword &quot;others&quot; that you mentioned are actually two different concepts.

In a case statement, others refers to all remaining values that have not been explicitly handled. In that context, others is dealing with possible values of a signal.

However, in a statement such as:

signal Counter_Out_Int : unsigned(3 downto 0) := (others =&gt; &#039;0&#039;);

the keyword others has a different meaning. Here, it refers to all remaining elements of the vector.

Let me explain it this way. You could initialize the signal like this:

signal Counter_Out_Int : unsigned(3 downto 0) := (3 =&gt; &#039;0&#039;,  2 =&gt; &#039;1&#039;, others =&gt; &#039;0&#039;);

This means:

Counter_Out_Int(3) = &#039;0&#039;
Counter_Out_Int(2) = &#039;1&#039;
Counter_Out_Int(1) = &#039;0&#039;
Counter_Out_Int(0) = &#039;0&#039;

In other words, you explicitly assigned values to some bits, and then used others =&gt; &#039;0&#039; to assign a value to all the remaining bits.

Now, if you remove the individual bit assignments and write:

signal Counter_Out_Int : unsigned(3 downto 0) := (others =&gt; &#039;0&#039;);

then every bit in the vector is initialized to &#039;0&#039;.

So in this case, others is not referring to values and it is not referring to additional wires outside the vector. It simply means all remaining elements of the array (vector) that have not been explicitly assigned a value.

This is nothing more than a convenient way to initialize all bits of a vector to the same value, usually &#039;0&#039; or &#039;1&#039;, without having to write each bit individually.]]></description>
			<content:encoded><![CDATA[<p>In reply to <a href="https://fpgatek.com/course/counter-implementation-in-vhdl/#comments/1001486">Stuart O&#8217;Reilly</a>.</p>
<p>The two uses of the keyword &#8220;others&#8221; that you mentioned are actually two different concepts.</p>
<p>In a case statement, others refers to all remaining values that have not been explicitly handled. In that context, others is dealing with possible values of a signal.</p>
<p>However, in a statement such as:</p>
<p>signal Counter_Out_Int : unsigned(3 downto 0) := (others => &#8216;0&#8217;);</p>
<p>the keyword others has a different meaning. Here, it refers to all remaining elements of the vector.</p>
<p>Let me explain it this way. You could initialize the signal like this:</p>
<p>signal Counter_Out_Int : unsigned(3 downto 0) := (3 => &#8216;0&#8217;,  2 => &#8216;1&#8217;, others => &#8216;0&#8217;);</p>
<p>This means:</p>
<p>Counter_Out_Int(3) = &#8216;0&#8217;<br />
Counter_Out_Int(2) = &#8216;1&#8217;<br />
Counter_Out_Int(1) = &#8216;0&#8217;<br />
Counter_Out_Int(0) = &#8216;0&#8217;</p>
<p>In other words, you explicitly assigned values to some bits, and then used others => &#8216;0&#8217; to assign a value to all the remaining bits.</p>
<p>Now, if you remove the individual bit assignments and write:</p>
<p>signal Counter_Out_Int : unsigned(3 downto 0) := (others => &#8216;0&#8217;);</p>
<p>then every bit in the vector is initialized to &#8216;0&#8217;.</p>
<p>So in this case, others is not referring to values and it is not referring to additional wires outside the vector. It simply means all remaining elements of the array (vector) that have not been explicitly assigned a value.</p>
<p>This is nothing more than a convenient way to initialize all bits of a vector to the same value, usually &#8216;0&#8217; or &#8216;1&#8217;, without having to write each bit individually.</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		Comment on Counter Implementation in VHDL by Ahmad Saghafi		</title>
		<link>https://fpgatek.com/course/counter-implementation-in-vhdl/#comments/1001498</link>

		<dc:creator><![CDATA[Ahmad Saghafi]]></dc:creator>
		<pubDate>Sat, 20 Jun 2026 12:07:55 +0000</pubDate>
		<guid isPermaLink="false">https://fpgatek.com/course/counter-implementation-in-vhdl/#comment-1001498</guid>

					<description><![CDATA[In reply to &lt;a href=&quot;https://fpgatek.com/course/counter-implementation-in-vhdl/#comments/1001487&quot;&gt;Stuart O&#039;Reilly&lt;/a&gt;.

You receive the input data one bit at a time on each rising edge of the clock. Each received bit is fed into a shift register. At the same time, you compare the contents of the shift register with the desired sequence pattern.

When the contents of the shift register match the target sequence (for example, 10011), you should assert the alarm for one clock cycle.

One thing to keep in mind is that, because you are following the Standard Coding Template for FPGA, both the input and output ports are registered. This introduces one clock cycle of delay at the input and one clock cycle of delay at the output.

As a result, if you compare the actual external input signal with the actual external alarm output, you&#039;ll see a two-clock-cycle delay between the moment the complete sequence is received and the moment the alarm is asserted. This is completely normal and expected.

Also note that if, in a future project, the next stage of the design requires the input data and the alarm signal to be aligned in time, this is very easy to achieve. Since everything is synchronous, you can simply delay the input signal by two clock cycles using a pair of registers. This will align the delayed input signal with the alarm output. In FPGA design, adding or removing a few clock cycles of delay to align signals is a very common technique and is generally not considered a problem.]]></description>
			<content:encoded><![CDATA[<p>In reply to <a href="https://fpgatek.com/course/counter-implementation-in-vhdl/#comments/1001487">Stuart O&#8217;Reilly</a>.</p>
<p>You receive the input data one bit at a time on each rising edge of the clock. Each received bit is fed into a shift register. At the same time, you compare the contents of the shift register with the desired sequence pattern.</p>
<p>When the contents of the shift register match the target sequence (for example, 10011), you should assert the alarm for one clock cycle.</p>
<p>One thing to keep in mind is that, because you are following the Standard Coding Template for FPGA, both the input and output ports are registered. This introduces one clock cycle of delay at the input and one clock cycle of delay at the output.</p>
<p>As a result, if you compare the actual external input signal with the actual external alarm output, you&#8217;ll see a two-clock-cycle delay between the moment the complete sequence is received and the moment the alarm is asserted. This is completely normal and expected.</p>
<p>Also note that if, in a future project, the next stage of the design requires the input data and the alarm signal to be aligned in time, this is very easy to achieve. Since everything is synchronous, you can simply delay the input signal by two clock cycles using a pair of registers. This will align the delayed input signal with the alarm output. In FPGA design, adding or removing a few clock cycles of delay to align signals is a very common technique and is generally not considered a problem.</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		Comment on Counter Implementation in VHDL by Ahmad Saghafi		</title>
		<link>https://fpgatek.com/course/counter-implementation-in-vhdl/#comments/1001497</link>

		<dc:creator><![CDATA[Ahmad Saghafi]]></dc:creator>
		<pubDate>Sat, 20 Jun 2026 11:34:48 +0000</pubDate>
		<guid isPermaLink="false">https://fpgatek.com/course/counter-implementation-in-vhdl/#comment-1001497</guid>

					<description><![CDATA[In reply to &lt;a href=&quot;https://fpgatek.com/course/counter-implementation-in-vhdl/#comments/1001489&quot;&gt;Stuart O&#039;Reilly&lt;/a&gt;.

No, unfortunately VHDL does not allow one generic&#039;s default value to be defined using another generic in the same generic declaration list.

In practice, the second approach is the correct way to declare the generics:

generic (
    Freq    : integer := 30000000;
    Divisor: integer := 30000000
);

However, if this module is eventually instantiated as a submodule inside another VHDL file, you can achieve the same effect through generic mapping. In the instantiating module, you can define a single constant or generic and then use it to initialize both generics:

generic map (
    Freq    =&gt; SystemFreq,
    Divisor =&gt; SystemFreq
)

This way, you only need to change the value in one place, and both generics will automatically receive the same value.

You&#039;ll see examples of generic mapping later in the course, and it becomes a very useful technique for managing configuration values across larger designs.]]></description>
			<content:encoded><![CDATA[<p>In reply to <a href="https://fpgatek.com/course/counter-implementation-in-vhdl/#comments/1001489">Stuart O&#8217;Reilly</a>.</p>
<p>No, unfortunately VHDL does not allow one generic&#8217;s default value to be defined using another generic in the same generic declaration list.</p>
<p>In practice, the second approach is the correct way to declare the generics:</p>
<p>generic (<br />
    Freq    : integer := 30000000;<br />
    Divisor: integer := 30000000<br />
);</p>
<p>However, if this module is eventually instantiated as a submodule inside another VHDL file, you can achieve the same effect through generic mapping. In the instantiating module, you can define a single constant or generic and then use it to initialize both generics:</p>
<p>generic map (<br />
    Freq    => SystemFreq,<br />
    Divisor => SystemFreq<br />
)</p>
<p>This way, you only need to change the value in one place, and both generics will automatically receive the same value.</p>
<p>You&#8217;ll see examples of generic mapping later in the course, and it becomes a very useful technique for managing configuration values across larger designs.</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		Comment on Counter Implementation in VHDL by Ahmad Saghafi		</title>
		<link>https://fpgatek.com/course/counter-implementation-in-vhdl/#comments/1001494</link>

		<dc:creator><![CDATA[Ahmad Saghafi]]></dc:creator>
		<pubDate>Sat, 20 Jun 2026 07:48:55 +0000</pubDate>
		<guid isPermaLink="false">https://fpgatek.com/course/counter-implementation-in-vhdl/#comment-1001494</guid>

					<description><![CDATA[In reply to &lt;a href=&quot;https://fpgatek.com/course/counter-implementation-in-vhdl/#comments/1001490&quot;&gt;Stuart O&#039;Reilly&lt;/a&gt;.

Great questions, Stuart.

When it comes to FPGA design, we have two different hardware elements: wires and registers. In VHDL, both are typically represented using the signal keyword. The difference is not in how the signal is declared, but in how and where it is assigned.

If you assign a signal in the concurrent section of the architecture, the synthesis tool will implement that signal as a wire (combinational logic).

If you assign a signal inside a process statement and specifically under a clock condition such as:

if rising_edge(Clk) then

then the synthesis tool will implement that signal as a register.

A register is simply a collection of flip-flops that all share the same clock signal. While storage elements can also be implemented using latches, we generally avoid latches in FPGA design because they are asynchronous elements. As you&#039;ve seen throughout the course, we try to keep our designs fully synchronous whenever possible, as this results in more predictable and reliable hardware.

Regarding propagation delay, it&#039;s important to note that both wires and registers introduce delays. A wire is not instantaneous. Signals must still propagate through routing resources and combinational logic, which creates delay. Registers introduce an additional clock-to-output delay, while wires introduce routing and logic delays. These effects can be observed in timing simulations and are analyzed by the FPGA timing tools.]]></description>
			<content:encoded><![CDATA[<p>In reply to <a href="https://fpgatek.com/course/counter-implementation-in-vhdl/#comments/1001490">Stuart O&#8217;Reilly</a>.</p>
<p>Great questions, Stuart.</p>
<p>When it comes to FPGA design, we have two different hardware elements: wires and registers. In VHDL, both are typically represented using the signal keyword. The difference is not in how the signal is declared, but in how and where it is assigned.</p>
<p>If you assign a signal in the concurrent section of the architecture, the synthesis tool will implement that signal as a wire (combinational logic).</p>
<p>If you assign a signal inside a process statement and specifically under a clock condition such as:</p>
<p>if rising_edge(Clk) then</p>
<p>then the synthesis tool will implement that signal as a register.</p>
<p>A register is simply a collection of flip-flops that all share the same clock signal. While storage elements can also be implemented using latches, we generally avoid latches in FPGA design because they are asynchronous elements. As you&#8217;ve seen throughout the course, we try to keep our designs fully synchronous whenever possible, as this results in more predictable and reliable hardware.</p>
<p>Regarding propagation delay, it&#8217;s important to note that both wires and registers introduce delays. A wire is not instantaneous. Signals must still propagate through routing resources and combinational logic, which creates delay. Registers introduce an additional clock-to-output delay, while wires introduce routing and logic delays. These effects can be observed in timing simulations and are analyzed by the FPGA timing tools.</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		Comment on Counter Implementation in VHDL by Stuart O'Reilly		</title>
		<link>https://fpgatek.com/course/counter-implementation-in-vhdl/#comments/1001490</link>

		<dc:creator><![CDATA[Stuart O'Reilly]]></dc:creator>
		<pubDate>Tue, 16 Jun 2026 23:11:44 +0000</pubDate>
		<guid isPermaLink="false">https://fpgatek.com/course/counter-implementation-in-vhdl/#comment-1001490</guid>

					<description><![CDATA[Hello Ahmad,
When we talk about signals, the terms wire and register seem to be used interchangeably. But the term register (to me) implies a latch that may or may not be clock driven and introduces propagation delay where as the term wire doesn&#039;t have those attributes.
Are they different? if so, how do you choose between which one you want
If a wire is a register, how does the data get clocked into it? (or is it asynchronous?)
Thanks
Stuart]]></description>
			<content:encoded><![CDATA[<p>Hello Ahmad,<br />
When we talk about signals, the terms wire and register seem to be used interchangeably. But the term register (to me) implies a latch that may or may not be clock driven and introduces propagation delay where as the term wire doesn&#8217;t have those attributes.<br />
Are they different? if so, how do you choose between which one you want<br />
If a wire is a register, how does the data get clocked into it? (or is it asynchronous?)<br />
Thanks<br />
Stuart</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		Comment on Counter Implementation in VHDL by Stuart O'Reilly		</title>
		<link>https://fpgatek.com/course/counter-implementation-in-vhdl/#comments/1001489</link>

		<dc:creator><![CDATA[Stuart O'Reilly]]></dc:creator>
		<pubDate>Tue, 16 Jun 2026 21:55:10 +0000</pubDate>
		<guid isPermaLink="false">https://fpgatek.com/course/counter-implementation-in-vhdl/#comment-1001489</guid>

					<description><![CDATA[Hello Ahmad,
    When i program in C, if i want to define a value but use it for two different purposes, i would write something like
#define Freq  30000000
#define Divisor   Freq
That way it describes what the value is being used for BUT I only need to change it in one spot (less error prone)
I tried to do something similar in my vhdl file
	generic	(
					Freq  	: integer	:=	30000000;
					Divisor	: integer	:=	Freq
				);
and an error gets raised.
I can do the following to get it to work
	generic	(
					Freq  	: integer	:=	30000000;
					Divisor	: integer	:=	30000000;
				);
But it means i need to change the value in two places.
Is there a way to achieve the equivalent of 
	generic	(
					Freq  	: integer	:=	30000000;
					Divisor	: integer	:=	Freq
				); 
Thanks
Stuart]]></description>
			<content:encoded><![CDATA[<p>Hello Ahmad,<br />
    When i program in C, if i want to define a value but use it for two different purposes, i would write something like<br />
#define Freq  30000000<br />
#define Divisor   Freq<br />
That way it describes what the value is being used for BUT I only need to change it in one spot (less error prone)<br />
I tried to do something similar in my vhdl file<br />
	generic	(<br />
					Freq  	: integer	:=	30000000;<br />
					Divisor	: integer	:=	Freq<br />
				);<br />
and an error gets raised.<br />
I can do the following to get it to work<br />
	generic	(<br />
					Freq  	: integer	:=	30000000;<br />
					Divisor	: integer	:=	30000000;<br />
				);<br />
But it means i need to change the value in two places.<br />
Is there a way to achieve the equivalent of<br />
	generic	(<br />
					Freq  	: integer	:=	30000000;<br />
					Divisor	: integer	:=	Freq<br />
				);<br />
Thanks<br />
Stuart</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		Comment on Using IP Cores in the ISE Design Suite by Stuart O'Reilly		</title>
		<link>https://fpgatek.com/course/using-ip-cores-in-the-ise-design-suite/#comments/1001488</link>

		<dc:creator><![CDATA[Stuart O'Reilly]]></dc:creator>
		<pubDate>Mon, 15 Jun 2026 08:47:41 +0000</pubDate>
		<guid isPermaLink="false">https://fpgatek.com/course/using-ip-cores-in-the-ise-design-suite/#comment-1001488</guid>

					<description><![CDATA[if we were to implement too many multiplications so that we ran out of dsp blocks. Would ISE just start implementing them in fabric for the remaining ones?]]></description>
			<content:encoded><![CDATA[<p>if we were to implement too many multiplications so that we ran out of dsp blocks. Would ISE just start implementing them in fabric for the remaining ones?</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		Comment on Counter Implementation in VHDL by Stuart O'Reilly		</title>
		<link>https://fpgatek.com/course/counter-implementation-in-vhdl/#comments/1001487</link>

		<dc:creator><![CDATA[Stuart O'Reilly]]></dc:creator>
		<pubDate>Mon, 15 Jun 2026 07:28:15 +0000</pubDate>
		<guid isPermaLink="false">https://fpgatek.com/course/counter-implementation-in-vhdl/#comment-1001487</guid>

					<description><![CDATA[With regard to exercise 1, The sequence detector.
Does the alarm output need to be aligned with the presence of the &quot;10011&quot; pattern or can it be offset by 1/2 or 1 clock cycle?
The reason i ask is because when i am comparing the shifted value to the pattern, the shifted value that i am comparing to would be (from my understanding) pre-shift value.]]></description>
			<content:encoded><![CDATA[<p>With regard to exercise 1, The sequence detector.<br />
Does the alarm output need to be aligned with the presence of the &#8220;10011&#8221; pattern or can it be offset by 1/2 or 1 clock cycle?<br />
The reason i ask is because when i am comparing the shifted value to the pattern, the shifted value that i am comparing to would be (from my understanding) pre-shift value.</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		Comment on Counter Implementation in VHDL by Stuart O'Reilly		</title>
		<link>https://fpgatek.com/course/counter-implementation-in-vhdl/#comments/1001486</link>

		<dc:creator><![CDATA[Stuart O'Reilly]]></dc:creator>
		<pubDate>Mon, 15 Jun 2026 06:53:02 +0000</pubDate>
		<guid isPermaLink="false">https://fpgatek.com/course/counter-implementation-in-vhdl/#comment-1001486</guid>

					<description><![CDATA[Hello, 
When we use the term &quot;others&quot; at the end of a case or an if/elsif statement, we are saying, any other value not matched, deal with it here.
But
With the following line
signal Counter_Out_Int  : unsigned (3 downto 0)  := (others=&#062;&#039;0&#039;);
to paraphrase, its saying Counter_Out_Int will consist of 4 bits (3 downto 0) and any other connections should be treated as &#039;0&#039;.
So in this instance, &quot;others&quot; is refering to wires rather than values?
What other wires would there be?
Cheers
Stuart]]></description>
			<content:encoded><![CDATA[<p>Hello,<br />
When we use the term &#8220;others&#8221; at the end of a case or an if/elsif statement, we are saying, any other value not matched, deal with it here.<br />
But<br />
With the following line<br />
signal Counter_Out_Int  : unsigned (3 downto 0)  := (others=&gt;&#8217;0&#8242;);<br />
to paraphrase, its saying Counter_Out_Int will consist of 4 bits (3 downto 0) and any other connections should be treated as &#8216;0&#8217;.<br />
So in this instance, &#8220;others&#8221; is refering to wires rather than values?<br />
What other wires would there be?<br />
Cheers<br />
Stuart</p>
]]></content:encoded>
		
			</item>
	</channel>
</rss>

<!--
Performance optimized by W3 Total Cache. Learn more: https://www.boldgrid.com/w3-total-cache/?utm_source=w3tc&utm_medium=footer_comment&utm_campaign=free_plugin

Page Caching using Disk: Enhanced 

Served from: fpgatek.com @ 2026-06-21 02:47:56 by W3 Total Cache
-->