<?xml-stylesheet type="text/xsl" href="https://community.element14.com/cfs-file/__key/system/syndication/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Blog - All Comments</title><link>/technologies/fpga-group/b/blog</link><description /><dc:language>en-US</dc:language><generator>Telligent Community 12</generator><item><title>RE: Lattice iCE40UP5K-EVB Evaluation Board - Part 2: Using the DSP Multiplier</title><link>https://community.element14.com/technologies/fpga-group/b/blog/posts/lattice-ice40up5k-evb-evaluation-board---part-2-using-the-dsp-multiplier</link><pubDate>Sun, 19 Apr 2026 14:22:46 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:945974a6-316c-47b3-b406-1c55ba707e6b</guid><dc:creator>jc2048</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;I mentioned in the blog that what I was generating with my simple, single multiply of two signed quantities wasn&amp;#39;t straight amplitude modulation, but rather double-sideband, suppressed-carrier. Here I&amp;#39;ve reworked the VHDL to give some actual AM. This multiplies the envelope by 0.3, adds 0.5 to make it purely positive, and then multiplies it with the carrier.&lt;/p&gt;
&lt;p&gt;&lt;img alt=" " src="/resized-image/__size/1280x720/__key/commentfiles/f7d226abd59f475c9d224a79e3f0ec07-945974a6-316c-47b3-b406-1c55ba707e6b/TEK00038.PNG" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=" " src="/resized-image/__size/1280x720/__key/commentfiles/f7d226abd59f475c9d224a79e3f0ec07-945974a6-316c-47b3-b406-1c55ba707e6b/TEK00039.PNG" /&gt;&lt;br /&gt;You can see now, from the FFT, that there&amp;#39;s a carrier (7kHz) and two sidebands, each spaced 440Hz away from the carrier.&lt;/p&gt;
&lt;p&gt;Here&amp;#39;s the VHDL&lt;/p&gt;
&lt;p&gt;[embed:dc8ab71f-3b98-42d9-b0f6-e21e02a0f8e2:e3e1f98d-2832-4b43-ae64-c4db32993e89:type=text&amp;text=----------------------------------------------------------------------%0D%0A--%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2A%2A%2A%2A%2A%20ice40up5k_evn_test_mult.vhd%20%2A%2A%2A%2A%2A%20%20%20%20%20%20%20%20%20%20%20%20%20--%0D%0A--%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20--%0D%0A--%20Lattice%20ICE40UP5K%20evaluation%20board%20multiplier%20test.%20%20%20%20%20%20%20%20%20%20%20%20%20%20--%0D%0A--%20Generates%20fixed%20pair%20of%20CORDIC%2016-bit%20sine%20waves%2C%20multiplies%20them--%20%0D%0A--%20and%20formats%20result%20for%20an%20S%2FPDIF%20serial%20optical%20link.%20%20%20%20%20%20%20%20%20%20%20%20--%0D%0A--%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20--%0D%0A----------------------------------------------------------------------%0D%0A--%20%28C%292026%20Jon%20Clift%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20--%0D%0A--%20Free%20to%20use%20however%20you%20want.%20No%20warranty%20as%20to%20correctness.%20%20%20%20%20--%0D%0A--%20No%20guarantee%20of%20fitness%20for%20any%20purpose.%20No%20obligation%20to%20support--%0D%0A----------------------------------------------------------------------%0D%0A--%20Rev%20%20%20%20Date%20%20%20%20%20%20%20%20%20Comments%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20--%0D%0A--%2001%20%20%20%20%2025-Mar-2026%20%20based%20on%20ice40up5k_evn_test.vhd%20%20%20%20%20%20%20%20%20%20%20%20%20%20--%0D%0A--%2002%20%20%20%20%2012-Apr-2026%20%20hacked%20to%20give%20amplitude%20modulation%20%20%20%20%20%20%20%20%20%20--%0D%0A----------------------------------------------------------------------%0D%0A%0D%0Alibrary%20ieee%3B%20%0D%0Ause%20ieee.std_logic_1164.all%3B%0D%0Ause%20ieee.numeric_std.all%3B%0D%0Ause%20ieee.math_real.all%3B%0D%0A%0D%0Aentity%20ice40up5k_evn_test%20is%20port%28%0D%0A%20%20%20%20clk_12%3A%20%20%20%20%20%20%20%20%20%20%20%20in%20STD_LOGIC%3B%20%20%20%20%20%20%20%20%20%20---%20system%20clock%20in%20%28from%2012MHz%20oscillator%29%0D%0A%20%20%20%20clk_12_288%3A%20%20%20%20%20%20%20%20in%20STD_LOGIC%3B%20%20%20%20%20%20%20%20%20%20---%20clock%20in%20%28from%20my%2012.288MHz%20oscillator%29%0D%0A%20%20%20%20tp1%3A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20out%20STD_LOGIC%3B%20%20%20%20%20%20%20%20---%20scope%20trigger%20at%20start%20of%20frame%0D%0A%20%20%20%20spdif_out%3A%20%20%20%20%20%20%20%20%20out%20STD_LOGIC%29%3B%20%20%20%20%20%20%20%20---%20s%2Fpdif%20data%20stream%20%28to%20optical%20tx%29%0D%0Aend%20ice40up5k_evn_test%3B%0D%0A%0D%0Aarchitecture%20arch_ice40up5k_evn_test%20of%20ice40up5k_evn_test%20is%0D%0A%0D%0Aconstant%20sig_resol%3A%20POSITIVE%20%3A%3D%2016%3B%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20---%20signal%20resolution%20%28bits%29%0D%0Aconstant%20pha_resol%3A%20POSITIVE%20%3A%3D%2032%3B%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20---%20phase%20resolution%20%28bits%29%0D%0Asignal%20theta%3A%20SIGNED%28pha_resol-1%20downto%200%29%3B%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20---%20phase%20accumulator%0D%0Asignal%20theta_left%3A%20SIGNED%28pha_resol-1%20downto%200%29%3B%20%20%20%20%20%20%20%20%20%20%20---%20left%20phase%20accumulator%0D%0Asignal%20theta_right%3A%20SIGNED%28pha_resol-1%20downto%200%29%3B%20%20%20%20%20%20%20%20%20%20---%20right%20phase%20accumulator%0D%0Asignal%20phase_increment_left%3A%20SIGNED%28pha_resol-1%20downto%200%29%3B%20---%20left%20phase%20increment%0D%0Asignal%20phase_increment_right%3A%20SIGNED%28pha_resol-1%20downto%200%29%3B%20---%20right%20phase%20increment%0D%0Asignal%20sine%3A%20SIGNED%28sig_resol-1%20downto%200%29%3B%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20---%20CORDIC%20generated%20sine%0D%0Asignal%20cosine%3A%20SIGNED%28sig_resol-1%20downto%200%29%3B%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20---%20CORDIC%20generaated%20cosine%0D%0Asignal%20sample_left%3A%20SIGNED%2815%20downto%200%29%3B%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20---%20left%20sample%0D%0Asignal%20sample_right%3A%20SIGNED%2815%20downto%200%29%3B%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20---%20right%20sample%0D%0Asignal%20sample_2%3A%20SIGNED%2815%20downto%200%29%3B%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20---%20right%20sample%0D%0Asignal%20temp%3A%20SIGNED%2831%20downto%200%29%3B%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20---%20%0D%0Asignal%20temp2%3A%20SIGNED%2831%20downto%200%29%3B%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20---%20%0D%0Asignal%20mult_result%3A%20SIGNED%2831%20downto%200%29%3B%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20---%20%0D%0Asignal%20sample_temp%3A%20SIGNED%2815%20downto%200%29%3B%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20---%20%0D%0Asignal%20delay_i%3A%20STD_LOGIC%3B%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20---%0D%0Asignal%20delay_o%3A%20STD_LOGIC%3B%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20---%20%0D%0Asignal%20delay_o_1%3A%20STD_LOGIC%3B%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20---%20%0D%0Asignal%20delay_o_2%3A%20STD_LOGIC%3B%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20---%20%0D%0Asignal%20delay_o_3%3A%20STD_LOGIC%3B%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20---%20%0D%0Asignal%20spdif_clk_en%3A%20STD_LOGIC%3B%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20---%20%0D%0Asignal%20spdif_sample_en%3A%20STD_LOGIC%3B%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20---%20%0D%0Asignal%20sample_en_del1%3A%20STD_LOGIC%3B%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20---%20%0D%0Asignal%20sample_en_del2%3A%20STD_LOGIC%3B%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20---%20%0D%0Asignal%20prescale_count%3A%20UNSIGNED%281%20downto%200%29%3B%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20---%20%0D%0A%0D%0A---%20declare%20the%20s%2Fpdif%20output%20component%0D%0A%0D%0Acomponent%20spdif_out_component%20is%0D%0A%20%20%20%20generic%28%0D%0A%20%20%20%20%20%20%20%20in_res%3A%20POSITIVE%29%3B%20%20%20%20%20%20%20%20%20%20%20---%20audio%20sample%20resolution%0D%0A%20%20%20%20port%20%28%0D%0A%20%20%20%20%20%20%20%20clk_in%3A%20in%20STD_LOGIC%3B%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20---%20clock%0D%0A%20%20%20%20%20%20%20%20clk_en%3A%20in%20STD_LOGIC%3B%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20---%20clock%20enable%0D%0A%20%20%20%20%20%20%20%20l_data%3A%20in%20SIGNED%28in_res-1%20downto%200%29%3B%20%20%20%20%20%20%20%20%20%20%20---%20left%20audio%20data%20in%0D%0A%20%20%20%20%20%20%20%20r_data%3A%20in%20SIGNED%28in_res-1%20downto%200%29%3B%20%20%20%20%20%20%20%20%20%20%20---%20right%20audio%20data%20in%0D%0A%20%20%20%20%20%20%20%20next_sample_en%3A%20out%20STD_LOGIC%3B%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20---%20trigger%20sample%20update%0D%0A%20%20%20%20%20%20%20%20spdif_data_out%3A%20out%20STD_LOGIC%29%3B%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20---%20output%20bitstream%0D%0Aend%20component%3B%0D%0A%0D%0A---%20declare%20the%20CORDIC%20component%0D%0A%0D%0Acomponent%20cordic%20is%0D%0A%20%20%20%20generic%28%0D%0A%20%20%20%20%20%20%20%20input_resol%3A%20POSITIVE%3B%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20---%20input%20resolution%0D%0A%20%20%20%20%20%20%20%20output_resol%3A%20POSITIVE%29%3B%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20---%20output%20resolution%0D%0A%20%20%20%20port%28%0D%0A%20%20%20%20%20%20%20%20clk_in%3A%20in%20STD_LOGIC%3B%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20---%20clock%20in%0D%0A%20%20%20%20%20%20%20%20delay_in%3A%20in%20STD_LOGIC%3B%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20---%20delay%20in%0D%0A%20%20%20%20%20%20%20%20delay_out%3A%20out%20STD_LOGIC%3B%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20---%20delay%20out%0D%0A%20%20%20%20%20%20%20%20theta%3A%20in%20SIGNED%28pha_resol-1%20downto%200%29%3B%20%20%20%20---%20phase%20in%0D%0A%20%20%20%20%20%20%20%20sine%3A%20out%20SIGNED%28sig_resol-1%20downto%200%29%3B%20%20%20%20---%20sine%20out%0D%0A%20%20%20%20%20%20%20%20cosine%3A%20out%20SIGNED%28sig_resol-1%20downto%200%29%29%3B%20---%20cosine%20out%0D%0Aend%20component%3B%0D%0A%0D%0Abegin%0D%0A%0D%0A%20%20%20%20---%20main%20process%0D%0A%20%20%20%20---%20runs%20two%20phase%20accumulators%20%28440Hz%20envelope%20and%207kHz%20carrier%29%0D%0A%20%20%20%20---%20CORDIC%20component%20calculates%20sine%20of%20each%0D%0A%09---%20first%20multiplier%20used%20to%20scale%20envelope%20%28to%20give%20lesss%20than%20100%25%20mod%29%2C%20and%20offset%20then%20added%20so%20that%20it%27s%20only%20positive%0D%0A%09---%20second%20multiplier%20then%20multiplies%20new%20envelope%20and%20carrier%20to%20generate%20amplitude%20modulation%0D%0A%20%20%20%20---%20result%20and%20envelope%20handed%20to%20spdif%20component%20for%20output%20formatting%0D%0A%09---%20%28putting%20envelope%20on%20other%20channel%20gives%20scope%20something%20sensible%20to%20trigger%20on%29%0D%0A%0D%0A%20%20%20%20evb_test_stuff%3A%20process%20%28clk_12_288%29%20is%0D%0A%20%20%20%20begin%0D%0A%0D%0A%20%20%20%20%20%20%20%20if%20%28clk_12_288%27event%20and%20clk_12_288%20%3D%20%271%27%29%20then%0D%0A%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20---%20divide%20clock%20by%202%20to%20run%20SPDIF%20at%206.144MHz%20for%2048ksps%0D%0A%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20if%28spdif_clk_en%20%3D%20%270%27%29%20then%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20spdif_clk_en%20%3C%3D%20%271%27%3B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20else%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20spdif_clk_en%20%3C%3D%20%270%27%3B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20end%20if%3B%0D%0A%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20%28spdif_sample_en%20%3D%20%271%27%29%20then%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20theta_left%20%3C%3D%20theta_left%20%2B%20phase_increment_left%3B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20theta_right%20%3C%3D%20theta_right%20%2B%20phase_increment_right%3B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20end%20if%3B%0D%0A%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20sample_en_del1%20%3C%3D%20spdif_sample_en%3B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20sample_en_del2%20%3C%3D%20sample_en_del1%3B%0D%0A%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20%28spdif_sample_en%20%3D%20%271%27%29%20then%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20delay_i%20%3C%3D%20%271%27%3B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20elsif%28sample_en_del2%20%3D%20%271%27%29%20then%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20delay_i%20%3C%3D%20%270%27%3B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20end%20if%3B%0D%0A%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20%28sample_en_del1%20%3D%20%271%27%29%20then%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20theta%20%3C%3D%20theta_right%3B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20else%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20theta%20%3C%3D%20theta_left%3B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20end%20if%3B%0D%0A%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20delay_o_1%20%3C%3D%20delay_o%3B%0D%0A%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20%28delay_o%20%3D%20%271%27%20and%20delay_o_1%20%3D%20%270%27%29%20then%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20sample_left%20%3C%3D%20sine%3B%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20---%20put%20the%20envelope%20sine%20on%20one%20output%20for%20the%20scope%20to%20trigger%20on%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20temp%20%3C%3D%20sine%20%2A%20to_signed%289830%2C16%29%3B%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20---%20x%200.3%20the%20envelope%20to%20reduce%20mod%20depth%0D%0A%09%09%09%09sample_temp%20%3C%3D%20temp%2831%20downto%2016%29%3B%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20---%20because%20output%20of%20multiplier%20was%2032%20bits%20and%20we%20want%20the%20higher%2016%20bits%0D%0A%09%09%09%09delay_o_2%20%3C%3D%20%271%27%3B%0D%0A%09%09%09else%0D%0A%09%09%09%09delay_o_2%20%3C%3D%20%270%27%3B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20end%20if%3B%0D%0A%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20%28delay_o_2%20%3D%20%271%27%29%20then%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20sample_2%20%3C%3D%20sine%3B%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20---%20pick%20up%20the%20carrier%20sine%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20sample_temp%20%3C%3D%20sample_temp%20%2B%20to_signed%2816384%2C16%29%3B%20%20%20---%20lift%20envelope%20by%20adding%20%2B0.5%20offset%2C%20so%20envelope%20is%20now%20all%20positive%0D%0A%09%09%09%09delay_o_3%20%3C%3D%20%271%27%3B%0D%0A%09%09%09else%0D%0A%09%09%09%09delay_o_3%20%3C%3D%20%270%27%3B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20end%20if%3B%0D%0A%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20%28delay_o_3%20%3D%20%271%27%29%20then%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20temp2%20%3C%3D%20sample_temp%20%2A%20sample_2%3B%20%20%20%20%20%20%20%20%20%20---%20multiply%20by%20the%20carrier%20to%20give%20the%20AM%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20sample_right%20%3C%3D%20temp2%2831%20downto%2016%29%3B%20%20%20%20%20%20%20---%20again%2C%20adjust%20multiplier%20output%20back%20to%2016%20bits%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20end%20if%3B%0D%0A%0D%0A%20%20%20%20%20%20%20%20end%20if%3B%0D%0A%0D%0A%20%20%20%20%20%20%20%20phase_increment_left%2831%20downto%200%29%20%3C%3D%20b%220000_0010_0101_1000_1011_1111_0010_0110%22%3B%20%20%20%20---%20440Hz%20%0D%0A%20%20%20%20%20%20%20%20phase_increment_right%2831%20downto%200%29%20%3C%3D%20b%220010_0101_1000_1100_0001_0001_0100_1100%22%3B%20%20%20---%207040.1Hz%0D%0A%0D%0A%0D%0A%20%20%20%20end%20process%20evb_test_stuff%3B%0D%0A%0D%0A%20%20%20%20---%20instantiate%20and%20connect%20the%20spdif%20output%20component%0D%0A%09%09%0D%0A%20%20%20%20spdif_1%3A%20component%20spdif_out_component%0D%0A%20%20%20%20%20%20%20%20generic%20map%28%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20in_res%20%3D%3E%20sig_resol%29%20%20---%20audio%20sample%20resolution%0D%0A%20%20%20%20%20%20%20%20port%20map%28%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20clk_in%20%3D%3E%20clk_12_288%2C%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20clk_en%20%3D%3E%20spdif_clk_en%2C%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20l_data%20%3D%3E%20sample_left%2C%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20r_data%20%3D%3E%20sample_right%2C%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20next_sample_en%20%3D%3E%20spdif_sample_en%2C%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20spdif_data_out%20%3D%3E%20spdif_out%29%3B%0D%0A%0D%0A%20%20%20%20---%20instantiate%20and%20connect%20the%20CORDIC%20component%0D%0A%0D%0A%20%20%20%20cordic_1%3A%20component%20cordic%0D%0A%20%20%20%20%20%20%20%20generic%20map%28%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20input_resol%20%3D%3E%20pha_resol%2C%20%20---%20input%20resolution%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20output_resol%20%3D%3E%20sig_resol%29%20---%20output%20resolution%0D%0A%20%20%20%20%20%20%20%20port%20map%28%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20clk_in%20%3D%3E%20clk_12_288%2C%20%20%20%20%20%20---%20clock%20in%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20delay_in%20%3D%3E%20delay_i%2C%20%20%20%20%20%20%20---%20delay%20in%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20delay_out%20%3D%3E%20delay_o%2C%20%20%20%20%20%20---%20delay%20out%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20theta%20%3D%3E%20theta%2C%20%20%20%20%20%20%20%20%20%20%20%20---%20phase%20in%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20sine%20%3D%3E%20sine%2C%20%20%20%20%20%20%20%20%20%20%20%20%20%20---%20sine%20out%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20cosine%20%3D%3E%20cosine%29%3B%20%20%20%20%20%20%20%20%20---%20cosine%20out%0D%0A%09%09%09%0D%0A%20%20%20%20tp1%20%3C%3D%20spdif_sample_en%3B%20%0D%0A%0D%0Aend%20arch_ice40up5k_evn_test%3B%20%0D%0A]&lt;/p&gt;&lt;img src="https://community.element14.com/aggbug?PostID=29632&amp;AppID=19&amp;AppType=Weblog&amp;ContentType=0" width="1" height="1"&gt;</description></item><item><title>RE: The Art of FPGA Design Season 2 Post 21</title><link>https://community.element14.com/technologies/fpga-group/b/blog/posts/the-art-of-fpga-design-season-2-post-21</link><pubDate>Sun, 19 Apr 2026 13:31:53 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:2d5eb677-aff9-421d-a574-6bd0209ae0d3</guid><dc:creator>fpgaguru</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;An errata for the stability condition for the second order all pass section with transfer function H(z)=(c2+c1*z^-1+z^-2)/(1+c1*z^-1+c2*z^-2), the two conditions are abs(c2)&amp;lt;1 and abs(c1)&amp;lt;1+c2, not abs(c1)&amp;lt;1 as stated in the post.&amp;nbsp;&lt;/p&gt;&lt;img src="https://community.element14.com/aggbug?PostID=29098&amp;AppID=19&amp;AppType=Weblog&amp;ContentType=0" width="1" height="1"&gt;</description></item><item><title>RE: Lattice iCE40UP5K-EVB Evaluation Board - Part 2: Using the DSP Multiplier</title><link>https://community.element14.com/technologies/fpga-group/b/blog/posts/lattice-ice40up5k-evb-evaluation-board---part-2-using-the-dsp-multiplier</link><pubDate>Mon, 30 Mar 2026 12:13:38 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:945974a6-316c-47b3-b406-1c55ba707e6b</guid><dc:creator>shabaz</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Nice work! And that looks like a great dev board for experimenting/learning.&lt;/p&gt;&lt;img src="https://community.element14.com/aggbug?PostID=29632&amp;AppID=19&amp;AppType=Weblog&amp;ContentType=0" width="1" height="1"&gt;</description></item><item><title>RE: Lattice iCE40UP5K-EVB Evaluation Board - Part 2: Using the DSP Multiplier</title><link>https://community.element14.com/technologies/fpga-group/b/blog/posts/lattice-ice40up5k-evb-evaluation-board---part-2-using-the-dsp-multiplier</link><pubDate>Mon, 30 Mar 2026 11:40:24 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:945974a6-316c-47b3-b406-1c55ba707e6b</guid><dc:creator>Jan Cumps</dc:creator><slash:comments>1</slash:comments><description>&lt;p&gt;Where do you define that it uses the DSP IP block?&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;note to self: It&amp;#39;s been too long since I last used VHDL, and I&amp;#39;m losing the knowledge fast.&lt;/em&gt;&lt;/p&gt;&lt;img src="https://community.element14.com/aggbug?PostID=29632&amp;AppID=19&amp;AppType=Weblog&amp;ContentType=0" width="1" height="1"&gt;</description></item><item><title>RE: Lattice iCE40UP5K-EVB Evaluation Board Outputing Audio Sine Waves Over an Optical S/PDIF Interface</title><link>https://community.element14.com/technologies/fpga-group/b/blog/posts/lattice-ice40up5k-evb-evaluation-board-outputing-audio-sine-waves-over-an-optical-s-pdif-interface</link><pubDate>Sun, 22 Mar 2026 23:31:03 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:5106f1ec-c028-4e57-8089-cef080f64d4b</guid><dc:creator>kmikemoo</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Very cool.&amp;nbsp; Glad that you got to use your Lattice Eval Board.&amp;nbsp; It&amp;#39;s always good to finally get to those things that have been on the Project List for a while.&lt;/p&gt;&lt;img src="https://community.element14.com/aggbug?PostID=29598&amp;AppID=19&amp;AppType=Weblog&amp;ContentType=0" width="1" height="1"&gt;</description></item><item><title>RE: Lattice iCE40UP5K-EVB Evaluation Board Outputing Audio Sine Waves Over an Optical S/PDIF Interface</title><link>https://community.element14.com/technologies/fpga-group/b/blog/posts/lattice-ice40up5k-evb-evaluation-board-outputing-audio-sine-waves-over-an-optical-s-pdif-interface</link><pubDate>Sat, 21 Mar 2026 20:33:59 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:5106f1ec-c028-4e57-8089-cef080f64d4b</guid><dc:creator>DAB</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Nice post.&lt;/p&gt;&lt;img src="https://community.element14.com/aggbug?PostID=29598&amp;AppID=19&amp;AppType=Weblog&amp;ContentType=0" width="1" height="1"&gt;</description></item><item><title>RE: Fast VHDL CORDIC Sine and Cosine Component on Lattice XP2 Device Using Diamond 3.12 Part 2</title><link>https://community.element14.com/technologies/fpga-group/b/blog/posts/fast-vhdl-cordic-sine-and-cosine-component-on-lattice-xp2-device-using-diamond-3-12-part-2</link><pubDate>Wed, 18 Feb 2026 16:04:42 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:9a8d0b3f-5d30-44fa-a128-53cc8958eeea</guid><dc:creator>scottiebabe</dc:creator><slash:comments>1</slash:comments><description>&lt;p&gt;Very neat, I am experimenting with running an sdr on a pico and eventually will have to pick a fast atan2 approximation&lt;/p&gt;&lt;img src="https://community.element14.com/aggbug?PostID=29528&amp;AppID=19&amp;AppType=Weblog&amp;ContentType=0" width="1" height="1"&gt;</description></item><item><title>RE: Fast VHDL CORDIC Sine and Cosine Component on Lattice XP2 Device Using Diamond 3.12 Part 2</title><link>https://community.element14.com/technologies/fpga-group/b/blog/posts/fast-vhdl-cordic-sine-and-cosine-component-on-lattice-xp2-device-using-diamond-3-12-part-2</link><pubDate>Tue, 17 Feb 2026 20:32:17 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:9a8d0b3f-5d30-44fa-a128-53cc8958eeea</guid><dc:creator>DAB</dc:creator><slash:comments>1</slash:comments><description>&lt;p&gt;Nice update.&lt;/p&gt;&lt;img src="https://community.element14.com/aggbug?PostID=29528&amp;AppID=19&amp;AppType=Weblog&amp;ContentType=0" width="1" height="1"&gt;</description></item><item><title>RE: Fast VHDL CORDIC Sine and Cosine Component on Lattice XP2 Device Using Diamond 3.12 Part 2</title><link>https://community.element14.com/technologies/fpga-group/b/blog/posts/fast-vhdl-cordic-sine-and-cosine-component-on-lattice-xp2-device-using-diamond-3-12-part-2</link><pubDate>Tue, 17 Feb 2026 10:23:13 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:9a8d0b3f-5d30-44fa-a128-53cc8958eeea</guid><dc:creator>michaelkellett</dc:creator><slash:comments>1</slash:comments><description>&lt;p&gt;Nice to see an FPGA project at the register level in VHDL.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Good luck with the iCE40 - its a useful part&amp;nbsp; - (I just did a customer design on one recently) but pretty weedy by modern FPGA standards.&lt;/p&gt;
&lt;p&gt;On the other hand they are cheap, available in 48 pin QFN packages and use almost no power.&lt;/p&gt;
&lt;p&gt;MK&lt;/p&gt;&lt;img src="https://community.element14.com/aggbug?PostID=29528&amp;AppID=19&amp;AppType=Weblog&amp;ContentType=0" width="1" height="1"&gt;</description></item><item><title>RE: FPGA and DSP ep. 4: Polyphase Filters</title><link>https://community.element14.com/technologies/fpga-group/b/blog/posts/fpga-and-dsp-ep-4-polyphase-filters</link><pubDate>Sat, 08 Nov 2025 23:51:00 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:9119dc86-66c9-4ccb-a297-58ba10ccd53a</guid><dc:creator>Stuart_S</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;There&amp;#39;s a link to a nice VHDL resource in the tubes.&lt;/p&gt;&lt;img src="https://community.element14.com/aggbug?PostID=25946&amp;AppID=19&amp;AppType=Weblog&amp;ContentType=0" width="1" height="1"&gt;</description></item><item><title>RE: Booting ZUB1CG with AES-ACC-DPEMMC-G</title><link>https://community.element14.com/technologies/fpga-group/b/blog/posts/zub1cg_5f00_emmc_5f00_display_5f00_port</link><pubDate>Sun, 31 Aug 2025 19:59:54 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:9ca2754b-4ece-4774-8665-b4c43c692f6f</guid><dc:creator>tjaekel</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Please, have you tried in a similar way with flashing and booting PYNQ (not just a PetaLinux) from it?&lt;/p&gt;
&lt;p&gt;It works a bit for me with PYNQ, but still not all features working in a Python script (e.g. using AXI Intc with a syncing and interrupt signal).&lt;/p&gt;
&lt;p&gt;How to boot and run PYNQ from eMMC?&lt;/p&gt;&lt;img src="https://community.element14.com/aggbug?PostID=27970&amp;AppID=19&amp;AppType=Weblog&amp;ContentType=0" width="1" height="1"&gt;</description></item><item><title>RE: The Art of FPGA Design Season 2 Post 29</title><link>https://community.element14.com/technologies/fpga-group/b/blog/posts/the-art-of-fpga-design-season-2-post-29</link><pubDate>Thu, 28 Aug 2025 20:40:19 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:363a1083-b7f6-4af2-8d7f-faa90df64abd</guid><dc:creator>DAB</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Very good post on DSP implementation.&lt;/p&gt;&lt;img src="https://community.element14.com/aggbug?PostID=29165&amp;AppID=19&amp;AppType=Weblog&amp;ContentType=0" width="1" height="1"&gt;</description></item><item><title>RE: The Art of FPGA Design Season 2 Post 28</title><link>https://community.element14.com/technologies/fpga-group/b/blog/posts/the-art-of-fpga-design-season-2-post-28</link><pubDate>Wed, 27 Aug 2025 17:37:39 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:a605e75e-837d-4c62-a42d-0588d87919bd</guid><dc:creator>flyingbean</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;It is enjoyable to read your blogs after a busy day.&lt;/p&gt;&lt;img src="https://community.element14.com/aggbug?PostID=29149&amp;AppID=19&amp;AppType=Weblog&amp;ContentType=0" width="1" height="1"&gt;</description></item><item><title>RE: The Art of FPGA Design Season 2 Post 28</title><link>https://community.element14.com/technologies/fpga-group/b/blog/posts/the-art-of-fpga-design-season-2-post-28</link><pubDate>Thu, 21 Aug 2025 19:17:17 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:a605e75e-837d-4c62-a42d-0588d87919bd</guid><dc:creator>DAB</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Great series, thanks.&lt;/p&gt;&lt;img src="https://community.element14.com/aggbug?PostID=29149&amp;AppID=19&amp;AppType=Weblog&amp;ContentType=0" width="1" height="1"&gt;</description></item><item><title>RE: The Art of FPGA Design Season 2 Post 27</title><link>https://community.element14.com/technologies/fpga-group/b/blog/posts/the-art-of-fpga-design-season-2-post-27</link><pubDate>Tue, 19 Aug 2025 19:41:59 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:5a0c8d94-4a31-444b-b07e-fae72e788fb2</guid><dc:creator>DAB</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Very infomative.&lt;/p&gt;&lt;img src="https://community.element14.com/aggbug?PostID=29146&amp;AppID=19&amp;AppType=Weblog&amp;ContentType=0" width="1" height="1"&gt;</description></item></channel></rss>