I have tried to design a Booth multiplier and it runs well in all compilers including:
Modelsim,Verilogger Extreame,Aldec Active Hdl & Xilinx\'s Isim......<
This is poorly written code.You have written it like a computer program. Verilog is a Hardware Description Language - not a programming language. In your case, synthesizer is trying to replicate logic inside the while loop in the case statement.
Here are some tips:
c[5:1]
is a latch because it is not initialized in the if(a==5'b10000)
branch. d
is not defined in if(a==5'b10000)
and could be a potential latch depending on the synthesizer optimization capabilities.e
is not defined in if(b==5'b10000)
and could be a potential latch like d
.disable
for code to be synthesized. Use if-else statements instead.
if(count*==3'b101)
block)while
loop is having problems, try a for
loop.While
loops tend to imply something dynamic, like checking a condition. This is not a good use of verilog intended for synthesis. For
loops which can be statically unrolled are more commonly used to shorten the written code.
If you need some thing more dynamic a dedicated state machine should be written.
To answer some of the questions raised in the comments:
Combinatorial logic uses assign
or is contained in always @*
this is continuously evaluated and all runs in parallel think AND, OR, NOR gates.
Sequential logic will be contained in an always @( posedge clk )
this is executed on every positive edge of the clock. The registers or memory elements used inside of this typically represent Flip-Flops.