Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > VHDL > Query about MOD operator for synthesis

Reply
Thread Tools

Query about MOD operator for synthesis

 
 
jahaya@gmail.com
Guest
Posts: n/a
 
      02-07-2005
Hello All,

Below mentioned is a code for simple counter, I was not able to
synthesize the same because of mod operator. Since the implementation
available for modulus are by powers of 2. In my case the mod values
aren't power's of 2.

How can i resolve this problem ?

--------------------------------------------------------------

library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;

entity cpx_controller is

port(
clk : in std_logic;
reset : in std_logic;
en_counter : in std_logic;
count_approx : out std_logic_vector(17 downto 0);
count_detail : out std_logic_vector (17 downto 0)
);
end cpx_controller;

architecture cpx_control of cpx_controller is

signal count_appr : natural;
signal count_deta : natural;
signal count_mod : natural;
signal incrementer : natural;

constant row_size : natural := 288;
constant col_size : natural := 176;
constant col_offset : natural := 50688;

begin

counter_check: process(clk,reset,en_counter)

begin

if (reset='0' or en_counter = '0') then
count_mod <= 0;
elsif (clk'event and clk='1') then
if (en_counter = '1') then
count_mod <= (count_mod+1) mod 176;
end if;
end if;
end process counter_check;

counter_approx: process(clk,reset)

begin

if (reset='0') then
incrementer<= 0;
elsif (clk'event and clk = '1')then
if (count_mod = 175) then
incrementer <= (incrementer+1) mod 288;
end if;
end if;

end process counter_approx;


count_appr <= incrementer + count_mod*row_size;
count_deta <= col_offset+count_appr;

count_approx <= std_logic_vector((to_unsigned(count_appr,1));
count_detail <= std_logic_vector((to_unsigned(count_deta,1));


end architecture cpx_control;

--------------------------------------------------------------

Thanks in advance,
Ali

 
Reply With Quote
 
 
 
 
Allan Herriman
Guest
Posts: n/a
 
      02-07-2005
On 7 Feb 2005 00:32:33 -0800, http://www.velocityreviews.com/forums/(E-Mail Removed) wrote:

It appears that you just want a counter with a certain terminal count
rather than a general mod operation.

Try changing:

count_mod <= (count_mod+1) mod 176;

to:

if count_mod < 175 then
count_mod <= count_mod+1;
else
count_mod <= 0;
end if;

This should do the same thing, assuming that count_mod never exceeds
175.


BTW, avoid using type 'natural' for synthesis. This may produce a 32
bit value, unless the synthesiser is particularly clever. It is
better to use a constrained range, or perhaps an unsigned of
appropriate width.

Regards,
Allan
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Why doesn't `from pkg import mod' work after `del pkg.mod'? ryles Python 3 07-26-2009 04:13 PM
difference between import from mod.func() and x=mod.func() Hari Sekhon Python 0 06-20-2006 08:07 AM
MOD operator synthesis Basel Naamna VHDL 2 05-10-2004 09:51 PM
append_features(mod) -- mod.kind_of? makes absolutely no sense T. Onoma Ruby 9 12-15-2003 03:34 AM
MOD function synthesis praveen VHDL 1 09-24-2003 12:45 AM



Advertisments