design works on fpga, but in simulation a counter is always 'x'

OP #3562853
Rate this post
• ▲ useful
▼ not useful
I have an ax8 from opencores that runs a counter that shows on the leds 
on my development board. I'm very happy, it works.

I wanted to simulate this too, after all this is very educational. I 
also wanted to change the program with a generated rom in block ram 
afterwards.

I wrote a very simple text fixture in Verilog (the ax8 is in VHDL) to 
run my simulation. Unfortunately the counter clk_div stays undefined all 
the time, so the processor doesn't even get its clock to work.

I use Xilinx webpack 12.4 and ISim for this.

I attached the top-level module and the test-fixture code to this post.

What am I doing wrong?

Many thanks in advance.
Attached files:
Moderator (Company: Titel) #3563003
Rate this post
• ▲ useful
▼ not useful
Jay Christnach wrote:
> Unfortunately the counter clk_div stays undefined all the time
Give it an initial value:
signal clk_div : std_logic_vector(15 downto 0) := (others=>'0');
This may also apply to the other signals...

BTW: in my eyes this design is rubbish!
Never ever generate a clock like this:
1
      if clk_div > x"0018" then
2
        Clk <= '1';  -- A more symmetric clock.
3
      else
4
        Clk <= '0';
5
      end if;
The FPGA designer implemented clock managers to generate clocks.
OP #3564226
Rate this post
• ▲ useful
▼ not useful
Hello Lothar,

Many thanks. This did help indeed. I'm impressed by the enormous 
verbosity of VHDL. I still have to learn this, for now I'm still Verilog 
only.

But how do I know if I have to set an initial value like this? In the 
whole rest of the design I didn't have to change anything, but it all 
worked.

I copied the top level from an experienced developer, the rest is the 
ax8 from opencores. Maybe you want to explain what I would gain from a 
DCM, but I guess I can look that up elsewhere. After all this works 
independantly from the tools or hardware. It's maybe a quick and dirty 
way to do it.

BTW, I also came across your website, which has a lot of information. 
Thanks again!

Jay
Moderator (Company: Titel) #3564617
Rate this post
• ▲ useful
▼ not useful
Jay Christnach wrote:
> Many thanks.
You're welcome.

> But how do I know if I have to set an initial value like this?
You can/should/must set ist for registered values (those being clocked) 
if you don't have a explicit reset path in the process (which is 
usuallay not necessary, see WP272 from Xilinx).
You just must know, that the simulator inititlizes signals/variables 
implcitly with the leftmost value of the according type if you don't 
explicitly assign your desired value. And the leftmost value for the 
type std_logic is 'U' 
(http://www.quicknet.se/hdc/hdl/educaton/types/exampl.htm) which results 
together with something else to an 'X'.
The synthesizer is not able to do anything other than '1' and '0' inside 
the FPGA (and also a 'Z' on the IO cells), and so it assigns a '0' to 
uninitialized values.
Therefore often the rumor is: in real life it is ok, in simulation it 
doesn't work! And thats only a hint that the simulation is simply wrong 
due to an incomplete VHDL model.

In Verilog lots of those declarations are implicitly done and a little 
bit more hidden from an occasional reader. VHDL is more straightforward, 
you must explicitly write down such things and so it is more obvious 
that/when they are missing.

Reply

Note: the original post is older than 6 months. Please don't ask any new questions in this thread, but start a new one.

Formatting
  • [c]C-Code[/c]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]code in other languages, ASCII drawings[/code]
  • [math]formula (LaTeX syntax)[/math]
  • [[Title]] – link to an article
  • Link to another post: right-click its post ID (#8078628), copy the address, paste it into the text

More about formatting

Post long source code as an attachment, not in the text.

Already registered? Log in

Not shown to anyone. We send you a link; your post appears once you confirm it there.

By submitting you create a free account and accept the terms of use.