Continue to Site

Welcome to EDAboard.com

Welcome to our site! EDAboard.com is an international Electronics Discussion Forum focused on EDA software, circuits, schematics, books, theory, papers, asic, pld, 8051, DSP, Network, RF, Analog Design, PCB, Service Manuals... and a whole lot more! To participate you need to register. Registration is free. Click here to register now.

[SOLVED] Signal cannot be synthesized, bad synchronous description.

Status
Not open for further replies.

nakshathra

Junior Member level 1
Junior Member level 1
Joined
Sep 4, 2013
Messages
19
Helped
0
Reputation
0
Reaction score
0
Trophy points
1
Visit site
Activity points
134
the following code results the below error on synthesis:
ERROR:Xst:827 - "C:/Documents and Settings/Administrator/Desktop/xilinx prgms/sqr/sqr.vhd" line 65: Signal clkout cannot be synthesized, bad synchronous description. The description style you are using to describe a synchronous element (register, memory, etc.) is not supported in the current software release.

Please resolve the error.

Code:
process(reset,clk_count(25))
begin
if reset='1' then
	count<=x"0000";
	clkout<='0';
elsif (clk_count(25)='1' and clk_count(25)'event) then
	count<=count+'1';
	clkout<='1';
else clkout<='0';
end if;
end process;
 

the following code results the below error on synthesis:
ERROR:Xst:827 - "C:/Documents and Settings/Administrator/Desktop/xilinx prgms/sqr/sqr.vhd" line 65: Signal clkout cannot be synthesized, bad synchronous description. The description style you are using to describe a synchronous element (register, memory, etc.) is not supported in the current software release.

Please resolve the error.

Code:
process(reset,clk_count(25))
begin
if reset='1' then
	count<=x"0000";
	clkout<='0';
elsif (clk_count(25)='1' and clk_count(25)'event) then
	count<=count+'1';
	clkout<='1';
else clkout<='0';
end if;
end process;

this is not a standard way to implement a sequential process.
(the last "else" branch with the clkout tie to '0').
so clkout logic does not make much sense.
also you are implementing a sort of a riple counter here which is problematic issue.
in general, you must stick to a synchronous design with one clock,
as much as possible.
even async reset can be avoided by a synchroniser circuit.

hope i helped...
 

I think the problem is the "else clkout<='0';". Because "clk_count(25)'event" is an instant in time (ideally) then your else statement implies every other point in time "clkout<='0'". So your your asking it to create a perfect impulse like: _____|______ which it can't do of course. If you want a really short pulse at the rising edge of clk_count(25) then you need to explicitly state that, for example, with NOT and XOR gates: https://vhdlguru.blogspot.ca/2010/04/combinatorial-frequency-multiplier.html

If you want your "clkout" signal to remember its state after "clk_count(25)'event" then use the usual async reset syntax:

Code:
if reset = '1' then
    clkout<='0';
else
    if (clk_count(25)='1' and clk_count(25)'event) then
        clkout <= '1';
    end if;
end if;
 

Status
Not open for further replies.

Part and Inventory Search

Welcome to EDABoard.com

Sponsor

Back
Top