Velocity Reviews

Velocity Reviews (http://www.velocityreviews.com/forums/index.php)
-   VHDL (http://www.velocityreviews.com/forums/f18-vhdl.html)
-   -   DSP48 in synchronous process or not, what's the difference? (http://www.velocityreviews.com/forums/t961617-dsp48-in-synchronous-process-or-not-whats-the-difference.html)

Ethan Zheng 06-10-2013 07:08 PM

DSP48 in synchronous process or not, what's the difference?
 
I am so curious about the behavior difference between the following codes.
Please comment,

CODE1:
signal reg_in : signed(17 downto 0);
signal reg_product : signal(35 downto 0);

Product_out_pipe_process : PROCESS (clk)
BEGIN
IF clk'EVENT AND clk = '1' THEM
reg_in <= port_in; -- multiplication pipeline in
reg_product <= reg_in * reg_in; -- pipeline out
port_out <= reg_product;
END IF;
END PROCESS Product_out_pipe_process;

CODE2:
signal reg_in : signed(17 downto 0);
signal reg_product : signal(35 downto 0);
signal reg_product_1 : signal(35 downto 0);

Pipe_in_process : PROGRESS (clk)
BEGIN
IF clk'EVENT AND clk = '1' THEM
reg_in <= port_in;
END IF
END PROCESS Pipe_in_process;

reg_product <= reg_in * reg_in; -- multiplication not clk sensitive

Pipe_out_process : PROGRESS (clk)
BEGIN
IF clk'EVENT AND clk = '1' THEM
reg_product_1 <= reg_product
END IF
END PROGRESS Pipe_out_process



Andy 06-10-2013 08:59 PM

Re: DSP48 in synchronous process or not, what's the difference?
 
In code2, reg_product is not a register, so it does not consume a clock cycle, but it does consume one in code1.

Andy

goouse99@gmail.com 06-12-2013 06:29 AM

Re: DSP48 in synchronous process or not, what's the difference?
 
Am Montag, 10. Juni 2013 21:08:15 UTC+2 schrieb Ethan Zheng:
> I am so curious about the behavior difference between the following codes.
>
> Please comment,
>
>
>
> CODE1:
>
> signal reg_in : signed(17 downto 0);
>
> signal reg_product : signal(35 downto 0);
>
>
>
> Product_out_pipe_process : PROCESS (clk)
>
> BEGIN
>
> IF clk'EVENT AND clk = '1' THEM
>
> reg_in <= port_in; -- multiplication pipeline in
>
> reg_product <= reg_in * reg_in; -- pipeline out
>
> port_out <= reg_product;
>
> END IF;
>
> END PROCESS Product_out_pipe_process;
>
>
>
> CODE2:
>
> signal reg_in : signed(17 downto 0);
>
> signal reg_product : signal(35 downto 0);
>
> signal reg_product_1 : signal(35 downto 0);
>
>
>
> Pipe_in_process : PROGRESS (clk)
>
> BEGIN
>
> IF clk'EVENT AND clk = '1' THEM
>
> reg_in <= port_in;
>
> END IF
>
> END PROCESS Pipe_in_process;
>
>
>
> reg_product <= reg_in * reg_in; -- multiplication not clk sensitive
>
>
>
> Pipe_out_process : PROGRESS (clk)
>
> BEGIN
>
> IF clk'EVENT AND clk = '1' THEM
>
> reg_product_1 <= reg_product
>
> END IF
>
> END PROGRESS Pipe_out_process


Hi,
Code1 has a latency of 3 while code 2 has a latency of 2.
(I assume reg_product1 to be identical with port_out).

Code 2 could be rewritten like this without functional changes:
Pipe_out_process : PROGRESS (clk)
BEGIN
IF clk'EVENT AND clk = '1' THEM
reg_product_1 <= reg_in*reg_in; -- now inside sync process,
END IF
END PROGRESS Pipe_out_process

Both architectures might synthesize to DSP48, since the multiplication is enclosed with registers. Additional pipeline stages are possible, but only required if your algorithm needs it. Otherwise you are just wasting clock cycles.

Have a nice synthesis
Eilert


All times are GMT. The time now is 12:06 PM.

Powered by vBulletin®. Copyright ©2000 - 2014, vBulletin Solutions, Inc.
SEO by vBSEO ©2010, Crawlability, Inc.